/************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_svx.hxx" // include --------------------------------------------------------------- #include // HACK: prevent conflict between STLPORT and Workshop headers #include #ifndef _SV_BUTTON_HXX //autogen #include #endif #include #include #include #include #include "svx/layctrl.hxx" #include #include #include // namespaces using namespace ::com::sun::star::uno; using namespace ::com::sun::star::beans; using namespace ::com::sun::star::util; using namespace ::com::sun::star::frame; SFX_IMPL_TOOLBOX_CONTROL(SvxTableToolBoxControl,SfxUInt16Item); SFX_IMPL_TOOLBOX_CONTROL(SvxColumnsToolBoxControl,SfxUInt16Item); // class TableWindow ----------------------------------------------------- class TableWindow : public SfxPopupWindow { private: ::Color aLineColor; ::Color aHighlightLineColor; ::Color aFillColor; ::Color aHighlightFillColor; long nCol; long nLine; long nWidth; long nHeight; long nMX; long nMY; long nTextHeight; sal_Bool bInitialKeyInput; sal_Bool m_bMod1; ToolBox& rTbx; Reference< XFrame > mxFrame; rtl::OUString maCommand; void UpdateSize_Impl( long nNewCol, long nNewLine); public: TableWindow( sal_uInt16 nSlotId, const rtl::OUString& rCmd, ToolBox& rParentTbx, const Reference< XFrame >& rFrame ); ~TableWindow(); void KeyInput( const KeyEvent& rKEvt ); virtual void MouseMove( const MouseEvent& rMEvt ); virtual void MouseButtonDown( const MouseEvent& rMEvt ); virtual void MouseButtonUp( const MouseEvent& rMEvt ); virtual void Paint( const Rectangle& ); virtual void PopupModeEnd(); virtual SfxPopupWindow* Clone() const; sal_uInt16 GetColCount() const { return (sal_uInt16)nCol; } sal_uInt16 GetLineCount() const { return (sal_uInt16)nLine; } }; // ----------------------------------------------------------------------- TableWindow::TableWindow( sal_uInt16 nSlotId, const rtl::OUString& rCmd, ToolBox& rParentTbx, const Reference< XFrame >& rFrame ) : SfxPopupWindow( nSlotId, rFrame, WB_SYSTEMWINDOW ), bInitialKeyInput(sal_True), m_bMod1(sal_False), rTbx(rParentTbx), mxFrame( rFrame ), maCommand( rCmd ) { const StyleSettings& rStyles = Application::GetSettings().GetStyleSettings(); svtools::ColorConfig aColorConfig; aLineColor = ::Color( aColorConfig.GetColorValue( svtools::FONTCOLOR ).nColor ); aHighlightLineColor = rStyles.GetHighlightTextColor(); aFillColor = rStyles.GetWindowColor(); aHighlightFillColor = rStyles.GetHighlightColor(); nTextHeight = GetTextHeight()+1; SetBackground(); Font aFont = GetFont(); aFont.SetColor( aLineColor ); aFont.SetFillColor( aFillColor ); aFont.SetTransparent( sal_False ); SetFont( aFont ); nCol = 0; nLine = 0; nWidth = 5; nHeight = 5; Size aLogicSize = LogicToPixel( Size( 55, 35 ), MapMode( MAP_10TH_MM ) ); nMX = aLogicSize.Width(); nMY = aLogicSize.Height(); SetOutputSizePixel( Size( nMX*nWidth-1, nMY*nHeight-1+nTextHeight ) ); } // ----------------------------------------------------------------------- TableWindow::~TableWindow() { } // ----------------------------------------------------------------------- SfxPopupWindow* TableWindow::Clone() const { return new TableWindow( GetId(), maCommand, rTbx, mxFrame ); } // ----------------------------------------------------------------------- void TableWindow::MouseMove( const MouseEvent& rMEvt ) { SfxPopupWindow::MouseMove( rMEvt ); Point aPos = rMEvt.GetPosPixel(); Point aMousePos( aPos ); if ( rMEvt.IsEnterWindow() ) CaptureMouse(); else if ( aMousePos.X() < 0 || aMousePos.Y() < 0 ) { nCol = 0; nLine = 0; ReleaseMouse(); Invalidate(); return; } long nNewCol = 0; long nNewLine = 0; if ( aPos.X() > 0 ) nNewCol = aPos.X() / nMX + 1; if ( aPos.Y() > 0 ) nNewLine = aPos.Y() / nMY + 1; if ( nNewCol > 500 ) nNewCol = 500; if ( nNewLine > 1000 ) nNewLine = 1000; UpdateSize_Impl( nNewCol, nNewLine); } /* -----------------------------15.05.2002 17:14------------------------------ ---------------------------------------------------------------------------*/ void TableWindow::UpdateSize_Impl( long nNewCol, long nNewLine) { Size aWinSize = GetOutputSizePixel(); Point aWinPos = GetPosPixel(); Point aMaxPos = OutputToScreenPixel( GetDesktopRectPixel().BottomRight() ); if ( (nWidth <= nNewCol) || (nHeight < nNewLine) ) { long nOff = 0; if ( nWidth <= nNewCol ) { nWidth = nNewCol; nWidth++; } if ( nHeight <= nNewLine ) { nHeight = nNewLine; nOff = 1; } while ( nWidth > 0 && (short)(aWinPos.X()+(nMX*nWidth-1)) >= aMaxPos.X()-3 ) nWidth--; while ( nHeight > 0 && (short)(aWinPos.Y()+(nMY*nHeight-1+nTextHeight)) >= aMaxPos.Y()-3 ) nHeight--; if ( nNewCol > nWidth ) nNewCol = nWidth; if ( nNewLine > nHeight ) nNewLine = nHeight; Size _aWinSize = GetOutputSizePixel(); Invalidate( Rectangle( 0, _aWinSize.Height()-nTextHeight+2-nOff, _aWinSize.Width(), _aWinSize.Height() ) ); SetOutputSizePixel( Size( nMX*nWidth-1, nMY*nHeight-1+nTextHeight ) ); } long nMinCol = 0; long nMaxCol = 0; long nMinLine = 0; long nMaxLine = 0; if ( nNewCol < nCol ) { nMinCol = nNewCol; nMaxCol = nCol; } else { nMinCol = nCol; nMaxCol = nNewCol; } if ( nNewLine < nLine ) { nMinLine = nNewLine; nMaxLine = nLine; } else { nMinLine = nLine; nMaxLine = nNewLine; } if ( (nNewCol != nCol) || (nNewLine != nLine) ) { Invalidate( Rectangle( 0, aWinSize.Height()-nTextHeight+2, aWinSize.Width(), aWinSize.Height() ) ); if ( nNewCol != nCol ) { Invalidate( Rectangle( nMinCol*nMX-1, 0, nMaxCol*nMX+1, nMaxLine*nMY ) ); nCol = nNewCol; } if ( nNewLine != nLine ) { Invalidate( Rectangle( 0, nMinLine*nMY-2, nMaxCol*nMX, nMaxLine*nMY+1 ) ); nLine = nNewLine; } } Update(); } /* -----------------------------15.05.2002 14:22------------------------------ ---------------------------------------------------------------------------*/ void TableWindow::KeyInput( const KeyEvent& rKEvt ) { sal_Bool bHandled = sal_False; sal_uInt16 nModifier = rKEvt.GetKeyCode().GetModifier(); sal_uInt16 nKey = rKEvt.GetKeyCode().GetCode(); if(!nModifier) { if( KEY_UP == nKey || KEY_DOWN == nKey || KEY_LEFT == nKey || KEY_RIGHT == nKey || KEY_ESCAPE == nKey ||KEY_RETURN == nKey ) { bHandled = sal_True; long nNewCol = nCol; long nNewLine = nLine; switch(nKey) { case KEY_UP : if(nNewLine > 1) { nNewLine--; break; } //no break; case KEY_ESCAPE: EndPopupMode( FLOATWIN_POPUPMODEEND_CANCEL); break; case KEY_DOWN : nNewLine++; break; case KEY_LEFT : if(nNewCol) nNewCol--; break; case KEY_RIGHT : nNewCol++; break; case KEY_RETURN : if(IsMouseCaptured()) ReleaseMouse(); EndPopupMode(FLOATWIN_POPUPMODEEND_CLOSEALL ); break; } //make sure that a table can initially be created if(bInitialKeyInput) { bInitialKeyInput = sal_False; if(!nNewLine) nNewLine = 1; if(!nNewCol) nNewCol = 1; } UpdateSize_Impl( nNewCol, nNewLine); } } else if(KEY_MOD1 == nModifier && KEY_RETURN == nKey) { m_bMod1 = sal_True; if(IsMouseCaptured()) ReleaseMouse(); EndPopupMode(FLOATWIN_POPUPMODEEND_CLOSEALL ); } if(!bHandled) SfxPopupWindow::KeyInput(rKEvt); } // ----------------------------------------------------------------------- void TableWindow::MouseButtonDown( const MouseEvent& rMEvt ) { SfxPopupWindow::MouseButtonDown( rMEvt ); CaptureMouse(); } // ----------------------------------------------------------------------- void TableWindow::MouseButtonUp( const MouseEvent& rMEvt ) { SfxPopupWindow::MouseButtonUp( rMEvt ); ReleaseMouse(); if ( IsInPopupMode() ) EndPopupMode( FLOATWIN_POPUPMODEEND_CLOSEALL ); } // ----------------------------------------------------------------------- void TableWindow::Paint( const Rectangle& ) { long i; long nStart; Size aSize = GetOutputSizePixel(); SetLineColor(); SetFillColor( aHighlightFillColor ); DrawRect( Rectangle( 0, 0, nCol*nMX-1, nLine*nMY-1 ) ); SetFillColor( aFillColor ); DrawRect( Rectangle( nCol*nMX-1, 0, aSize.Width(), aSize.Height()-nTextHeight+1 ) ); DrawRect( Rectangle( 0, nLine*nMY-1, aSize.Width(), aSize.Height()-nTextHeight+1 ) ); SetLineColor( aHighlightLineColor ); for ( i = 1; i < nCol; i++ ) DrawLine( Point( i*nMX-1, 0 ), Point( i*nMX-1, nLine*nMY-1 ) ); for ( i = 1; i < nLine; i++ ) DrawLine( Point( 0, i*nMY-1 ), Point( nCol*nMX-1, i*nMY-1 ) ); SetLineColor( aLineColor ); for ( i = 1; i <= nWidth; i++ ) { if ( i < nCol ) nStart = nLine*nMY-1; else nStart = 0; DrawLine( Point( i*nMX-1, nStart ), Point( i*nMX-1, nHeight*nMY-1 ) ); } for ( i = 1; i <= nHeight; i++ ) { if ( i < nLine ) nStart = nCol*nMX-1; else nStart = 0; DrawLine( Point( nStart, i*nMY-1 ), Point( nWidth*nMX-1, i*nMY-1 ) ); } SetLineColor(); String aText; if ( nCol && nLine ) { aText += String::CreateFromInt32( nCol ); aText.AppendAscii( " x " ); aText += String::CreateFromInt32( nLine ); if(GetId() == FN_SHOW_MULTIPLE_PAGES) { aText += ' '; aText += String(SVX_RESSTR(RID_SVXSTR_PAGES)); } } else aText = Button::GetStandardText( BUTTON_CANCEL ); Size aTextSize( GetTextWidth( aText ), GetTextHeight() ); Rectangle aClearRect( 0, aSize.Height()-nTextHeight+2, (aSize.Width()), aSize.Height() ); DrawRect( aClearRect ); // #i95350# force RTL output if( IsRTLEnabled() && nCol && nLine ) aText.Insert(0x202D, 0); DrawText( Point( (aSize.Width() - aTextSize.Width()) / 2, aSize.Height() - nTextHeight + 2 ), aText ); SetLineColor( aLineColor ); SetFillColor(); DrawRect( Rectangle( Point(0,0), aSize ) ); } // ----------------------------------------------------------------------- void TableWindow::PopupModeEnd() { if ( !IsPopupModeCanceled() && nCol && nLine ) { Window* pParent = rTbx.GetParent(); sal_uInt16 nId = GetId(); pParent->UserEvent(SVX_EVENT_COLUM_WINDOW_EXECUTE, reinterpret_cast(nId)); Reference< XDispatchProvider > xDispatchProvider( mxFrame, UNO_QUERY ); if ( xDispatchProvider.is() ) { com::sun::star::util::URL aTargetURL; Reference < XURLTransformer > xTrans( ::comphelper::getProcessServiceFactory()->createInstance( rtl::OUString::createFromAscii("com.sun.star.util.URLTransformer" )), UNO_QUERY ); aTargetURL.Complete = maCommand; xTrans->parseStrict( aTargetURL ); Reference< XDispatch > xDispatch = xDispatchProvider->queryDispatch( aTargetURL, rtl::OUString(), 0 ); if ( xDispatch.is() ) { Sequence< PropertyValue > aArgs( 2 ); aArgs[0].Name = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Columns" )); aArgs[0].Value = makeAny( sal_Int16( nCol )); aArgs[1].Name = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Rows" )); aArgs[1].Value = makeAny( sal_Int16( nLine )); xDispatch->dispatch( aTargetURL, aArgs ); } } } else if ( IsPopupModeCanceled() ) ReleaseMouse(); SfxPopupWindow::PopupModeEnd(); } // class ColumnsWindow --------------------------------------------------- class ColumnsWindow : public SfxPopupWindow { private: ::Color aLineColor; ::Color aHighlightLineColor; ::Color aFillColor; ::Color aHighlightFillColor; long nCol; long nWidth; long nMX; long nTextHeight; sal_Bool bInitialKeyInput; sal_Bool m_bMod1; ToolBox& rTbx; Reference< XFrame > mxFrame; ::rtl::OUString maCommand; void UpdateSize_Impl( long nNewCol ); public: ColumnsWindow( sal_uInt16 nId, const ::rtl::OUString& rCmd, ToolBox& rParentTbx, const Reference< XFrame >& rFrame ); void KeyInput( const KeyEvent& rKEvt ); virtual void MouseMove( const MouseEvent& rMEvt ); virtual void MouseButtonDown( const MouseEvent& rMEvt ); virtual void MouseButtonUp( const MouseEvent& rMEvt ); virtual void Paint( const Rectangle& ); virtual void PopupModeEnd(); virtual SfxPopupWindow* Clone() const; sal_uInt16 GetColCount() const { return (sal_uInt16)nCol; } }; // ----------------------------------------------------------------------- ColumnsWindow::ColumnsWindow( sal_uInt16 nId, const ::rtl::OUString& rCmd, ToolBox& rParentTbx, const Reference< XFrame >& rFrame ) : SfxPopupWindow( nId, rFrame, WB_SYSTEMWINDOW ), bInitialKeyInput(sal_True), m_bMod1(sal_False), rTbx(rParentTbx), mxFrame(rFrame), maCommand( rCmd ) { const StyleSettings& rStyles = Application::GetSettings().GetStyleSettings(); svtools::ColorConfig aColorConfig; aLineColor = ::Color( aColorConfig.GetColorValue( svtools::FONTCOLOR ).nColor ); aHighlightLineColor = rStyles.GetHighlightTextColor(); aFillColor = rStyles.GetWindowColor(); aHighlightFillColor = rStyles.GetHighlightColor(); nTextHeight = GetTextHeight()+1; SetBackground(); Font aFont( GetFont() ); aFont.SetColor( aLineColor ); aFont.SetFillColor( aFillColor ); aFont.SetTransparent( sal_False ); SetFont( aFont ); nCol = 0; nWidth = 4; Size aLogicSize = LogicToPixel( Size( 95, 155 ), MapMode( MAP_10TH_MM ) ); nMX = aLogicSize.Width(); SetOutputSizePixel( Size( nMX*nWidth-1, aLogicSize.Height()+nTextHeight ) ); StartCascading(); } // ----------------------------------------------------------------------- SfxPopupWindow* ColumnsWindow::Clone() const { return new ColumnsWindow( GetId(), maCommand, rTbx, mxFrame ); } // ----------------------------------------------------------------------- void ColumnsWindow::MouseMove( const MouseEvent& rMEvt ) { SfxPopupWindow::MouseMove( rMEvt ); Point aPos = rMEvt.GetPosPixel(); Point aMousePos = aPos; Point aWinPos = GetPosPixel(); if ( rMEvt.IsEnterWindow() ) CaptureMouse(); else if ( aMousePos.X() < 0 || aMousePos.Y() < 0 ) { nCol = 0; ReleaseMouse(); Invalidate(); return; } long nNewCol = 0; if ( aPos.X() > 0 ) nNewCol = aPos.X() / nMX + 1; if ( aPos.Y() < 0 ) nNewCol = 0; if ( nNewCol > 20 ) nNewCol = 20; UpdateSize_Impl( nNewCol ); } /* -----------------------------21.05.2002 16:16------------------------------ ---------------------------------------------------------------------------*/ void ColumnsWindow::UpdateSize_Impl( long nNewCol ) { Size aWinSize = GetOutputSizePixel(); long nMinCol = 0; long nMaxCol = 0; Point aWinPos;// = GetPosPixel(); if ( nWidth <= nNewCol ) { Point aMaxPos = OutputToScreenPixel( GetDesktopRectPixel().BottomRight() ); if ( nWidth <= nNewCol ) { nWidth = nNewCol; nWidth++; } while ( nWidth > 0 && (short)(aWinPos.X()+(nMX*nWidth-1)) >= aMaxPos.X()-3 ) nWidth--; if ( nNewCol > nWidth ) nNewCol = nWidth; Invalidate( Rectangle( 0, aWinSize.Height()-nTextHeight+2, aWinSize.Width(), aWinSize.Height() ) ); SetOutputSizePixel( Size( nMX*nWidth-1, aWinSize.Height() ) ); } if ( nNewCol != nCol ) { Invalidate( Rectangle( 0, aWinSize.Height()-nTextHeight+2, aWinSize.Width(), aWinSize.Height() ) ); if ( nNewCol < nCol ) { nMinCol = nNewCol; nMaxCol = nCol; } else { nMinCol = nCol; nMaxCol = nNewCol; } Invalidate( Rectangle( nMinCol*nMX-1, 0, nMaxCol*nMX+1, aWinSize.Height()-nTextHeight+2 ) ); nCol = nNewCol; } Update(); } // ----------------------------------------------------------------------- void ColumnsWindow::MouseButtonDown( const MouseEvent& rMEvt ) { SfxPopupWindow::MouseButtonDown( rMEvt ); CaptureMouse(); } /* -----------------------------21.05.2002 16:11------------------------------ ---------------------------------------------------------------------------*/ void ColumnsWindow::KeyInput( const KeyEvent& rKEvt ) { sal_Bool bHandled = sal_False; sal_uInt16 nModifier = rKEvt.GetKeyCode().GetModifier(); sal_uInt16 nKey = rKEvt.GetKeyCode().GetCode(); if(!nModifier) { if( KEY_LEFT == nKey || KEY_RIGHT == nKey || KEY_RETURN == nKey ||KEY_ESCAPE == nKey || KEY_UP == nKey) { bHandled = sal_True; long nNewCol = nCol; switch(nKey) { case KEY_LEFT : if(nNewCol) nNewCol--; break; case KEY_RIGHT : nNewCol++; break; case KEY_RETURN : if(IsMouseCaptured()) ReleaseMouse(); EndPopupMode(FLOATWIN_POPUPMODEEND_CLOSEALL ); break; case KEY_ESCAPE : case KEY_UP : EndPopupMode( FLOATWIN_POPUPMODEEND_CANCEL); break; } //make sure that a table can initially be created if(bInitialKeyInput) { bInitialKeyInput = sal_False; if(!nNewCol) nNewCol = 1; } UpdateSize_Impl( nNewCol ); } } else if(KEY_MOD1 == nModifier && KEY_RETURN == nKey) { m_bMod1 = sal_True; if(IsMouseCaptured()) ReleaseMouse(); EndPopupMode(FLOATWIN_POPUPMODEEND_CLOSEALL ); } if(!bHandled) SfxPopupWindow::KeyInput(rKEvt); } // ----------------------------------------------------------------------- void ColumnsWindow::MouseButtonUp( const MouseEvent& rMEvt ) { SfxPopupWindow::MouseButtonUp( rMEvt ); ReleaseMouse(); if ( IsInPopupMode() ) EndPopupMode( FLOATWIN_POPUPMODEEND_CLOSEALL ); } // ----------------------------------------------------------------------- void ColumnsWindow::Paint( const Rectangle& ) { long i; long j; long nLineWidth; Size aSize = GetOutputSizePixel(); for ( i = 0; i < nWidth; i++ ) { if ( i < nCol ) { SetLineColor( aHighlightLineColor ); SetFillColor( aHighlightFillColor ); } else { SetLineColor( aLineColor ); SetFillColor( aFillColor ); } DrawRect( Rectangle( i*nMX-1, -1, i*nMX+nMX, aSize.Height()-nTextHeight+1 ) ); j = 4; while ( j < aSize.Height()-nTextHeight-4 ) { if ( !(j % 16) ) nLineWidth = 10; else nLineWidth = 4; DrawLine( Point( i*nMX+4, j ), Point( i*nMX+nMX-nLineWidth-4, j ) ); j += 4; } } SetLineColor(); SetFillColor( aFillColor ); String aText; if ( nCol ) aText = String( String::CreateFromInt32(nCol) ); else aText = Button::GetStandardText( BUTTON_CANCEL ); Size aTextSize(GetTextWidth( aText ), GetTextHeight()); DrawText( Point( ( aSize.Width() - aTextSize.Width() ) / 2, aSize.Height() - nTextHeight + 2 ), aText ); DrawRect( Rectangle( 0, aSize.Height()-nTextHeight+2, (aSize.Width()-aTextSize.Width())/2-1, aSize.Height() ) ); DrawRect( Rectangle( (aSize.Width()-aTextSize.Width())/2+aTextSize.Width(), aSize.Height()-nTextHeight+2, aSize.Width(), aSize.Height() ) ); SetLineColor( aLineColor ); SetFillColor(); DrawRect( Rectangle( Point(0,0), aSize ) ); } // ----------------------------------------------------------------------- void ColumnsWindow::PopupModeEnd() { if ( !IsPopupModeCanceled() && nCol ) { sal_uInt16 nId = GetId(); Window* pParent = rTbx.GetParent(); pParent->UserEvent(SVX_EVENT_COLUM_WINDOW_EXECUTE, reinterpret_cast(nId)); Sequence< PropertyValue > aArgs( 2 ); aArgs[0].Name = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Columns" )); aArgs[0].Value = makeAny( sal_Int16( nCol )); aArgs[1].Name = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Modifier" )); aArgs[1].Value = makeAny( sal_Int16( m_bMod1 ? KEY_MOD1 : 0 )); SfxToolBoxControl::Dispatch( Reference< XDispatchProvider >( mxFrame->getController(), UNO_QUERY ), maCommand, aArgs ); } else if ( IsPopupModeCanceled() ) ReleaseMouse(); SfxPopupWindow::PopupModeEnd(); } // class SvxTableToolBoxControl ------------------------------------------ SvxTableToolBoxControl::SvxTableToolBoxControl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ) : SfxToolBoxControl( nSlotId, nId, rTbx ), bEnabled( sal_True ) { rTbx.SetItemBits( nId, TIB_DROPDOWN | rTbx.GetItemBits( nId ) ); rTbx.Invalidate(); } // ----------------------------------------------------------------------- SvxTableToolBoxControl::~SvxTableToolBoxControl() { } // ----------------------------------------------------------------------- SfxPopupWindowType SvxTableToolBoxControl::GetPopupWindowType() const { return SFX_POPUPWINDOW_ONTIMEOUTANDMOVE; } // ----------------------------------------------------------------------- SfxPopupWindow* SvxTableToolBoxControl::CreatePopupWindow() { if ( bEnabled ) { ToolBox& rTbx = GetToolBox(); TableWindow* pWin = new TableWindow( GetSlotId(), m_aCommandURL, rTbx, m_xFrame ); pWin->StartPopupMode( &rTbx, FLOATWIN_POPUPMODE_GRABFOCUS|FLOATWIN_POPUPMODE_NOKEYCLOSE ); SetPopupWindow( pWin ); return pWin; } return 0; } // ----------------------------------------------------------------------- SfxPopupWindow* SvxTableToolBoxControl::CreatePopupWindowCascading() { if ( bEnabled ) return new TableWindow( GetSlotId(), m_aCommandURL, GetToolBox(), m_xFrame ); return 0; } // ----------------------------------------------------------------------- void SvxTableToolBoxControl::StateChanged( sal_uInt16, SfxItemState eState, const SfxPoolItem* pState ) { if ( pState && pState->ISA(SfxUInt16Item) ) { sal_Int16 nValue = static_cast< const SfxUInt16Item* >( pState )->GetValue(); bEnabled = ( nValue != 0 ); } else bEnabled = SFX_ITEM_DISABLED != eState; sal_uInt16 nId = GetId(); ToolBox& rTbx = GetToolBox(); rTbx.EnableItem( nId, SFX_ITEM_DISABLED != eState ); rTbx.SetItemState( nId, ( SFX_ITEM_DONTCARE == eState ) ? STATE_DONTKNOW : STATE_NOCHECK ); } // class SvxColumnsToolBoxControl ------------------------------------------ SvxColumnsToolBoxControl::SvxColumnsToolBoxControl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ) : SfxToolBoxControl( nSlotId, nId, rTbx ) { rTbx.SetItemBits( nId, TIB_DROPDOWN | rTbx.GetItemBits( nId ) ); rTbx.Invalidate(); } // ----------------------------------------------------------------------- SvxColumnsToolBoxControl::~SvxColumnsToolBoxControl() { } // ----------------------------------------------------------------------- SfxPopupWindowType SvxColumnsToolBoxControl::GetPopupWindowType() const { return SFX_POPUPWINDOW_ONTIMEOUTANDMOVE; } // ----------------------------------------------------------------------- SfxPopupWindow* SvxColumnsToolBoxControl::CreatePopupWindow() { ColumnsWindow* pWin = 0; if(bEnabled) { pWin = new ColumnsWindow( GetSlotId(), m_aCommandURL, GetToolBox(), m_xFrame ); pWin->StartPopupMode( &GetToolBox(), FLOATWIN_POPUPMODE_GRABFOCUS|FLOATWIN_POPUPMODE_NOKEYCLOSE ); SetPopupWindow( pWin ); } return pWin; } // ----------------------------------------------------------------------- SfxPopupWindow* SvxColumnsToolBoxControl::CreatePopupWindowCascading() { ColumnsWindow* pWin = 0; if(bEnabled) { pWin = new ColumnsWindow( GetSlotId(), m_aCommandURL, GetToolBox(), m_xFrame ); } return pWin; } /* -----------------18.11.99 16:38------------------- --------------------------------------------------*/ void SvxColumnsToolBoxControl::StateChanged( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState ) { bEnabled = SFX_ITEM_DISABLED != eState; SfxToolBoxControl::StateChanged(nSID, eState, pState ); }