xref: /aoo41x/main/svx/source/tbxctrls/layctrl.cxx (revision f6e50924)
1*f6e50924SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*f6e50924SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*f6e50924SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*f6e50924SAndrew Rist  * distributed with this work for additional information
6*f6e50924SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*f6e50924SAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*f6e50924SAndrew Rist  * "License"); you may not use this file except in compliance
9*f6e50924SAndrew Rist  * with the License.  You may obtain a copy of the License at
10*f6e50924SAndrew Rist  *
11*f6e50924SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*f6e50924SAndrew Rist  *
13*f6e50924SAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*f6e50924SAndrew Rist  * software distributed under the License is distributed on an
15*f6e50924SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*f6e50924SAndrew Rist  * KIND, either express or implied.  See the License for the
17*f6e50924SAndrew Rist  * specific language governing permissions and limitations
18*f6e50924SAndrew Rist  * under the License.
19*f6e50924SAndrew Rist  *
20*f6e50924SAndrew Rist  *************************************************************/
21*f6e50924SAndrew Rist 
22*f6e50924SAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_svx.hxx"
26cdf0e10cSrcweir 
27cdf0e10cSrcweir // include ---------------------------------------------------------------
28cdf0e10cSrcweir 
29cdf0e10cSrcweir #include <string> // HACK: prevent conflict between STLPORT and Workshop headers
30cdf0e10cSrcweir #include <vcl/toolbox.hxx>
31cdf0e10cSrcweir #ifndef _SV_BUTTON_HXX //autogen
32cdf0e10cSrcweir #include <vcl/button.hxx>
33cdf0e10cSrcweir #endif
34cdf0e10cSrcweir #include <svl/intitem.hxx>
35cdf0e10cSrcweir #include <sfx2/dispatch.hxx>
36cdf0e10cSrcweir #include <sfx2/app.hxx>
37cdf0e10cSrcweir 
38cdf0e10cSrcweir #include <svx/dialogs.hrc>
39cdf0e10cSrcweir #include "svx/layctrl.hxx"
40cdf0e10cSrcweir #include <svx/dialmgr.hxx>
41cdf0e10cSrcweir #include <comphelper/processfactory.hxx>
42cdf0e10cSrcweir #include <svtools/colorcfg.hxx>
43cdf0e10cSrcweir 
44cdf0e10cSrcweir // namespaces
45cdf0e10cSrcweir using namespace ::com::sun::star::uno;
46cdf0e10cSrcweir using namespace ::com::sun::star::beans;
47cdf0e10cSrcweir using namespace ::com::sun::star::util;
48cdf0e10cSrcweir using namespace ::com::sun::star::frame;
49cdf0e10cSrcweir 
50cdf0e10cSrcweir SFX_IMPL_TOOLBOX_CONTROL(SvxTableToolBoxControl,SfxUInt16Item);
51cdf0e10cSrcweir SFX_IMPL_TOOLBOX_CONTROL(SvxColumnsToolBoxControl,SfxUInt16Item);
52cdf0e10cSrcweir 
53cdf0e10cSrcweir // class TableWindow -----------------------------------------------------
54cdf0e10cSrcweir 
55cdf0e10cSrcweir class TableWindow : public SfxPopupWindow
56cdf0e10cSrcweir {
57cdf0e10cSrcweir private:
58cdf0e10cSrcweir 	::Color			    aLineColor;
59cdf0e10cSrcweir 	::Color			    aHighlightLineColor;
60cdf0e10cSrcweir 	::Color			    aFillColor;
61cdf0e10cSrcweir 	::Color			    aHighlightFillColor;
62cdf0e10cSrcweir 	long                nCol;
63cdf0e10cSrcweir 	long                nLine;
64cdf0e10cSrcweir 	long                nWidth;
65cdf0e10cSrcweir 	long                nHeight;
66cdf0e10cSrcweir 	long                nMX;
67cdf0e10cSrcweir 	long                nMY;
68cdf0e10cSrcweir 	long                nTextHeight;
69cdf0e10cSrcweir     sal_Bool                bInitialKeyInput;
70cdf0e10cSrcweir     sal_Bool                m_bMod1;
71cdf0e10cSrcweir     ToolBox&            rTbx;
72cdf0e10cSrcweir     Reference< XFrame > mxFrame;
73cdf0e10cSrcweir     rtl::OUString       maCommand;
74cdf0e10cSrcweir 
75cdf0e10cSrcweir     void UpdateSize_Impl( long nNewCol, long nNewLine);
76cdf0e10cSrcweir 
77cdf0e10cSrcweir public:
78cdf0e10cSrcweir                             TableWindow( sal_uInt16                     nSlotId,
79cdf0e10cSrcweir                                          const rtl::OUString&       rCmd,
80cdf0e10cSrcweir                                          ToolBox&                   rParentTbx,
81cdf0e10cSrcweir                                          const Reference< XFrame >& rFrame );
82cdf0e10cSrcweir                             ~TableWindow();
83cdf0e10cSrcweir 
84cdf0e10cSrcweir     void                    KeyInput( const KeyEvent& rKEvt );
85cdf0e10cSrcweir     virtual void            MouseMove( const MouseEvent& rMEvt );
86cdf0e10cSrcweir 	virtual void			MouseButtonDown( const MouseEvent& rMEvt );
87cdf0e10cSrcweir 	virtual void			MouseButtonUp( const MouseEvent& rMEvt );
88cdf0e10cSrcweir 	virtual void    		Paint( const Rectangle& );
89cdf0e10cSrcweir 	virtual void    		PopupModeEnd();
90cdf0e10cSrcweir 	virtual SfxPopupWindow*	Clone() const;
91cdf0e10cSrcweir 
GetColCount() const92cdf0e10cSrcweir 	sal_uInt16          		GetColCount() const { return (sal_uInt16)nCol; }
GetLineCount() const93cdf0e10cSrcweir 	sal_uInt16          		GetLineCount() const { return (sal_uInt16)nLine; }
94cdf0e10cSrcweir };
95cdf0e10cSrcweir 
96cdf0e10cSrcweir // -----------------------------------------------------------------------
97cdf0e10cSrcweir 
TableWindow(sal_uInt16 nSlotId,const rtl::OUString & rCmd,ToolBox & rParentTbx,const Reference<XFrame> & rFrame)98cdf0e10cSrcweir TableWindow::TableWindow( sal_uInt16 nSlotId, const rtl::OUString& rCmd, ToolBox& rParentTbx, const Reference< XFrame >& rFrame ) :
99cdf0e10cSrcweir     SfxPopupWindow( nSlotId, rFrame, WB_SYSTEMWINDOW ),
100cdf0e10cSrcweir     bInitialKeyInput(sal_True),
101cdf0e10cSrcweir     m_bMod1(sal_False),
102cdf0e10cSrcweir     rTbx(rParentTbx),
103cdf0e10cSrcweir     mxFrame( rFrame ),
104cdf0e10cSrcweir     maCommand( rCmd )
105cdf0e10cSrcweir {
106cdf0e10cSrcweir 	const StyleSettings& rStyles = Application::GetSettings().GetStyleSettings();
107cdf0e10cSrcweir 	svtools::ColorConfig aColorConfig;
108cdf0e10cSrcweir 	aLineColor = ::Color( aColorConfig.GetColorValue( svtools::FONTCOLOR ).nColor );
109cdf0e10cSrcweir 	aHighlightLineColor = rStyles.GetHighlightTextColor();
110cdf0e10cSrcweir 	aFillColor = rStyles.GetWindowColor();
111cdf0e10cSrcweir 	aHighlightFillColor = rStyles.GetHighlightColor();
112cdf0e10cSrcweir 
113cdf0e10cSrcweir 	nTextHeight = GetTextHeight()+1;
114cdf0e10cSrcweir 	SetBackground();
115cdf0e10cSrcweir 	Font aFont = GetFont();
116cdf0e10cSrcweir 	aFont.SetColor( aLineColor );
117cdf0e10cSrcweir 	aFont.SetFillColor( aFillColor );
118cdf0e10cSrcweir 	aFont.SetTransparent( sal_False );
119cdf0e10cSrcweir 	SetFont( aFont );
120cdf0e10cSrcweir 
121cdf0e10cSrcweir 	nCol    = 0;
122cdf0e10cSrcweir 	nLine   = 0;
123cdf0e10cSrcweir 	nWidth  = 5;
124cdf0e10cSrcweir 	nHeight = 5;
125cdf0e10cSrcweir 
126cdf0e10cSrcweir 	Size aLogicSize = LogicToPixel( Size( 55, 35 ), MapMode( MAP_10TH_MM ) );
127cdf0e10cSrcweir 	nMX = aLogicSize.Width();
128cdf0e10cSrcweir 	nMY = aLogicSize.Height();
129cdf0e10cSrcweir 	SetOutputSizePixel( Size( nMX*nWidth-1, nMY*nHeight-1+nTextHeight ) );
130cdf0e10cSrcweir }
131cdf0e10cSrcweir // -----------------------------------------------------------------------
~TableWindow()132cdf0e10cSrcweir TableWindow::~TableWindow()
133cdf0e10cSrcweir {
134cdf0e10cSrcweir }
135cdf0e10cSrcweir // -----------------------------------------------------------------------
136cdf0e10cSrcweir 
Clone() const137cdf0e10cSrcweir SfxPopupWindow* TableWindow::Clone() const
138cdf0e10cSrcweir {
139cdf0e10cSrcweir     return new TableWindow( GetId(), maCommand, rTbx, mxFrame );
140cdf0e10cSrcweir }
141cdf0e10cSrcweir 
142cdf0e10cSrcweir // -----------------------------------------------------------------------
143cdf0e10cSrcweir 
MouseMove(const MouseEvent & rMEvt)144cdf0e10cSrcweir void TableWindow::MouseMove( const MouseEvent& rMEvt )
145cdf0e10cSrcweir {
146cdf0e10cSrcweir 	SfxPopupWindow::MouseMove( rMEvt );
147cdf0e10cSrcweir 	Point aPos = rMEvt.GetPosPixel();
148cdf0e10cSrcweir 	Point aMousePos( aPos );
149cdf0e10cSrcweir 
150cdf0e10cSrcweir 	if ( rMEvt.IsEnterWindow() )
151cdf0e10cSrcweir 		CaptureMouse();
152cdf0e10cSrcweir 	else if ( aMousePos.X() < 0 || aMousePos.Y() < 0 )
153cdf0e10cSrcweir 	{
154cdf0e10cSrcweir 		nCol = 0;
155cdf0e10cSrcweir 		nLine = 0;
156cdf0e10cSrcweir 		ReleaseMouse();
157cdf0e10cSrcweir 		Invalidate();
158cdf0e10cSrcweir 		return;
159cdf0e10cSrcweir 	}
160cdf0e10cSrcweir 
161cdf0e10cSrcweir     long    nNewCol = 0;
162cdf0e10cSrcweir 	long    nNewLine = 0;
163cdf0e10cSrcweir 
164cdf0e10cSrcweir 	if ( aPos.X() > 0 )
165cdf0e10cSrcweir 		nNewCol = aPos.X() / nMX + 1;
166cdf0e10cSrcweir 	if ( aPos.Y() > 0 )
167cdf0e10cSrcweir 		nNewLine = aPos.Y() / nMY + 1;
168cdf0e10cSrcweir 
169cdf0e10cSrcweir 	if ( nNewCol > 500 )
170cdf0e10cSrcweir 		nNewCol = 500;
171cdf0e10cSrcweir 	if ( nNewLine > 1000 )
172cdf0e10cSrcweir 		nNewLine = 1000;
173cdf0e10cSrcweir 
174cdf0e10cSrcweir     UpdateSize_Impl( nNewCol, nNewLine);
175cdf0e10cSrcweir 
176cdf0e10cSrcweir }
177cdf0e10cSrcweir /* -----------------------------15.05.2002 17:14------------------------------
178cdf0e10cSrcweir 
179cdf0e10cSrcweir  ---------------------------------------------------------------------------*/
UpdateSize_Impl(long nNewCol,long nNewLine)180cdf0e10cSrcweir void TableWindow::UpdateSize_Impl( long nNewCol, long nNewLine)
181cdf0e10cSrcweir {
182cdf0e10cSrcweir     Size  aWinSize = GetOutputSizePixel();
183cdf0e10cSrcweir     Point aWinPos = GetPosPixel();
184cdf0e10cSrcweir     Point aMaxPos = OutputToScreenPixel( GetDesktopRectPixel().BottomRight() );
185cdf0e10cSrcweir     if ( (nWidth <= nNewCol) || (nHeight < nNewLine) )
186cdf0e10cSrcweir 	{
187cdf0e10cSrcweir         long    nOff = 0;
188cdf0e10cSrcweir 
189cdf0e10cSrcweir 		if ( nWidth <= nNewCol )
190cdf0e10cSrcweir 		{
191cdf0e10cSrcweir 			nWidth = nNewCol;
192cdf0e10cSrcweir 			nWidth++;
193cdf0e10cSrcweir 		}
194cdf0e10cSrcweir 		if ( nHeight <= nNewLine )
195cdf0e10cSrcweir 		{
196cdf0e10cSrcweir 			nHeight = nNewLine;
197cdf0e10cSrcweir 			nOff = 1;
198cdf0e10cSrcweir 		}
199cdf0e10cSrcweir 		while ( nWidth > 0 &&
200cdf0e10cSrcweir 				(short)(aWinPos.X()+(nMX*nWidth-1)) >= aMaxPos.X()-3 )
201cdf0e10cSrcweir 			nWidth--;
202cdf0e10cSrcweir 
203cdf0e10cSrcweir 		while ( nHeight > 0 &&
204cdf0e10cSrcweir 				(short)(aWinPos.Y()+(nMY*nHeight-1+nTextHeight)) >=
205cdf0e10cSrcweir 				aMaxPos.Y()-3 )
206cdf0e10cSrcweir 			nHeight--;
207cdf0e10cSrcweir 
208cdf0e10cSrcweir 		if ( nNewCol > nWidth )
209cdf0e10cSrcweir 			nNewCol = nWidth;
210cdf0e10cSrcweir 
211cdf0e10cSrcweir 		if ( nNewLine > nHeight )
212cdf0e10cSrcweir 			nNewLine = nHeight;
213cdf0e10cSrcweir 
214cdf0e10cSrcweir         Size    _aWinSize = GetOutputSizePixel();
215cdf0e10cSrcweir         Invalidate( Rectangle( 0, _aWinSize.Height()-nTextHeight+2-nOff,
216cdf0e10cSrcweir 							   _aWinSize.Width(), _aWinSize.Height() ) );
217cdf0e10cSrcweir 		SetOutputSizePixel( Size( nMX*nWidth-1, nMY*nHeight-1+nTextHeight ) );
218cdf0e10cSrcweir 	}
219cdf0e10cSrcweir     long    nMinCol = 0;
220cdf0e10cSrcweir     long    nMaxCol = 0;
221cdf0e10cSrcweir     long    nMinLine = 0;
222cdf0e10cSrcweir     long    nMaxLine = 0;
223cdf0e10cSrcweir     if ( nNewCol < nCol )
224cdf0e10cSrcweir 	{
225cdf0e10cSrcweir 		nMinCol = nNewCol;
226cdf0e10cSrcweir 		nMaxCol = nCol;
227cdf0e10cSrcweir 	}
228cdf0e10cSrcweir 	else
229cdf0e10cSrcweir 	{
230cdf0e10cSrcweir 		nMinCol = nCol;
231cdf0e10cSrcweir 		nMaxCol = nNewCol;
232cdf0e10cSrcweir 	}
233cdf0e10cSrcweir 	if ( nNewLine < nLine )
234cdf0e10cSrcweir 	{
235cdf0e10cSrcweir 		nMinLine = nNewLine;
236cdf0e10cSrcweir 		nMaxLine = nLine;
237cdf0e10cSrcweir 	}
238cdf0e10cSrcweir 	else
239cdf0e10cSrcweir 	{
240cdf0e10cSrcweir 		nMinLine = nLine;
241cdf0e10cSrcweir 		nMaxLine = nNewLine;
242cdf0e10cSrcweir 	}
243cdf0e10cSrcweir 
244cdf0e10cSrcweir 	if ( (nNewCol != nCol) || (nNewLine != nLine) )
245cdf0e10cSrcweir 	{
246cdf0e10cSrcweir 		Invalidate( Rectangle( 0, aWinSize.Height()-nTextHeight+2,
247cdf0e10cSrcweir 							   aWinSize.Width(), aWinSize.Height() ) );
248cdf0e10cSrcweir 
249cdf0e10cSrcweir 		if ( nNewCol != nCol )
250cdf0e10cSrcweir 		{
251cdf0e10cSrcweir 			Invalidate( Rectangle( nMinCol*nMX-1, 0, nMaxCol*nMX+1, nMaxLine*nMY ) );
252cdf0e10cSrcweir 			nCol  = nNewCol;
253cdf0e10cSrcweir 		}
254cdf0e10cSrcweir 		if ( nNewLine != nLine )
255cdf0e10cSrcweir 		{
256cdf0e10cSrcweir 			Invalidate( Rectangle( 0, nMinLine*nMY-2, nMaxCol*nMX, nMaxLine*nMY+1 ) );
257cdf0e10cSrcweir 			nLine = nNewLine;
258cdf0e10cSrcweir 		}
259cdf0e10cSrcweir 	}
260cdf0e10cSrcweir 	Update();
261cdf0e10cSrcweir }
262cdf0e10cSrcweir /* -----------------------------15.05.2002 14:22------------------------------
263cdf0e10cSrcweir 
264cdf0e10cSrcweir  ---------------------------------------------------------------------------*/
KeyInput(const KeyEvent & rKEvt)265cdf0e10cSrcweir void TableWindow::KeyInput( const KeyEvent& rKEvt )
266cdf0e10cSrcweir {
267cdf0e10cSrcweir     sal_Bool bHandled = sal_False;
268cdf0e10cSrcweir     sal_uInt16 nModifier = rKEvt.GetKeyCode().GetModifier();
269cdf0e10cSrcweir     sal_uInt16 nKey = rKEvt.GetKeyCode().GetCode();
270cdf0e10cSrcweir     if(!nModifier)
271cdf0e10cSrcweir     {
272cdf0e10cSrcweir         if( KEY_UP == nKey || KEY_DOWN == nKey ||
273cdf0e10cSrcweir             KEY_LEFT == nKey || KEY_RIGHT == nKey ||
274cdf0e10cSrcweir             KEY_ESCAPE == nKey ||KEY_RETURN == nKey )
275cdf0e10cSrcweir         {
276cdf0e10cSrcweir             bHandled = sal_True;
277cdf0e10cSrcweir             long nNewCol = nCol;
278cdf0e10cSrcweir             long nNewLine = nLine;
279cdf0e10cSrcweir             switch(nKey)
280cdf0e10cSrcweir             {
281cdf0e10cSrcweir                 case KEY_UP :
282cdf0e10cSrcweir                     if(nNewLine > 1)
283cdf0e10cSrcweir 					{
284cdf0e10cSrcweir                         nNewLine--;
285cdf0e10cSrcweir 						break;
286cdf0e10cSrcweir 					}
287cdf0e10cSrcweir                 //no break;
288cdf0e10cSrcweir                 case KEY_ESCAPE:
289cdf0e10cSrcweir                     EndPopupMode( FLOATWIN_POPUPMODEEND_CANCEL);
290cdf0e10cSrcweir                 break;
291cdf0e10cSrcweir                 case KEY_DOWN :
292cdf0e10cSrcweir                     nNewLine++;
293cdf0e10cSrcweir                 break;
294cdf0e10cSrcweir                 case KEY_LEFT :
295cdf0e10cSrcweir 
296cdf0e10cSrcweir                     if(nNewCol)
297cdf0e10cSrcweir                         nNewCol--;
298cdf0e10cSrcweir                 break;
299cdf0e10cSrcweir                 case KEY_RIGHT :
300cdf0e10cSrcweir                     nNewCol++;
301cdf0e10cSrcweir                 break;
302cdf0e10cSrcweir                 case KEY_RETURN :
303cdf0e10cSrcweir                     if(IsMouseCaptured())
304cdf0e10cSrcweir                         ReleaseMouse();
305cdf0e10cSrcweir                     EndPopupMode(FLOATWIN_POPUPMODEEND_CLOSEALL );
306cdf0e10cSrcweir                 break;
307cdf0e10cSrcweir             }
308cdf0e10cSrcweir             //make sure that a table can initially be created
309cdf0e10cSrcweir             if(bInitialKeyInput)
310cdf0e10cSrcweir             {
311cdf0e10cSrcweir                 bInitialKeyInput = sal_False;
312cdf0e10cSrcweir                 if(!nNewLine)
313cdf0e10cSrcweir                     nNewLine = 1;
314cdf0e10cSrcweir                 if(!nNewCol)
315cdf0e10cSrcweir                     nNewCol = 1;
316cdf0e10cSrcweir             }
317cdf0e10cSrcweir             UpdateSize_Impl( nNewCol, nNewLine);
318cdf0e10cSrcweir         }
319cdf0e10cSrcweir     }
320cdf0e10cSrcweir     else if(KEY_MOD1 == nModifier && KEY_RETURN == nKey)
321cdf0e10cSrcweir     {
322cdf0e10cSrcweir         m_bMod1 = sal_True;
323cdf0e10cSrcweir         if(IsMouseCaptured())
324cdf0e10cSrcweir             ReleaseMouse();
325cdf0e10cSrcweir         EndPopupMode(FLOATWIN_POPUPMODEEND_CLOSEALL );
326cdf0e10cSrcweir     }
327cdf0e10cSrcweir 
328cdf0e10cSrcweir     if(!bHandled)
329cdf0e10cSrcweir         SfxPopupWindow::KeyInput(rKEvt);
330cdf0e10cSrcweir 
331cdf0e10cSrcweir }
332cdf0e10cSrcweir // -----------------------------------------------------------------------
333cdf0e10cSrcweir 
MouseButtonDown(const MouseEvent & rMEvt)334cdf0e10cSrcweir void TableWindow::MouseButtonDown( const MouseEvent& rMEvt )
335cdf0e10cSrcweir {
336cdf0e10cSrcweir 	SfxPopupWindow::MouseButtonDown( rMEvt );
337cdf0e10cSrcweir 	CaptureMouse();
338cdf0e10cSrcweir }
339cdf0e10cSrcweir 
340cdf0e10cSrcweir // -----------------------------------------------------------------------
341cdf0e10cSrcweir 
MouseButtonUp(const MouseEvent & rMEvt)342cdf0e10cSrcweir void TableWindow::MouseButtonUp( const MouseEvent& rMEvt )
343cdf0e10cSrcweir {
344cdf0e10cSrcweir 	SfxPopupWindow::MouseButtonUp( rMEvt );
345cdf0e10cSrcweir 	ReleaseMouse();
346cdf0e10cSrcweir 
347cdf0e10cSrcweir 	if ( IsInPopupMode() )
348cdf0e10cSrcweir 		EndPopupMode( FLOATWIN_POPUPMODEEND_CLOSEALL );
349cdf0e10cSrcweir }
350cdf0e10cSrcweir 
351cdf0e10cSrcweir // -----------------------------------------------------------------------
352cdf0e10cSrcweir 
Paint(const Rectangle &)353cdf0e10cSrcweir void TableWindow::Paint( const Rectangle& )
354cdf0e10cSrcweir {
355cdf0e10cSrcweir 	long    i;
356cdf0e10cSrcweir 	long    nStart;
357cdf0e10cSrcweir 	Size    aSize = GetOutputSizePixel();
358cdf0e10cSrcweir 
359cdf0e10cSrcweir 	SetLineColor();
360cdf0e10cSrcweir 	SetFillColor( aHighlightFillColor );
361cdf0e10cSrcweir 	DrawRect( Rectangle( 0, 0, nCol*nMX-1, nLine*nMY-1 ) );
362cdf0e10cSrcweir 	SetFillColor( aFillColor );
363cdf0e10cSrcweir 	DrawRect( Rectangle( nCol*nMX-1, 0,
364cdf0e10cSrcweir 						 aSize.Width(), aSize.Height()-nTextHeight+1 ) );
365cdf0e10cSrcweir 	DrawRect( Rectangle( 0, nLine*nMY-1,
366cdf0e10cSrcweir 						 aSize.Width(), aSize.Height()-nTextHeight+1 ) );
367cdf0e10cSrcweir 
368cdf0e10cSrcweir 	SetLineColor( aHighlightLineColor );
369cdf0e10cSrcweir 	for ( i = 1; i < nCol; i++ )
370cdf0e10cSrcweir 		DrawLine( Point( i*nMX-1, 0 ), Point( i*nMX-1, nLine*nMY-1 ) );
371cdf0e10cSrcweir 	for ( i = 1; i < nLine; i++ )
372cdf0e10cSrcweir 		DrawLine( Point( 0, i*nMY-1 ), Point( nCol*nMX-1, i*nMY-1 ) );
373cdf0e10cSrcweir 	SetLineColor( aLineColor );
374cdf0e10cSrcweir 	for ( i = 1; i <= nWidth; i++ )
375cdf0e10cSrcweir 	{
376cdf0e10cSrcweir 		if ( i < nCol )
377cdf0e10cSrcweir 			nStart = nLine*nMY-1;
378cdf0e10cSrcweir 		else
379cdf0e10cSrcweir 			nStart = 0;
380cdf0e10cSrcweir 		DrawLine( Point( i*nMX-1, nStart ), Point( i*nMX-1, nHeight*nMY-1 ) );
381cdf0e10cSrcweir 	}
382cdf0e10cSrcweir 	for ( i = 1; i <= nHeight; i++ )
383cdf0e10cSrcweir 	{
384cdf0e10cSrcweir 		if ( i < nLine )
385cdf0e10cSrcweir 			nStart = nCol*nMX-1;
386cdf0e10cSrcweir 		else
387cdf0e10cSrcweir 			nStart = 0;
388cdf0e10cSrcweir 		DrawLine( Point( nStart, i*nMY-1 ), Point( nWidth*nMX-1, i*nMY-1 ) );
389cdf0e10cSrcweir 	}
390cdf0e10cSrcweir 
391cdf0e10cSrcweir 	SetLineColor();
392cdf0e10cSrcweir 	String aText;
393cdf0e10cSrcweir 	if ( nCol && nLine )
394cdf0e10cSrcweir 	{
395cdf0e10cSrcweir 		aText += String::CreateFromInt32( nCol );
396cdf0e10cSrcweir 		aText.AppendAscii( " x " );
397cdf0e10cSrcweir 		aText += String::CreateFromInt32( nLine );
398cdf0e10cSrcweir         if(GetId() == FN_SHOW_MULTIPLE_PAGES)
399cdf0e10cSrcweir         {
400cdf0e10cSrcweir             aText += ' ';
401cdf0e10cSrcweir             aText += String(SVX_RESSTR(RID_SVXSTR_PAGES));
402cdf0e10cSrcweir         }
403cdf0e10cSrcweir 
404cdf0e10cSrcweir 	}
405cdf0e10cSrcweir 	else
406cdf0e10cSrcweir 		aText = Button::GetStandardText( BUTTON_CANCEL );
407cdf0e10cSrcweir 	Size aTextSize( GetTextWidth( aText ), GetTextHeight() );
408cdf0e10cSrcweir 
409cdf0e10cSrcweir     Rectangle aClearRect( 0, aSize.Height()-nTextHeight+2, (aSize.Width()), aSize.Height() );
410cdf0e10cSrcweir     DrawRect( aClearRect );
411cdf0e10cSrcweir 
412cdf0e10cSrcweir     // #i95350# force RTL output
413cdf0e10cSrcweir     if( IsRTLEnabled() && 	nCol && nLine )
414cdf0e10cSrcweir         aText.Insert(0x202D, 0);
415cdf0e10cSrcweir     DrawText( Point( (aSize.Width() - aTextSize.Width()) / 2, aSize.Height() - nTextHeight + 2 ), aText );
416cdf0e10cSrcweir 
417cdf0e10cSrcweir     SetLineColor( aLineColor );
418cdf0e10cSrcweir 	SetFillColor();
419cdf0e10cSrcweir 	DrawRect( Rectangle( Point(0,0), aSize ) );
420cdf0e10cSrcweir }
421cdf0e10cSrcweir 
422cdf0e10cSrcweir // -----------------------------------------------------------------------
423cdf0e10cSrcweir 
PopupModeEnd()424cdf0e10cSrcweir void TableWindow::PopupModeEnd()
425cdf0e10cSrcweir {
426cdf0e10cSrcweir 	if ( !IsPopupModeCanceled() && nCol && nLine )
427cdf0e10cSrcweir 	{
428cdf0e10cSrcweir         Window* pParent = rTbx.GetParent();
429cdf0e10cSrcweir         sal_uInt16 nId = GetId();
430cdf0e10cSrcweir         pParent->UserEvent(SVX_EVENT_COLUM_WINDOW_EXECUTE, reinterpret_cast<void*>(nId));
431cdf0e10cSrcweir 
432cdf0e10cSrcweir         Reference< XDispatchProvider > xDispatchProvider( mxFrame, UNO_QUERY );
433cdf0e10cSrcweir         if ( xDispatchProvider.is() )
434cdf0e10cSrcweir         {
435cdf0e10cSrcweir             com::sun::star::util::URL aTargetURL;
436cdf0e10cSrcweir             Reference < XURLTransformer > xTrans( ::comphelper::getProcessServiceFactory()->createInstance(
437cdf0e10cSrcweir                                                     rtl::OUString::createFromAscii("com.sun.star.util.URLTransformer" )),
438cdf0e10cSrcweir                                                   UNO_QUERY );
439cdf0e10cSrcweir             aTargetURL.Complete = maCommand;
440cdf0e10cSrcweir             xTrans->parseStrict( aTargetURL );
441cdf0e10cSrcweir             Reference< XDispatch > xDispatch = xDispatchProvider->queryDispatch( aTargetURL, rtl::OUString(), 0 );
442cdf0e10cSrcweir             if ( xDispatch.is() )
443cdf0e10cSrcweir             {
444cdf0e10cSrcweir                 Sequence< PropertyValue > aArgs( 2 );
445cdf0e10cSrcweir                 aArgs[0].Name = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Columns" ));
446cdf0e10cSrcweir                 aArgs[0].Value = makeAny( sal_Int16( nCol ));
447cdf0e10cSrcweir                 aArgs[1].Name = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Rows" ));
448cdf0e10cSrcweir                 aArgs[1].Value = makeAny( sal_Int16( nLine ));
449cdf0e10cSrcweir 
450cdf0e10cSrcweir                 xDispatch->dispatch( aTargetURL, aArgs );
451cdf0e10cSrcweir             }
452cdf0e10cSrcweir         }
453cdf0e10cSrcweir 	}
454cdf0e10cSrcweir 	else if ( IsPopupModeCanceled() )
455cdf0e10cSrcweir 		ReleaseMouse();
456cdf0e10cSrcweir 	SfxPopupWindow::PopupModeEnd();
457cdf0e10cSrcweir }
458cdf0e10cSrcweir 
459cdf0e10cSrcweir // class ColumnsWindow ---------------------------------------------------
460cdf0e10cSrcweir 
461cdf0e10cSrcweir class ColumnsWindow : public SfxPopupWindow
462cdf0e10cSrcweir {
463cdf0e10cSrcweir private:
464cdf0e10cSrcweir 	::Color			    aLineColor;
465cdf0e10cSrcweir 	::Color			    aHighlightLineColor;
466cdf0e10cSrcweir 	::Color			    aFillColor;
467cdf0e10cSrcweir 	::Color			    aHighlightFillColor;
468cdf0e10cSrcweir 	long                nCol;
469cdf0e10cSrcweir 	long                nWidth;
470cdf0e10cSrcweir 	long                nMX;
471cdf0e10cSrcweir 	long                nTextHeight;
472cdf0e10cSrcweir     sal_Bool                bInitialKeyInput;
473cdf0e10cSrcweir     sal_Bool                m_bMod1;
474cdf0e10cSrcweir     ToolBox&            rTbx;
475cdf0e10cSrcweir     Reference< XFrame > mxFrame;
476cdf0e10cSrcweir     ::rtl::OUString            maCommand;
477cdf0e10cSrcweir 
478cdf0e10cSrcweir     void UpdateSize_Impl( long nNewCol );
479cdf0e10cSrcweir public:
480cdf0e10cSrcweir                             ColumnsWindow( sal_uInt16 nId, const ::rtl::OUString& rCmd, ToolBox& rParentTbx, const Reference< XFrame >& rFrame );
481cdf0e10cSrcweir 
482cdf0e10cSrcweir     void                    KeyInput( const KeyEvent& rKEvt );
483cdf0e10cSrcweir     virtual void            MouseMove( const MouseEvent& rMEvt );
484cdf0e10cSrcweir 	virtual void			MouseButtonDown( const MouseEvent& rMEvt );
485cdf0e10cSrcweir 	virtual void			MouseButtonUp( const MouseEvent& rMEvt );
486cdf0e10cSrcweir 	virtual void    		Paint( const Rectangle& );
487cdf0e10cSrcweir 	virtual void    		PopupModeEnd();
488cdf0e10cSrcweir 	virtual SfxPopupWindow*	Clone() const;
489cdf0e10cSrcweir 
GetColCount() const490cdf0e10cSrcweir 	sal_uInt16          		GetColCount() const { return (sal_uInt16)nCol; }
491cdf0e10cSrcweir };
492cdf0e10cSrcweir 
493cdf0e10cSrcweir // -----------------------------------------------------------------------
494cdf0e10cSrcweir 
ColumnsWindow(sal_uInt16 nId,const::rtl::OUString & rCmd,ToolBox & rParentTbx,const Reference<XFrame> & rFrame)495cdf0e10cSrcweir ColumnsWindow::ColumnsWindow( sal_uInt16 nId, const ::rtl::OUString& rCmd, ToolBox& rParentTbx, const Reference< XFrame >& rFrame ) :
496cdf0e10cSrcweir     SfxPopupWindow( nId, rFrame, WB_SYSTEMWINDOW ),
497cdf0e10cSrcweir     bInitialKeyInput(sal_True),
498cdf0e10cSrcweir     m_bMod1(sal_False),
499cdf0e10cSrcweir     rTbx(rParentTbx),
500cdf0e10cSrcweir     mxFrame(rFrame),
501cdf0e10cSrcweir     maCommand( rCmd )
502cdf0e10cSrcweir {
503cdf0e10cSrcweir 	const StyleSettings& rStyles = Application::GetSettings().GetStyleSettings();
504cdf0e10cSrcweir 	svtools::ColorConfig aColorConfig;
505cdf0e10cSrcweir 	aLineColor = ::Color( aColorConfig.GetColorValue( svtools::FONTCOLOR ).nColor );
506cdf0e10cSrcweir 	aHighlightLineColor = rStyles.GetHighlightTextColor();
507cdf0e10cSrcweir 	aFillColor = rStyles.GetWindowColor();
508cdf0e10cSrcweir 	aHighlightFillColor = rStyles.GetHighlightColor();
509cdf0e10cSrcweir 
510cdf0e10cSrcweir 	nTextHeight = GetTextHeight()+1;
511cdf0e10cSrcweir 	SetBackground();
512cdf0e10cSrcweir 	Font aFont( GetFont() );
513cdf0e10cSrcweir 	aFont.SetColor( aLineColor );
514cdf0e10cSrcweir 	aFont.SetFillColor( aFillColor );
515cdf0e10cSrcweir 	aFont.SetTransparent( sal_False );
516cdf0e10cSrcweir 	SetFont( aFont );
517cdf0e10cSrcweir 
518cdf0e10cSrcweir 	nCol        = 0;
519cdf0e10cSrcweir 	nWidth      = 4;
520cdf0e10cSrcweir 
521cdf0e10cSrcweir 	Size aLogicSize = LogicToPixel( Size( 95, 155 ), MapMode( MAP_10TH_MM ) );
522cdf0e10cSrcweir 	nMX = aLogicSize.Width();
523cdf0e10cSrcweir 	SetOutputSizePixel( Size( nMX*nWidth-1, aLogicSize.Height()+nTextHeight ) );
524cdf0e10cSrcweir     StartCascading();
525cdf0e10cSrcweir }
526cdf0e10cSrcweir 
527cdf0e10cSrcweir // -----------------------------------------------------------------------
528cdf0e10cSrcweir 
Clone() const529cdf0e10cSrcweir SfxPopupWindow* ColumnsWindow::Clone() const
530cdf0e10cSrcweir {
531cdf0e10cSrcweir     return new ColumnsWindow( GetId(), maCommand, rTbx, mxFrame );
532cdf0e10cSrcweir }
533cdf0e10cSrcweir 
534cdf0e10cSrcweir // -----------------------------------------------------------------------
535cdf0e10cSrcweir 
MouseMove(const MouseEvent & rMEvt)536cdf0e10cSrcweir void ColumnsWindow::MouseMove( const MouseEvent& rMEvt )
537cdf0e10cSrcweir {
538cdf0e10cSrcweir 	SfxPopupWindow::MouseMove( rMEvt );
539cdf0e10cSrcweir 	Point aPos = rMEvt.GetPosPixel();
540cdf0e10cSrcweir 	Point aMousePos = aPos;
541cdf0e10cSrcweir 	Point aWinPos = GetPosPixel();
542cdf0e10cSrcweir 
543cdf0e10cSrcweir 	if ( rMEvt.IsEnterWindow() )
544cdf0e10cSrcweir 		CaptureMouse();
545cdf0e10cSrcweir 	else if ( aMousePos.X() < 0 || aMousePos.Y() < 0 )
546cdf0e10cSrcweir 	{
547cdf0e10cSrcweir 		nCol = 0;
548cdf0e10cSrcweir 		ReleaseMouse();
549cdf0e10cSrcweir 		Invalidate();
550cdf0e10cSrcweir 		return;
551cdf0e10cSrcweir 	}
552cdf0e10cSrcweir 
553cdf0e10cSrcweir     long    nNewCol = 0;
554cdf0e10cSrcweir     if ( aPos.X() > 0 )
555cdf0e10cSrcweir 		nNewCol = aPos.X() / nMX + 1;
556cdf0e10cSrcweir     if ( aPos.Y() < 0 )
557cdf0e10cSrcweir 		nNewCol = 0;
558cdf0e10cSrcweir     if ( nNewCol > 20 )
559cdf0e10cSrcweir 		nNewCol = 20;
560cdf0e10cSrcweir     UpdateSize_Impl( nNewCol );
561cdf0e10cSrcweir }
562cdf0e10cSrcweir /* -----------------------------21.05.2002 16:16------------------------------
563cdf0e10cSrcweir 
564cdf0e10cSrcweir  ---------------------------------------------------------------------------*/
UpdateSize_Impl(long nNewCol)565cdf0e10cSrcweir void ColumnsWindow::UpdateSize_Impl( long nNewCol )
566cdf0e10cSrcweir {
567cdf0e10cSrcweir     Size    aWinSize = GetOutputSizePixel();
568cdf0e10cSrcweir     long    nMinCol = 0;
569cdf0e10cSrcweir 	long    nMaxCol = 0;
570cdf0e10cSrcweir     Point   aWinPos;// = GetPosPixel();
571cdf0e10cSrcweir 
572cdf0e10cSrcweir 	if ( nWidth <= nNewCol )
573cdf0e10cSrcweir 	{
574cdf0e10cSrcweir 		Point aMaxPos = OutputToScreenPixel( GetDesktopRectPixel().BottomRight() );
575cdf0e10cSrcweir 
576cdf0e10cSrcweir 		if ( nWidth <= nNewCol )
577cdf0e10cSrcweir 		{
578cdf0e10cSrcweir 			nWidth = nNewCol;
579cdf0e10cSrcweir 			nWidth++;
580cdf0e10cSrcweir 		}
581cdf0e10cSrcweir 
582cdf0e10cSrcweir 		while ( nWidth > 0 &&
583cdf0e10cSrcweir 				(short)(aWinPos.X()+(nMX*nWidth-1)) >= aMaxPos.X()-3 )
584cdf0e10cSrcweir 			nWidth--;
585cdf0e10cSrcweir 
586cdf0e10cSrcweir 		if ( nNewCol > nWidth )
587cdf0e10cSrcweir 			nNewCol = nWidth;
588cdf0e10cSrcweir 
589cdf0e10cSrcweir 		Invalidate( Rectangle( 0, aWinSize.Height()-nTextHeight+2,
590cdf0e10cSrcweir 							   aWinSize.Width(), aWinSize.Height() ) );
591cdf0e10cSrcweir 		SetOutputSizePixel( Size( nMX*nWidth-1, aWinSize.Height() ) );
592cdf0e10cSrcweir 	}
593cdf0e10cSrcweir 
594cdf0e10cSrcweir 
595cdf0e10cSrcweir 	if ( nNewCol != nCol )
596cdf0e10cSrcweir 	{
597cdf0e10cSrcweir 		Invalidate( Rectangle( 0, aWinSize.Height()-nTextHeight+2,
598cdf0e10cSrcweir 							   aWinSize.Width(), aWinSize.Height() ) );
599cdf0e10cSrcweir 
600cdf0e10cSrcweir 		if ( nNewCol < nCol )
601cdf0e10cSrcweir 		{
602cdf0e10cSrcweir 			nMinCol = nNewCol;
603cdf0e10cSrcweir 			nMaxCol = nCol;
604cdf0e10cSrcweir 		}
605cdf0e10cSrcweir 		else
606cdf0e10cSrcweir 		{
607cdf0e10cSrcweir 			nMinCol = nCol;
608cdf0e10cSrcweir 			nMaxCol = nNewCol;
609cdf0e10cSrcweir 		}
610cdf0e10cSrcweir 
611cdf0e10cSrcweir 		Invalidate( Rectangle( nMinCol*nMX-1, 0,
612cdf0e10cSrcweir 							   nMaxCol*nMX+1, aWinSize.Height()-nTextHeight+2 ) );
613cdf0e10cSrcweir 		nCol  = nNewCol;
614cdf0e10cSrcweir 	}
615cdf0e10cSrcweir 	Update();
616cdf0e10cSrcweir }
617cdf0e10cSrcweir // -----------------------------------------------------------------------
618cdf0e10cSrcweir 
MouseButtonDown(const MouseEvent & rMEvt)619cdf0e10cSrcweir void ColumnsWindow::MouseButtonDown( const MouseEvent& rMEvt )
620cdf0e10cSrcweir {
621cdf0e10cSrcweir 	SfxPopupWindow::MouseButtonDown( rMEvt );
622cdf0e10cSrcweir 	CaptureMouse();
623cdf0e10cSrcweir }
624cdf0e10cSrcweir /* -----------------------------21.05.2002 16:11------------------------------
625cdf0e10cSrcweir 
626cdf0e10cSrcweir  ---------------------------------------------------------------------------*/
KeyInput(const KeyEvent & rKEvt)627cdf0e10cSrcweir void ColumnsWindow::KeyInput( const KeyEvent& rKEvt )
628cdf0e10cSrcweir {
629cdf0e10cSrcweir     sal_Bool bHandled = sal_False;
630cdf0e10cSrcweir     sal_uInt16 nModifier = rKEvt.GetKeyCode().GetModifier();
631cdf0e10cSrcweir     sal_uInt16 nKey = rKEvt.GetKeyCode().GetCode();
632cdf0e10cSrcweir     if(!nModifier)
633cdf0e10cSrcweir     {
634cdf0e10cSrcweir         if( KEY_LEFT == nKey || KEY_RIGHT == nKey ||
635cdf0e10cSrcweir             KEY_RETURN == nKey ||KEY_ESCAPE == nKey ||
636cdf0e10cSrcweir             KEY_UP == nKey)
637cdf0e10cSrcweir         {
638cdf0e10cSrcweir             bHandled = sal_True;
639cdf0e10cSrcweir             long nNewCol = nCol;
640cdf0e10cSrcweir             switch(nKey)
641cdf0e10cSrcweir             {
642cdf0e10cSrcweir                 case KEY_LEFT :
643cdf0e10cSrcweir                     if(nNewCol)
644cdf0e10cSrcweir                         nNewCol--;
645cdf0e10cSrcweir                 break;
646cdf0e10cSrcweir                 case KEY_RIGHT :
647cdf0e10cSrcweir                     nNewCol++;
648cdf0e10cSrcweir                 break;
649cdf0e10cSrcweir                 case KEY_RETURN :
650cdf0e10cSrcweir                     if(IsMouseCaptured())
651cdf0e10cSrcweir                         ReleaseMouse();
652cdf0e10cSrcweir                     EndPopupMode(FLOATWIN_POPUPMODEEND_CLOSEALL );
653cdf0e10cSrcweir                 break;
654cdf0e10cSrcweir                 case KEY_ESCAPE :
655cdf0e10cSrcweir                 case KEY_UP :
656cdf0e10cSrcweir                     EndPopupMode( FLOATWIN_POPUPMODEEND_CANCEL);
657cdf0e10cSrcweir                 break;
658cdf0e10cSrcweir             }
659cdf0e10cSrcweir             //make sure that a table can initially be created
660cdf0e10cSrcweir             if(bInitialKeyInput)
661cdf0e10cSrcweir             {
662cdf0e10cSrcweir                 bInitialKeyInput = sal_False;
663cdf0e10cSrcweir                 if(!nNewCol)
664cdf0e10cSrcweir                     nNewCol = 1;
665cdf0e10cSrcweir             }
666cdf0e10cSrcweir             UpdateSize_Impl( nNewCol );
667cdf0e10cSrcweir         }
668cdf0e10cSrcweir     }
669cdf0e10cSrcweir     else if(KEY_MOD1 == nModifier && KEY_RETURN == nKey)
670cdf0e10cSrcweir     {
671cdf0e10cSrcweir         m_bMod1 = sal_True;
672cdf0e10cSrcweir         if(IsMouseCaptured())
673cdf0e10cSrcweir             ReleaseMouse();
674cdf0e10cSrcweir         EndPopupMode(FLOATWIN_POPUPMODEEND_CLOSEALL );
675cdf0e10cSrcweir     }
676cdf0e10cSrcweir     if(!bHandled)
677cdf0e10cSrcweir         SfxPopupWindow::KeyInput(rKEvt);
678cdf0e10cSrcweir }
679cdf0e10cSrcweir 
680cdf0e10cSrcweir // -----------------------------------------------------------------------
681cdf0e10cSrcweir 
MouseButtonUp(const MouseEvent & rMEvt)682cdf0e10cSrcweir void ColumnsWindow::MouseButtonUp( const MouseEvent& rMEvt )
683cdf0e10cSrcweir {
684cdf0e10cSrcweir 	SfxPopupWindow::MouseButtonUp( rMEvt );
685cdf0e10cSrcweir 	ReleaseMouse();
686cdf0e10cSrcweir 
687cdf0e10cSrcweir 	if ( IsInPopupMode() )
688cdf0e10cSrcweir 		EndPopupMode( FLOATWIN_POPUPMODEEND_CLOSEALL );
689cdf0e10cSrcweir }
690cdf0e10cSrcweir 
691cdf0e10cSrcweir // -----------------------------------------------------------------------
692cdf0e10cSrcweir 
Paint(const Rectangle &)693cdf0e10cSrcweir void ColumnsWindow::Paint( const Rectangle& )
694cdf0e10cSrcweir {
695cdf0e10cSrcweir 	long    i;
696cdf0e10cSrcweir 	long    j;
697cdf0e10cSrcweir 	long    nLineWidth;
698cdf0e10cSrcweir 	Size    aSize = GetOutputSizePixel();
699cdf0e10cSrcweir 
700cdf0e10cSrcweir 	for ( i = 0; i < nWidth; i++ )
701cdf0e10cSrcweir 	{
702cdf0e10cSrcweir 		if ( i < nCol )
703cdf0e10cSrcweir 		{
704cdf0e10cSrcweir 			SetLineColor( aHighlightLineColor );
705cdf0e10cSrcweir 			SetFillColor( aHighlightFillColor );
706cdf0e10cSrcweir 		}
707cdf0e10cSrcweir 		else
708cdf0e10cSrcweir 		{
709cdf0e10cSrcweir 			SetLineColor( aLineColor );
710cdf0e10cSrcweir 			SetFillColor( aFillColor );
711cdf0e10cSrcweir 		}
712cdf0e10cSrcweir 
713cdf0e10cSrcweir 		DrawRect( Rectangle( i*nMX-1, -1,
714cdf0e10cSrcweir 							 i*nMX+nMX, aSize.Height()-nTextHeight+1 ) );
715cdf0e10cSrcweir 
716cdf0e10cSrcweir 		j = 4;
717cdf0e10cSrcweir 		while ( j < aSize.Height()-nTextHeight-4 )
718cdf0e10cSrcweir 		{
719cdf0e10cSrcweir 			if ( !(j % 16) )
720cdf0e10cSrcweir 				nLineWidth = 10;
721cdf0e10cSrcweir 			else
722cdf0e10cSrcweir 				nLineWidth = 4;
723cdf0e10cSrcweir 			DrawLine( Point( i*nMX+4, j ), Point( i*nMX+nMX-nLineWidth-4, j ) );
724cdf0e10cSrcweir 			j += 4;
725cdf0e10cSrcweir 		}
726cdf0e10cSrcweir 	}
727cdf0e10cSrcweir 
728cdf0e10cSrcweir 	SetLineColor();
729cdf0e10cSrcweir 	SetFillColor( aFillColor );
730cdf0e10cSrcweir 	String aText;
731cdf0e10cSrcweir 	if ( nCol )
732cdf0e10cSrcweir 		aText = String( String::CreateFromInt32(nCol) );
733cdf0e10cSrcweir 	else
734cdf0e10cSrcweir 		aText = Button::GetStandardText( BUTTON_CANCEL );
735cdf0e10cSrcweir 	Size aTextSize(GetTextWidth( aText ), GetTextHeight());
736cdf0e10cSrcweir 	DrawText( Point( ( aSize.Width() - aTextSize.Width() ) / 2, aSize.Height() - nTextHeight + 2 ), aText );
737cdf0e10cSrcweir 
738cdf0e10cSrcweir 	DrawRect( Rectangle( 0, aSize.Height()-nTextHeight+2, (aSize.Width()-aTextSize.Width())/2-1, aSize.Height() ) );
739cdf0e10cSrcweir 	DrawRect( Rectangle( (aSize.Width()-aTextSize.Width())/2+aTextSize.Width(), aSize.Height()-nTextHeight+2, aSize.Width(), aSize.Height() ) );
740cdf0e10cSrcweir 
741cdf0e10cSrcweir 	SetLineColor( aLineColor );
742cdf0e10cSrcweir 	SetFillColor();
743cdf0e10cSrcweir 	DrawRect( Rectangle( Point(0,0), aSize ) );
744cdf0e10cSrcweir }
745cdf0e10cSrcweir 
746cdf0e10cSrcweir // -----------------------------------------------------------------------
747cdf0e10cSrcweir 
PopupModeEnd()748cdf0e10cSrcweir void ColumnsWindow::PopupModeEnd()
749cdf0e10cSrcweir {
750cdf0e10cSrcweir 	if ( !IsPopupModeCanceled() && nCol )
751cdf0e10cSrcweir 	{
752cdf0e10cSrcweir         sal_uInt16 nId = GetId();
753cdf0e10cSrcweir         Window* pParent = rTbx.GetParent();
754cdf0e10cSrcweir         pParent->UserEvent(SVX_EVENT_COLUM_WINDOW_EXECUTE, reinterpret_cast<void*>(nId));
755cdf0e10cSrcweir 
756cdf0e10cSrcweir         Sequence< PropertyValue > aArgs( 2 );
757cdf0e10cSrcweir         aArgs[0].Name = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Columns" ));
758cdf0e10cSrcweir         aArgs[0].Value = makeAny( sal_Int16( nCol ));
759cdf0e10cSrcweir         aArgs[1].Name = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Modifier" ));
760cdf0e10cSrcweir         aArgs[1].Value = makeAny( sal_Int16( m_bMod1 ? KEY_MOD1 : 0 ));
761cdf0e10cSrcweir 
762cdf0e10cSrcweir         SfxToolBoxControl::Dispatch( Reference< XDispatchProvider >( mxFrame->getController(), UNO_QUERY ),
763cdf0e10cSrcweir                                         maCommand,
764cdf0e10cSrcweir                                         aArgs );
765cdf0e10cSrcweir 	}
766cdf0e10cSrcweir 	else if ( IsPopupModeCanceled() )
767cdf0e10cSrcweir 		ReleaseMouse();
768cdf0e10cSrcweir 	SfxPopupWindow::PopupModeEnd();
769cdf0e10cSrcweir }
770cdf0e10cSrcweir 
771cdf0e10cSrcweir // class SvxTableToolBoxControl ------------------------------------------
772cdf0e10cSrcweir 
SvxTableToolBoxControl(sal_uInt16 nSlotId,sal_uInt16 nId,ToolBox & rTbx)773cdf0e10cSrcweir SvxTableToolBoxControl::SvxTableToolBoxControl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ) :
774cdf0e10cSrcweir 	SfxToolBoxControl( nSlotId, nId, rTbx ),
775cdf0e10cSrcweir 	bEnabled( sal_True )
776cdf0e10cSrcweir {
777cdf0e10cSrcweir 	rTbx.SetItemBits( nId, TIB_DROPDOWN | rTbx.GetItemBits( nId ) );
778cdf0e10cSrcweir 	rTbx.Invalidate();
779cdf0e10cSrcweir }
780cdf0e10cSrcweir 
781cdf0e10cSrcweir // -----------------------------------------------------------------------
782cdf0e10cSrcweir 
~SvxTableToolBoxControl()783cdf0e10cSrcweir SvxTableToolBoxControl::~SvxTableToolBoxControl()
784cdf0e10cSrcweir {
785cdf0e10cSrcweir }
786cdf0e10cSrcweir 
787cdf0e10cSrcweir // -----------------------------------------------------------------------
788cdf0e10cSrcweir 
GetPopupWindowType() const789cdf0e10cSrcweir SfxPopupWindowType SvxTableToolBoxControl::GetPopupWindowType() const
790cdf0e10cSrcweir {
791cdf0e10cSrcweir 	return SFX_POPUPWINDOW_ONTIMEOUTANDMOVE;
792cdf0e10cSrcweir }
793cdf0e10cSrcweir 
794cdf0e10cSrcweir // -----------------------------------------------------------------------
795cdf0e10cSrcweir 
CreatePopupWindow()796cdf0e10cSrcweir SfxPopupWindow* SvxTableToolBoxControl::CreatePopupWindow()
797cdf0e10cSrcweir {
798cdf0e10cSrcweir 	if ( bEnabled )
799cdf0e10cSrcweir 	{
800cdf0e10cSrcweir         ToolBox& rTbx = GetToolBox();
801cdf0e10cSrcweir         TableWindow* pWin = new TableWindow( GetSlotId(), m_aCommandURL, rTbx, m_xFrame );
802cdf0e10cSrcweir         pWin->StartPopupMode( &rTbx, FLOATWIN_POPUPMODE_GRABFOCUS|FLOATWIN_POPUPMODE_NOKEYCLOSE );
803cdf0e10cSrcweir         SetPopupWindow( pWin );
804cdf0e10cSrcweir 		return pWin;
805cdf0e10cSrcweir 	}
806cdf0e10cSrcweir 	return 0;
807cdf0e10cSrcweir }
808cdf0e10cSrcweir 
809cdf0e10cSrcweir // -----------------------------------------------------------------------
810cdf0e10cSrcweir 
CreatePopupWindowCascading()811cdf0e10cSrcweir SfxPopupWindow* SvxTableToolBoxControl::CreatePopupWindowCascading()
812cdf0e10cSrcweir {
813cdf0e10cSrcweir 	if ( bEnabled )
814cdf0e10cSrcweir         return new TableWindow( GetSlotId(), m_aCommandURL, GetToolBox(), m_xFrame );
815cdf0e10cSrcweir 	return 0;
816cdf0e10cSrcweir }
817cdf0e10cSrcweir 
818cdf0e10cSrcweir // -----------------------------------------------------------------------
819cdf0e10cSrcweir 
StateChanged(sal_uInt16,SfxItemState eState,const SfxPoolItem * pState)820cdf0e10cSrcweir void SvxTableToolBoxControl::StateChanged( sal_uInt16, SfxItemState eState, const SfxPoolItem* pState )
821cdf0e10cSrcweir {
822cdf0e10cSrcweir 	if ( pState && pState->ISA(SfxUInt16Item) )
823cdf0e10cSrcweir 	{
824cdf0e10cSrcweir 		sal_Int16 nValue = static_cast< const SfxUInt16Item* >( pState )->GetValue();
825cdf0e10cSrcweir 		bEnabled = ( nValue != 0 );
826cdf0e10cSrcweir 	}
827cdf0e10cSrcweir 	else
828cdf0e10cSrcweir 		bEnabled = SFX_ITEM_DISABLED != eState;
829cdf0e10cSrcweir 
830cdf0e10cSrcweir 	sal_uInt16 nId = GetId();
831cdf0e10cSrcweir 	ToolBox& rTbx = GetToolBox();
832cdf0e10cSrcweir 
833cdf0e10cSrcweir 	rTbx.EnableItem( nId, SFX_ITEM_DISABLED != eState );
834cdf0e10cSrcweir 	rTbx.SetItemState( nId,
835cdf0e10cSrcweir 		( SFX_ITEM_DONTCARE == eState )	? STATE_DONTKNOW : STATE_NOCHECK );
836cdf0e10cSrcweir }
837cdf0e10cSrcweir 
838cdf0e10cSrcweir // class SvxColumnsToolBoxControl ------------------------------------------
839cdf0e10cSrcweir 
SvxColumnsToolBoxControl(sal_uInt16 nSlotId,sal_uInt16 nId,ToolBox & rTbx)840cdf0e10cSrcweir SvxColumnsToolBoxControl::SvxColumnsToolBoxControl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ) :
841cdf0e10cSrcweir 	SfxToolBoxControl( nSlotId, nId, rTbx )
842cdf0e10cSrcweir {
843cdf0e10cSrcweir 	rTbx.SetItemBits( nId, TIB_DROPDOWN | rTbx.GetItemBits( nId ) );
844cdf0e10cSrcweir 	rTbx.Invalidate();
845cdf0e10cSrcweir }
846cdf0e10cSrcweir 
847cdf0e10cSrcweir // -----------------------------------------------------------------------
848cdf0e10cSrcweir 
~SvxColumnsToolBoxControl()849cdf0e10cSrcweir SvxColumnsToolBoxControl::~SvxColumnsToolBoxControl()
850cdf0e10cSrcweir {
851cdf0e10cSrcweir }
852cdf0e10cSrcweir 
853cdf0e10cSrcweir // -----------------------------------------------------------------------
854cdf0e10cSrcweir 
GetPopupWindowType() const855cdf0e10cSrcweir SfxPopupWindowType SvxColumnsToolBoxControl::GetPopupWindowType() const
856cdf0e10cSrcweir {
857cdf0e10cSrcweir 	return SFX_POPUPWINDOW_ONTIMEOUTANDMOVE;
858cdf0e10cSrcweir }
859cdf0e10cSrcweir 
860cdf0e10cSrcweir // -----------------------------------------------------------------------
861cdf0e10cSrcweir 
CreatePopupWindow()862cdf0e10cSrcweir SfxPopupWindow* SvxColumnsToolBoxControl::CreatePopupWindow()
863cdf0e10cSrcweir {
864cdf0e10cSrcweir 	ColumnsWindow* pWin = 0;
865cdf0e10cSrcweir 	if(bEnabled)
866cdf0e10cSrcweir 	{
867cdf0e10cSrcweir             pWin = new ColumnsWindow( GetSlotId(), m_aCommandURL, GetToolBox(), m_xFrame );
868cdf0e10cSrcweir             pWin->StartPopupMode( &GetToolBox(),
869cdf0e10cSrcweir                                   FLOATWIN_POPUPMODE_GRABFOCUS|FLOATWIN_POPUPMODE_NOKEYCLOSE );
870cdf0e10cSrcweir             SetPopupWindow( pWin );
871cdf0e10cSrcweir 	}
872cdf0e10cSrcweir 	return pWin;
873cdf0e10cSrcweir }
874cdf0e10cSrcweir 
875cdf0e10cSrcweir // -----------------------------------------------------------------------
876cdf0e10cSrcweir 
CreatePopupWindowCascading()877cdf0e10cSrcweir SfxPopupWindow* SvxColumnsToolBoxControl::CreatePopupWindowCascading()
878cdf0e10cSrcweir {
879cdf0e10cSrcweir 	ColumnsWindow* pWin = 0;
880cdf0e10cSrcweir 	if(bEnabled)
881cdf0e10cSrcweir 	{
882cdf0e10cSrcweir         pWin = new ColumnsWindow( GetSlotId(), m_aCommandURL, GetToolBox(), m_xFrame );
883cdf0e10cSrcweir 	}
884cdf0e10cSrcweir 	return pWin;
885cdf0e10cSrcweir }
886cdf0e10cSrcweir /* -----------------18.11.99 16:38-------------------
887cdf0e10cSrcweir 
888cdf0e10cSrcweir  --------------------------------------------------*/
StateChanged(sal_uInt16 nSID,SfxItemState eState,const SfxPoolItem * pState)889cdf0e10cSrcweir void SvxColumnsToolBoxControl::StateChanged( sal_uInt16 nSID,
890cdf0e10cSrcweir 											  SfxItemState eState,
891cdf0e10cSrcweir 											  const SfxPoolItem* pState )
892cdf0e10cSrcweir {
893cdf0e10cSrcweir 	bEnabled = SFX_ITEM_DISABLED != eState;
894cdf0e10cSrcweir 	SfxToolBoxControl::StateChanged(nSID,	eState, pState );
895cdf0e10cSrcweir }
896