xref: /aoo4110/main/svx/source/tbxctrls/itemwin.cxx (revision b1cdbd2c)
1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_svx.hxx"
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski // include ---------------------------------------------------------------
28*b1cdbd2cSJim Jagielski #include <tools/shl.hxx>
29*b1cdbd2cSJim Jagielski #include <sfx2/dispatch.hxx>
30*b1cdbd2cSJim Jagielski #include <sfx2/objsh.hxx>
31*b1cdbd2cSJim Jagielski #include <sfx2/viewsh.hxx>
32*b1cdbd2cSJim Jagielski #include <sfx2/module.hxx>
33*b1cdbd2cSJim Jagielski #include <tools/urlobj.hxx>
34*b1cdbd2cSJim Jagielski 
35*b1cdbd2cSJim Jagielski #define _SVX_ITEMWIN_CXX
36*b1cdbd2cSJim Jagielski 
37*b1cdbd2cSJim Jagielski #include <vcl/svapp.hxx>
38*b1cdbd2cSJim Jagielski 
39*b1cdbd2cSJim Jagielski #include <svx/dialogs.hrc>
40*b1cdbd2cSJim Jagielski 
41*b1cdbd2cSJim Jagielski #define DELAY_TIMEOUT			100
42*b1cdbd2cSJim Jagielski 
43*b1cdbd2cSJim Jagielski #include <svx/xlnclit.hxx>
44*b1cdbd2cSJim Jagielski #include <svx/xlnwtit.hxx>
45*b1cdbd2cSJim Jagielski #include <svx/xlineit0.hxx>
46*b1cdbd2cSJim Jagielski #include <svx/xlndsit.hxx>
47*b1cdbd2cSJim Jagielski #include <svx/xtable.hxx>
48*b1cdbd2cSJim Jagielski #include "svx/drawitem.hxx"
49*b1cdbd2cSJim Jagielski #include <svx/dialmgr.hxx>
50*b1cdbd2cSJim Jagielski #include "svx/dlgutil.hxx"
51*b1cdbd2cSJim Jagielski #include <svx/itemwin.hxx>
52*b1cdbd2cSJim Jagielski #include "svx/linectrl.hxx"
53*b1cdbd2cSJim Jagielski #include <svtools/colorcfg.hxx>
54*b1cdbd2cSJim Jagielski 
55*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::uno;
56*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::frame;
57*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::util;
58*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::lang;
59*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::beans;
60*b1cdbd2cSJim Jagielski 
61*b1cdbd2cSJim Jagielski #define LOGICAL_EDIT_HEIGHT         12
62*b1cdbd2cSJim Jagielski //========================================================================
63*b1cdbd2cSJim Jagielski // SvxLineBox
64*b1cdbd2cSJim Jagielski //========================================================================
65*b1cdbd2cSJim Jagielski 
SvxLineBox(Window * pParent,const Reference<XFrame> & rFrame,WinBits nBits)66*b1cdbd2cSJim Jagielski SvxLineBox::SvxLineBox( Window* pParent, const Reference< XFrame >& rFrame, WinBits nBits ) :
67*b1cdbd2cSJim Jagielski 	LineLB( pParent, nBits ),
68*b1cdbd2cSJim Jagielski 	meBmpMode	( GetSettings().GetStyleSettings().GetHighContrastMode() ? BMP_COLOR_HIGHCONTRAST : BMP_COLOR_NORMAL ),
69*b1cdbd2cSJim Jagielski 	nCurPos		( 0 ),
70*b1cdbd2cSJim Jagielski     aLogicalSize(40,140),
71*b1cdbd2cSJim Jagielski     bRelease    ( sal_True ),
72*b1cdbd2cSJim Jagielski 	mpSh		( NULL ),
73*b1cdbd2cSJim Jagielski     mxFrame     ( rFrame )
74*b1cdbd2cSJim Jagielski {
75*b1cdbd2cSJim Jagielski     SetSizePixel( LogicToPixel( aLogicalSize, MAP_APPFONT ));
76*b1cdbd2cSJim Jagielski     Show();
77*b1cdbd2cSJim Jagielski 
78*b1cdbd2cSJim Jagielski 	aDelayTimer.SetTimeout( DELAY_TIMEOUT );
79*b1cdbd2cSJim Jagielski 	aDelayTimer.SetTimeoutHdl( LINK( this, SvxLineBox, DelayHdl_Impl ) );
80*b1cdbd2cSJim Jagielski 	aDelayTimer.Start();
81*b1cdbd2cSJim Jagielski }
82*b1cdbd2cSJim Jagielski 
83*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
84*b1cdbd2cSJim Jagielski 
~SvxLineBox()85*b1cdbd2cSJim Jagielski SvxLineBox::~SvxLineBox()
86*b1cdbd2cSJim Jagielski {
87*b1cdbd2cSJim Jagielski }
88*b1cdbd2cSJim Jagielski 
89*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
90*b1cdbd2cSJim Jagielski 
IMPL_LINK(SvxLineBox,DelayHdl_Impl,Timer *,EMPTYARG)91*b1cdbd2cSJim Jagielski IMPL_LINK( SvxLineBox, DelayHdl_Impl, Timer *, EMPTYARG )
92*b1cdbd2cSJim Jagielski {
93*b1cdbd2cSJim Jagielski 	if ( GetEntryCount() == 0 )
94*b1cdbd2cSJim Jagielski 	{
95*b1cdbd2cSJim Jagielski 		mpSh = SfxObjectShell::Current();
96*b1cdbd2cSJim Jagielski 		FillControl();
97*b1cdbd2cSJim Jagielski 	}
98*b1cdbd2cSJim Jagielski 	return 0;
99*b1cdbd2cSJim Jagielski }
100*b1cdbd2cSJim Jagielski 
101*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
102*b1cdbd2cSJim Jagielski 
Select()103*b1cdbd2cSJim Jagielski void SvxLineBox::Select()
104*b1cdbd2cSJim Jagielski {
105*b1cdbd2cSJim Jagielski     // Call the parent's Select() member to trigger accessibility events.
106*b1cdbd2cSJim Jagielski     LineLB::Select();
107*b1cdbd2cSJim Jagielski 
108*b1cdbd2cSJim Jagielski 	if ( !IsTravelSelect() )
109*b1cdbd2cSJim Jagielski 	{
110*b1cdbd2cSJim Jagielski 		XLineStyle eXLS;
111*b1cdbd2cSJim Jagielski 		sal_uInt16 nPos = GetSelectEntryPos();
112*b1cdbd2cSJim Jagielski //		SfxDispatcher* pDisp = rBindings.GetDispatcher();
113*b1cdbd2cSJim Jagielski 		//DBG_ASSERT( pDisp, "invalid Dispatcher" );
114*b1cdbd2cSJim Jagielski 
115*b1cdbd2cSJim Jagielski 		switch ( nPos )
116*b1cdbd2cSJim Jagielski 		{
117*b1cdbd2cSJim Jagielski 			case 0:
118*b1cdbd2cSJim Jagielski 				eXLS = XLINE_NONE;
119*b1cdbd2cSJim Jagielski 				break;
120*b1cdbd2cSJim Jagielski 
121*b1cdbd2cSJim Jagielski 			case 1:
122*b1cdbd2cSJim Jagielski 				eXLS = XLINE_SOLID;
123*b1cdbd2cSJim Jagielski 				break;
124*b1cdbd2cSJim Jagielski 
125*b1cdbd2cSJim Jagielski 			default:
126*b1cdbd2cSJim Jagielski 			{
127*b1cdbd2cSJim Jagielski 				eXLS = XLINE_DASH;
128*b1cdbd2cSJim Jagielski 
129*b1cdbd2cSJim Jagielski 				if ( nPos != LISTBOX_ENTRY_NOTFOUND &&
130*b1cdbd2cSJim Jagielski 					 SfxObjectShell::Current()	&&
131*b1cdbd2cSJim Jagielski 					 SfxObjectShell::Current()->GetItem( SID_DASH_LIST ) )
132*b1cdbd2cSJim Jagielski 				{
133*b1cdbd2cSJim Jagielski 					// LineDashItem wird nur geschickt, wenn es auch einen Dash besitzt.
134*b1cdbd2cSJim Jagielski 					// Notify k"ummert sich darum!
135*b1cdbd2cSJim Jagielski 					SvxDashListItem aItem( *(const SvxDashListItem*)(
136*b1cdbd2cSJim Jagielski 						SfxObjectShell::Current()->GetItem( SID_DASH_LIST ) ) );
137*b1cdbd2cSJim Jagielski 					XLineDashItem aLineDashItem( GetSelectEntry(),
138*b1cdbd2cSJim Jagielski 						aItem.GetDashList()->GetDash( nPos - 2 )->GetDash() );
139*b1cdbd2cSJim Jagielski 
140*b1cdbd2cSJim Jagielski                     Any a;
141*b1cdbd2cSJim Jagielski                     Sequence< PropertyValue > aArgs( 1 );
142*b1cdbd2cSJim Jagielski                     aArgs[0].Name = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "LineDash" ));
143*b1cdbd2cSJim Jagielski                     aLineDashItem.QueryValue ( a );
144*b1cdbd2cSJim Jagielski                     aArgs[0].Value = a;
145*b1cdbd2cSJim Jagielski                     SfxToolBoxControl::Dispatch( Reference< XDispatchProvider >( mxFrame->getController(), UNO_QUERY ),
146*b1cdbd2cSJim Jagielski                                                  ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:LineDash" )),
147*b1cdbd2cSJim Jagielski                                                  aArgs );
148*b1cdbd2cSJim Jagielski //                    pDisp->Execute( SID_ATTR_LINE_DASH, SFX_CALLMODE_RECORD, &aLineDashItem, 0L );
149*b1cdbd2cSJim Jagielski 				}
150*b1cdbd2cSJim Jagielski 			}
151*b1cdbd2cSJim Jagielski 			break;
152*b1cdbd2cSJim Jagielski 		}
153*b1cdbd2cSJim Jagielski 
154*b1cdbd2cSJim Jagielski 		XLineStyleItem aLineStyleItem( eXLS );
155*b1cdbd2cSJim Jagielski         Any a;
156*b1cdbd2cSJim Jagielski         Sequence< PropertyValue > aArgs( 1 );
157*b1cdbd2cSJim Jagielski         aArgs[0].Name = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "XLineStyle" ));
158*b1cdbd2cSJim Jagielski         aLineStyleItem.QueryValue ( a );
159*b1cdbd2cSJim Jagielski         aArgs[0].Value = a;
160*b1cdbd2cSJim Jagielski         SfxToolBoxControl::Dispatch( Reference< XDispatchProvider >( mxFrame->getController(), UNO_QUERY ),
161*b1cdbd2cSJim Jagielski                                      ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:XLineStyle" )),
162*b1cdbd2cSJim Jagielski                                      aArgs );
163*b1cdbd2cSJim Jagielski //		pDisp->Execute( SID_ATTR_LINE_STYLE, SFX_CALLMODE_RECORD, &aLineStyleItem, 0L );
164*b1cdbd2cSJim Jagielski 
165*b1cdbd2cSJim Jagielski         nCurPos = GetSelectEntryPos();
166*b1cdbd2cSJim Jagielski 		ReleaseFocus_Impl();
167*b1cdbd2cSJim Jagielski 	}
168*b1cdbd2cSJim Jagielski }
169*b1cdbd2cSJim Jagielski 
170*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
171*b1cdbd2cSJim Jagielski 
PreNotify(NotifyEvent & rNEvt)172*b1cdbd2cSJim Jagielski long SvxLineBox::PreNotify( NotifyEvent& rNEvt )
173*b1cdbd2cSJim Jagielski {
174*b1cdbd2cSJim Jagielski 	sal_uInt16 nType = rNEvt.GetType();
175*b1cdbd2cSJim Jagielski 
176*b1cdbd2cSJim Jagielski     switch(nType)
177*b1cdbd2cSJim Jagielski     {
178*b1cdbd2cSJim Jagielski         case EVENT_MOUSEBUTTONDOWN:
179*b1cdbd2cSJim Jagielski         case EVENT_GETFOCUS:
180*b1cdbd2cSJim Jagielski             nCurPos = GetSelectEntryPos();
181*b1cdbd2cSJim Jagielski         break;
182*b1cdbd2cSJim Jagielski         case EVENT_LOSEFOCUS:
183*b1cdbd2cSJim Jagielski             SelectEntryPos(nCurPos);
184*b1cdbd2cSJim Jagielski         break;
185*b1cdbd2cSJim Jagielski         case EVENT_KEYINPUT:
186*b1cdbd2cSJim Jagielski         {
187*b1cdbd2cSJim Jagielski             const KeyEvent* pKEvt = rNEvt.GetKeyEvent();
188*b1cdbd2cSJim Jagielski             if( pKEvt->GetKeyCode().GetCode() == KEY_TAB)
189*b1cdbd2cSJim Jagielski             {
190*b1cdbd2cSJim Jagielski                 bRelease = sal_False;
191*b1cdbd2cSJim Jagielski                 Select();
192*b1cdbd2cSJim Jagielski             }
193*b1cdbd2cSJim Jagielski         }
194*b1cdbd2cSJim Jagielski         break;
195*b1cdbd2cSJim Jagielski     }
196*b1cdbd2cSJim Jagielski 	return LineLB::PreNotify( rNEvt );
197*b1cdbd2cSJim Jagielski }
198*b1cdbd2cSJim Jagielski 
199*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
200*b1cdbd2cSJim Jagielski 
Notify(NotifyEvent & rNEvt)201*b1cdbd2cSJim Jagielski long SvxLineBox::Notify( NotifyEvent& rNEvt )
202*b1cdbd2cSJim Jagielski {
203*b1cdbd2cSJim Jagielski 	long nHandled = LineLB::Notify( rNEvt );
204*b1cdbd2cSJim Jagielski 
205*b1cdbd2cSJim Jagielski 	if ( rNEvt.GetType() == EVENT_KEYINPUT )
206*b1cdbd2cSJim Jagielski 	{
207*b1cdbd2cSJim Jagielski 		const KeyEvent* pKEvt = rNEvt.GetKeyEvent();
208*b1cdbd2cSJim Jagielski 
209*b1cdbd2cSJim Jagielski 		switch ( pKEvt->GetKeyCode().GetCode() )
210*b1cdbd2cSJim Jagielski 		{
211*b1cdbd2cSJim Jagielski 			case KEY_RETURN:
212*b1cdbd2cSJim Jagielski 				Select();
213*b1cdbd2cSJim Jagielski 				nHandled = 1;
214*b1cdbd2cSJim Jagielski 				break;
215*b1cdbd2cSJim Jagielski 
216*b1cdbd2cSJim Jagielski 			case KEY_ESCAPE:
217*b1cdbd2cSJim Jagielski 				SelectEntryPos( nCurPos );
218*b1cdbd2cSJim Jagielski 				ReleaseFocus_Impl();
219*b1cdbd2cSJim Jagielski 				nHandled = 1;
220*b1cdbd2cSJim Jagielski 				break;
221*b1cdbd2cSJim Jagielski         }
222*b1cdbd2cSJim Jagielski 	}
223*b1cdbd2cSJim Jagielski 	return nHandled;
224*b1cdbd2cSJim Jagielski }
225*b1cdbd2cSJim Jagielski 
226*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
227*b1cdbd2cSJim Jagielski 
ReleaseFocus_Impl()228*b1cdbd2cSJim Jagielski void SvxLineBox::ReleaseFocus_Impl()
229*b1cdbd2cSJim Jagielski {
230*b1cdbd2cSJim Jagielski     if(!bRelease)
231*b1cdbd2cSJim Jagielski     {
232*b1cdbd2cSJim Jagielski         bRelease = sal_True;
233*b1cdbd2cSJim Jagielski         return;
234*b1cdbd2cSJim Jagielski     }
235*b1cdbd2cSJim Jagielski 
236*b1cdbd2cSJim Jagielski 	if( SfxViewShell::Current() )
237*b1cdbd2cSJim Jagielski 	{
238*b1cdbd2cSJim Jagielski 		Window* pShellWnd = SfxViewShell::Current()->GetWindow();
239*b1cdbd2cSJim Jagielski 
240*b1cdbd2cSJim Jagielski 		if ( pShellWnd )
241*b1cdbd2cSJim Jagielski 			pShellWnd->GrabFocus();
242*b1cdbd2cSJim Jagielski 	}
243*b1cdbd2cSJim Jagielski }
244*b1cdbd2cSJim Jagielski /* -----------------------------08.03.2002 15:39------------------------------
245*b1cdbd2cSJim Jagielski 
246*b1cdbd2cSJim Jagielski  ---------------------------------------------------------------------------*/
DataChanged(const DataChangedEvent & rDCEvt)247*b1cdbd2cSJim Jagielski void SvxLineBox::DataChanged( const DataChangedEvent& rDCEvt )
248*b1cdbd2cSJim Jagielski {
249*b1cdbd2cSJim Jagielski 	if ( (rDCEvt.GetType() == DATACHANGED_SETTINGS) &&
250*b1cdbd2cSJim Jagielski          (rDCEvt.GetFlags() & SETTINGS_STYLE) )
251*b1cdbd2cSJim Jagielski     {
252*b1cdbd2cSJim Jagielski         SetSizePixel(LogicToPixel(aLogicalSize, MAP_APPFONT));
253*b1cdbd2cSJim Jagielski         Size aDropSize( aLogicalSize.Width(), LOGICAL_EDIT_HEIGHT);
254*b1cdbd2cSJim Jagielski         SetDropDownSizePixel(LogicToPixel(aDropSize, MAP_APPFONT));
255*b1cdbd2cSJim Jagielski    }
256*b1cdbd2cSJim Jagielski 
257*b1cdbd2cSJim Jagielski     LineLB::DataChanged( rDCEvt );
258*b1cdbd2cSJim Jagielski 
259*b1cdbd2cSJim Jagielski 	if ( (rDCEvt.GetType() == DATACHANGED_SETTINGS) &&
260*b1cdbd2cSJim Jagielski          (rDCEvt.GetFlags() & SETTINGS_STYLE) )
261*b1cdbd2cSJim Jagielski     {
262*b1cdbd2cSJim Jagielski 		BmpColorMode eMode = GetSettings().GetStyleSettings().GetHighContrastMode() ? BMP_COLOR_HIGHCONTRAST : BMP_COLOR_NORMAL;
263*b1cdbd2cSJim Jagielski 		if( eMode != meBmpMode )
264*b1cdbd2cSJim Jagielski 		{
265*b1cdbd2cSJim Jagielski 			meBmpMode = eMode;
266*b1cdbd2cSJim Jagielski 			FillControl();
267*b1cdbd2cSJim Jagielski 		}
268*b1cdbd2cSJim Jagielski  	}
269*b1cdbd2cSJim Jagielski }
270*b1cdbd2cSJim Jagielski 
FillControl()271*b1cdbd2cSJim Jagielski void SvxLineBox::FillControl()
272*b1cdbd2cSJim Jagielski {
273*b1cdbd2cSJim Jagielski 	// FillStyles();
274*b1cdbd2cSJim Jagielski     if ( !mpSh )
275*b1cdbd2cSJim Jagielski         mpSh = SfxObjectShell::Current();
276*b1cdbd2cSJim Jagielski 
277*b1cdbd2cSJim Jagielski     if( mpSh )
278*b1cdbd2cSJim Jagielski 	{
279*b1cdbd2cSJim Jagielski 		const SvxDashListItem* pItem = (const SvxDashListItem*)( mpSh->GetItem( SID_DASH_LIST ) );
280*b1cdbd2cSJim Jagielski 		if ( pItem )
281*b1cdbd2cSJim Jagielski 			Fill( pItem->GetDashList() );
282*b1cdbd2cSJim Jagielski 	}
283*b1cdbd2cSJim Jagielski 
284*b1cdbd2cSJim Jagielski 
285*b1cdbd2cSJim Jagielski //	rBindings.Invalidate( SID_ATTR_LINE_DASH );
286*b1cdbd2cSJim Jagielski }
287*b1cdbd2cSJim Jagielski //========================================================================
288*b1cdbd2cSJim Jagielski // SvxColorBox
289*b1cdbd2cSJim Jagielski //========================================================================
290*b1cdbd2cSJim Jagielski 
SvxColorBox(Window * pParent,const::rtl::OUString & rCommand,const Reference<XFrame> & rFrame,WinBits nBits)291*b1cdbd2cSJim Jagielski SvxColorBox::SvxColorBox(
292*b1cdbd2cSJim Jagielski     Window* pParent,
293*b1cdbd2cSJim Jagielski     const ::rtl::OUString& rCommand,
294*b1cdbd2cSJim Jagielski     const Reference< XFrame >& rFrame,
295*b1cdbd2cSJim Jagielski     WinBits nBits ) :
296*b1cdbd2cSJim Jagielski 	ColorLB( pParent, nBits ),
297*b1cdbd2cSJim Jagielski 	nCurPos		( 0 ),
298*b1cdbd2cSJim Jagielski     aLogicalSize(45,80),
299*b1cdbd2cSJim Jagielski     bRelease    ( sal_True ),
300*b1cdbd2cSJim Jagielski     maCommand   ( rCommand ),
301*b1cdbd2cSJim Jagielski     mxFrame     ( rFrame )
302*b1cdbd2cSJim Jagielski {
303*b1cdbd2cSJim Jagielski     SetSizePixel( LogicToPixel( aLogicalSize , MAP_APPFONT));
304*b1cdbd2cSJim Jagielski     Show();
305*b1cdbd2cSJim Jagielski 
306*b1cdbd2cSJim Jagielski     SfxObjectShell* pSh = SfxObjectShell::Current();
307*b1cdbd2cSJim Jagielski 
308*b1cdbd2cSJim Jagielski 	if ( pSh )
309*b1cdbd2cSJim Jagielski 	{
310*b1cdbd2cSJim Jagielski 		const SvxColorTableItem* pItem =
311*b1cdbd2cSJim Jagielski 			(const SvxColorTableItem*)(	pSh->GetItem( SID_COLOR_TABLE ) );
312*b1cdbd2cSJim Jagielski 		if(pItem)
313*b1cdbd2cSJim Jagielski 			Fill( pItem->GetColorTable() );
314*b1cdbd2cSJim Jagielski 	}
315*b1cdbd2cSJim Jagielski }
316*b1cdbd2cSJim Jagielski 
317*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
318*b1cdbd2cSJim Jagielski 
IMPL_LINK(SvxColorBox,DelayHdl_Impl,Timer *,EMPTYARG)319*b1cdbd2cSJim Jagielski IMPL_LINK( SvxColorBox, DelayHdl_Impl, Timer *, EMPTYARG )
320*b1cdbd2cSJim Jagielski {
321*b1cdbd2cSJim Jagielski 	SfxObjectShell* pSh = SfxObjectShell::Current();
322*b1cdbd2cSJim Jagielski 
323*b1cdbd2cSJim Jagielski 	if ( pSh )
324*b1cdbd2cSJim Jagielski 	{
325*b1cdbd2cSJim Jagielski 		const SvxColorTableItem* pItem = (const SvxColorTableItem*)( pSh->GetItem( SID_COLOR_TABLE ) );
326*b1cdbd2cSJim Jagielski 		if ( pItem )
327*b1cdbd2cSJim Jagielski 			Fill( pItem->GetColorTable() );
328*b1cdbd2cSJim Jagielski //		rBindings.Invalidate( nId );
329*b1cdbd2cSJim Jagielski 	}
330*b1cdbd2cSJim Jagielski 	return 0;
331*b1cdbd2cSJim Jagielski }
332*b1cdbd2cSJim Jagielski 
333*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
334*b1cdbd2cSJim Jagielski 
~SvxColorBox()335*b1cdbd2cSJim Jagielski SvxColorBox::~SvxColorBox()
336*b1cdbd2cSJim Jagielski {
337*b1cdbd2cSJim Jagielski }
338*b1cdbd2cSJim Jagielski 
339*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
340*b1cdbd2cSJim Jagielski 
Update(const XLineColorItem * pItem)341*b1cdbd2cSJim Jagielski void SvxColorBox::Update( const XLineColorItem* pItem )
342*b1cdbd2cSJim Jagielski {
343*b1cdbd2cSJim Jagielski 	if ( pItem )
344*b1cdbd2cSJim Jagielski 		SelectEntry( pItem->GetColorValue() );
345*b1cdbd2cSJim Jagielski 	else
346*b1cdbd2cSJim Jagielski 		SetNoSelection();
347*b1cdbd2cSJim Jagielski }
348*b1cdbd2cSJim Jagielski 
349*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
350*b1cdbd2cSJim Jagielski 
Select()351*b1cdbd2cSJim Jagielski void SvxColorBox::Select()
352*b1cdbd2cSJim Jagielski {
353*b1cdbd2cSJim Jagielski 	// OJ: base class call needed here because otherwise no event is send for accessibility
354*b1cdbd2cSJim Jagielski 	ColorLB::Select();
355*b1cdbd2cSJim Jagielski 	if ( !IsTravelSelect() )
356*b1cdbd2cSJim Jagielski 	{
357*b1cdbd2cSJim Jagielski 		XLineColorItem aLineColorItem( GetSelectEntry(), GetSelectEntryColor() );
358*b1cdbd2cSJim Jagielski 
359*b1cdbd2cSJim Jagielski         INetURLObject aObj( maCommand );
360*b1cdbd2cSJim Jagielski 
361*b1cdbd2cSJim Jagielski         Any a;
362*b1cdbd2cSJim Jagielski         Sequence< PropertyValue > aArgs( 1 );
363*b1cdbd2cSJim Jagielski         aArgs[0].Name = aObj.GetURLPath();
364*b1cdbd2cSJim Jagielski         aLineColorItem.QueryValue( a );
365*b1cdbd2cSJim Jagielski         aArgs[0].Value = a;
366*b1cdbd2cSJim Jagielski         SfxToolBoxControl::Dispatch( Reference< XDispatchProvider >( mxFrame->getController(), UNO_QUERY ),
367*b1cdbd2cSJim Jagielski                                      maCommand,
368*b1cdbd2cSJim Jagielski                                      aArgs );
369*b1cdbd2cSJim Jagielski //        rBindings.GetDispatcher()->Execute( nId, SFX_CALLMODE_RECORD, &aLineColorItem, 0L );
370*b1cdbd2cSJim Jagielski 
371*b1cdbd2cSJim Jagielski         nCurPos = GetSelectEntryPos();
372*b1cdbd2cSJim Jagielski 		ReleaseFocus_Impl();
373*b1cdbd2cSJim Jagielski 	}
374*b1cdbd2cSJim Jagielski }
375*b1cdbd2cSJim Jagielski 
376*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
377*b1cdbd2cSJim Jagielski 
PreNotify(NotifyEvent & rNEvt)378*b1cdbd2cSJim Jagielski long SvxColorBox::PreNotify( NotifyEvent& rNEvt )
379*b1cdbd2cSJim Jagielski {
380*b1cdbd2cSJim Jagielski 	sal_uInt16 nType = rNEvt.GetType();
381*b1cdbd2cSJim Jagielski 
382*b1cdbd2cSJim Jagielski     switch(nType)
383*b1cdbd2cSJim Jagielski     {
384*b1cdbd2cSJim Jagielski         case  EVENT_MOUSEBUTTONDOWN:
385*b1cdbd2cSJim Jagielski         case EVENT_GETFOCUS:
386*b1cdbd2cSJim Jagielski             nCurPos = GetSelectEntryPos();
387*b1cdbd2cSJim Jagielski         break;
388*b1cdbd2cSJim Jagielski         case EVENT_LOSEFOCUS:
389*b1cdbd2cSJim Jagielski             SelectEntryPos(nCurPos);
390*b1cdbd2cSJim Jagielski         break;
391*b1cdbd2cSJim Jagielski         case EVENT_KEYINPUT:
392*b1cdbd2cSJim Jagielski         {
393*b1cdbd2cSJim Jagielski             const KeyEvent* pKEvt = rNEvt.GetKeyEvent();
394*b1cdbd2cSJim Jagielski 
395*b1cdbd2cSJim Jagielski             if( pKEvt->GetKeyCode().GetCode() == KEY_TAB)
396*b1cdbd2cSJim Jagielski             {
397*b1cdbd2cSJim Jagielski                 bRelease = sal_False;
398*b1cdbd2cSJim Jagielski                 Select();
399*b1cdbd2cSJim Jagielski             }
400*b1cdbd2cSJim Jagielski         }
401*b1cdbd2cSJim Jagielski     }
402*b1cdbd2cSJim Jagielski 
403*b1cdbd2cSJim Jagielski 	return ColorLB::PreNotify( rNEvt );
404*b1cdbd2cSJim Jagielski }
405*b1cdbd2cSJim Jagielski 
406*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
407*b1cdbd2cSJim Jagielski 
Notify(NotifyEvent & rNEvt)408*b1cdbd2cSJim Jagielski long SvxColorBox::Notify( NotifyEvent& rNEvt )
409*b1cdbd2cSJim Jagielski {
410*b1cdbd2cSJim Jagielski 	long nHandled = ColorLB::Notify( rNEvt );
411*b1cdbd2cSJim Jagielski 
412*b1cdbd2cSJim Jagielski 	if ( rNEvt.GetType() == EVENT_KEYINPUT )
413*b1cdbd2cSJim Jagielski 	{
414*b1cdbd2cSJim Jagielski 		const KeyEvent* pKEvt = rNEvt.GetKeyEvent();
415*b1cdbd2cSJim Jagielski 
416*b1cdbd2cSJim Jagielski 		switch ( pKEvt->GetKeyCode().GetCode() )
417*b1cdbd2cSJim Jagielski 		{
418*b1cdbd2cSJim Jagielski 			case KEY_RETURN:
419*b1cdbd2cSJim Jagielski 				Select();
420*b1cdbd2cSJim Jagielski 				nHandled = 1;
421*b1cdbd2cSJim Jagielski 				break;
422*b1cdbd2cSJim Jagielski 
423*b1cdbd2cSJim Jagielski 			case KEY_ESCAPE:
424*b1cdbd2cSJim Jagielski 				SelectEntryPos( nCurPos );
425*b1cdbd2cSJim Jagielski 				ReleaseFocus_Impl();
426*b1cdbd2cSJim Jagielski 				nHandled = 1;
427*b1cdbd2cSJim Jagielski 				break;
428*b1cdbd2cSJim Jagielski         }
429*b1cdbd2cSJim Jagielski 	}
430*b1cdbd2cSJim Jagielski 	return nHandled;
431*b1cdbd2cSJim Jagielski }
432*b1cdbd2cSJim Jagielski /* -----------------------------08.03.2002 15:35------------------------------
433*b1cdbd2cSJim Jagielski 
434*b1cdbd2cSJim Jagielski  ---------------------------------------------------------------------------*/
DataChanged(const DataChangedEvent & rDCEvt)435*b1cdbd2cSJim Jagielski void SvxColorBox::DataChanged( const DataChangedEvent& rDCEvt )
436*b1cdbd2cSJim Jagielski {
437*b1cdbd2cSJim Jagielski 	if ( (rDCEvt.GetType() == DATACHANGED_SETTINGS) &&
438*b1cdbd2cSJim Jagielski          (rDCEvt.GetFlags() & SETTINGS_STYLE) )
439*b1cdbd2cSJim Jagielski     {
440*b1cdbd2cSJim Jagielski         SetSizePixel(LogicToPixel(aLogicalSize, MAP_APPFONT));
441*b1cdbd2cSJim Jagielski         Size aDropSize( aLogicalSize.Width(), LOGICAL_EDIT_HEIGHT);
442*b1cdbd2cSJim Jagielski         SetDropDownSizePixel(LogicToPixel(aDropSize, MAP_APPFONT));
443*b1cdbd2cSJim Jagielski     }
444*b1cdbd2cSJim Jagielski 
445*b1cdbd2cSJim Jagielski     ColorLB::DataChanged( rDCEvt );
446*b1cdbd2cSJim Jagielski }
447*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
448*b1cdbd2cSJim Jagielski 
ReleaseFocus_Impl()449*b1cdbd2cSJim Jagielski void SvxColorBox::ReleaseFocus_Impl()
450*b1cdbd2cSJim Jagielski {
451*b1cdbd2cSJim Jagielski     if(!bRelease)
452*b1cdbd2cSJim Jagielski     {
453*b1cdbd2cSJim Jagielski         bRelease = sal_True;
454*b1cdbd2cSJim Jagielski         return;
455*b1cdbd2cSJim Jagielski     }
456*b1cdbd2cSJim Jagielski 
457*b1cdbd2cSJim Jagielski 	if( SfxViewShell::Current() )
458*b1cdbd2cSJim Jagielski 	{
459*b1cdbd2cSJim Jagielski 		Window* pShellWnd = SfxViewShell::Current()->GetWindow();
460*b1cdbd2cSJim Jagielski 
461*b1cdbd2cSJim Jagielski 		if ( pShellWnd )
462*b1cdbd2cSJim Jagielski 			pShellWnd->GrabFocus();
463*b1cdbd2cSJim Jagielski 	}
464*b1cdbd2cSJim Jagielski }
465*b1cdbd2cSJim Jagielski 
466*b1cdbd2cSJim Jagielski //========================================================================
467*b1cdbd2cSJim Jagielski // SvxMetricField
468*b1cdbd2cSJim Jagielski //========================================================================
469*b1cdbd2cSJim Jagielski 
SvxMetricField(Window * pParent,const Reference<XFrame> & rFrame,WinBits nBits)470*b1cdbd2cSJim Jagielski SvxMetricField::SvxMetricField(
471*b1cdbd2cSJim Jagielski     Window* pParent, const Reference< XFrame >& rFrame, WinBits nBits ) :
472*b1cdbd2cSJim Jagielski 	MetricField( pParent, nBits ),
473*b1cdbd2cSJim Jagielski 	aCurTxt( String() ),
474*b1cdbd2cSJim Jagielski     mxFrame( rFrame )
475*b1cdbd2cSJim Jagielski {
476*b1cdbd2cSJim Jagielski 	Size aSize = Size(GetTextWidth( String::CreateFromAscii("99,99mm") ),GetTextHeight());
477*b1cdbd2cSJim Jagielski 	aSize.Width() += 20;
478*b1cdbd2cSJim Jagielski 	aSize.Height() += 6;
479*b1cdbd2cSJim Jagielski 	SetSizePixel( aSize );
480*b1cdbd2cSJim Jagielski     aLogicalSize = PixelToLogic(aSize, MAP_APPFONT);
481*b1cdbd2cSJim Jagielski 	SetUnit( FUNIT_MM );
482*b1cdbd2cSJim Jagielski 	SetDecimalDigits( 2 );
483*b1cdbd2cSJim Jagielski 	SetMax( 5000 );
484*b1cdbd2cSJim Jagielski 	SetMin( 0 );
485*b1cdbd2cSJim Jagielski 	SetLast( 5000 );
486*b1cdbd2cSJim Jagielski 	SetFirst( 0 );
487*b1cdbd2cSJim Jagielski 
488*b1cdbd2cSJim Jagielski 	eDlgUnit = SfxModule::GetModuleFieldUnit( mxFrame );
489*b1cdbd2cSJim Jagielski 	SetFieldUnit( *this, eDlgUnit, sal_False );
490*b1cdbd2cSJim Jagielski 	Show();
491*b1cdbd2cSJim Jagielski }
492*b1cdbd2cSJim Jagielski 
493*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
494*b1cdbd2cSJim Jagielski 
~SvxMetricField()495*b1cdbd2cSJim Jagielski SvxMetricField::~SvxMetricField()
496*b1cdbd2cSJim Jagielski {
497*b1cdbd2cSJim Jagielski }
498*b1cdbd2cSJim Jagielski 
499*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
500*b1cdbd2cSJim Jagielski 
Update(const XLineWidthItem * pItem)501*b1cdbd2cSJim Jagielski void SvxMetricField::Update( const XLineWidthItem* pItem )
502*b1cdbd2cSJim Jagielski {
503*b1cdbd2cSJim Jagielski 	if ( pItem )
504*b1cdbd2cSJim Jagielski 	{
505*b1cdbd2cSJim Jagielski 		if ( pItem->GetValue() != GetCoreValue( *this, ePoolUnit ) )
506*b1cdbd2cSJim Jagielski 			SetMetricValue( *this, pItem->GetValue(), ePoolUnit );
507*b1cdbd2cSJim Jagielski 	}
508*b1cdbd2cSJim Jagielski 	else
509*b1cdbd2cSJim Jagielski 		SetText( String() );
510*b1cdbd2cSJim Jagielski }
511*b1cdbd2cSJim Jagielski 
512*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
513*b1cdbd2cSJim Jagielski 
Modify()514*b1cdbd2cSJim Jagielski void SvxMetricField::Modify()
515*b1cdbd2cSJim Jagielski {
516*b1cdbd2cSJim Jagielski 	MetricField::Modify();
517*b1cdbd2cSJim Jagielski 	long nTmp = GetCoreValue( *this, ePoolUnit );
518*b1cdbd2cSJim Jagielski 	XLineWidthItem aLineWidthItem( nTmp );
519*b1cdbd2cSJim Jagielski 
520*b1cdbd2cSJim Jagielski     Any a;
521*b1cdbd2cSJim Jagielski     Sequence< PropertyValue > aArgs( 1 );
522*b1cdbd2cSJim Jagielski     aArgs[0].Name = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "LineWidth" ));
523*b1cdbd2cSJim Jagielski     aLineWidthItem.QueryValue( a );
524*b1cdbd2cSJim Jagielski     aArgs[0].Value = a;
525*b1cdbd2cSJim Jagielski     SfxToolBoxControl::Dispatch( Reference< XDispatchProvider >( mxFrame->getController(), UNO_QUERY ),
526*b1cdbd2cSJim Jagielski                                  ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:LineWidth" )),
527*b1cdbd2cSJim Jagielski                                  aArgs );
528*b1cdbd2cSJim Jagielski //	rBindings.GetDispatcher()->Execute( SID_ATTR_LINE_WIDTH, SFX_CALLMODE_RECORD, &aLineWidthItem, 0L );
529*b1cdbd2cSJim Jagielski }
530*b1cdbd2cSJim Jagielski 
531*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
532*b1cdbd2cSJim Jagielski 
ReleaseFocus_Impl()533*b1cdbd2cSJim Jagielski void SvxMetricField::ReleaseFocus_Impl()
534*b1cdbd2cSJim Jagielski {
535*b1cdbd2cSJim Jagielski 	if( SfxViewShell::Current() )
536*b1cdbd2cSJim Jagielski 	{
537*b1cdbd2cSJim Jagielski 		Window* pShellWnd = SfxViewShell::Current()->GetWindow();
538*b1cdbd2cSJim Jagielski 		if ( pShellWnd )
539*b1cdbd2cSJim Jagielski 			pShellWnd->GrabFocus();
540*b1cdbd2cSJim Jagielski 	}
541*b1cdbd2cSJim Jagielski }
542*b1cdbd2cSJim Jagielski 
543*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
544*b1cdbd2cSJim Jagielski 
Down()545*b1cdbd2cSJim Jagielski void SvxMetricField::Down()
546*b1cdbd2cSJim Jagielski {
547*b1cdbd2cSJim Jagielski 	sal_Int64 nValue = GetValue();
548*b1cdbd2cSJim Jagielski 	nValue -= GetSpinSize();
549*b1cdbd2cSJim Jagielski 
550*b1cdbd2cSJim Jagielski 	// Um unter OS/2 einen Sprung auf Max zu verhindern
551*b1cdbd2cSJim Jagielski 	if ( nValue >= GetMin() )
552*b1cdbd2cSJim Jagielski 		MetricField::Down();
553*b1cdbd2cSJim Jagielski }
554*b1cdbd2cSJim Jagielski 
555*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
556*b1cdbd2cSJim Jagielski 
Up()557*b1cdbd2cSJim Jagielski void SvxMetricField::Up()
558*b1cdbd2cSJim Jagielski {
559*b1cdbd2cSJim Jagielski 	MetricField::Up();
560*b1cdbd2cSJim Jagielski }
561*b1cdbd2cSJim Jagielski 
562*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
563*b1cdbd2cSJim Jagielski 
SetCoreUnit(SfxMapUnit eUnit)564*b1cdbd2cSJim Jagielski void SvxMetricField::SetCoreUnit( SfxMapUnit eUnit )
565*b1cdbd2cSJim Jagielski {
566*b1cdbd2cSJim Jagielski 	ePoolUnit = eUnit;
567*b1cdbd2cSJim Jagielski }
568*b1cdbd2cSJim Jagielski 
569*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
570*b1cdbd2cSJim Jagielski 
RefreshDlgUnit()571*b1cdbd2cSJim Jagielski void SvxMetricField::RefreshDlgUnit()
572*b1cdbd2cSJim Jagielski {
573*b1cdbd2cSJim Jagielski 	FieldUnit eTmpUnit = SfxModule::GetModuleFieldUnit( mxFrame );
574*b1cdbd2cSJim Jagielski 	if ( eDlgUnit != eTmpUnit )
575*b1cdbd2cSJim Jagielski 	{
576*b1cdbd2cSJim Jagielski 		eDlgUnit = eTmpUnit;
577*b1cdbd2cSJim Jagielski 		SetFieldUnit( *this, eDlgUnit, sal_False );
578*b1cdbd2cSJim Jagielski 	}
579*b1cdbd2cSJim Jagielski }
580*b1cdbd2cSJim Jagielski 
581*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
582*b1cdbd2cSJim Jagielski 
PreNotify(NotifyEvent & rNEvt)583*b1cdbd2cSJim Jagielski long SvxMetricField::PreNotify( NotifyEvent& rNEvt )
584*b1cdbd2cSJim Jagielski {
585*b1cdbd2cSJim Jagielski 	sal_uInt16 nType = rNEvt.GetType();
586*b1cdbd2cSJim Jagielski 
587*b1cdbd2cSJim Jagielski 	if ( EVENT_MOUSEBUTTONDOWN == nType || EVENT_GETFOCUS == nType )
588*b1cdbd2cSJim Jagielski 		aCurTxt = GetText();
589*b1cdbd2cSJim Jagielski 
590*b1cdbd2cSJim Jagielski 	return MetricField::PreNotify( rNEvt );
591*b1cdbd2cSJim Jagielski }
592*b1cdbd2cSJim Jagielski 
593*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
594*b1cdbd2cSJim Jagielski 
Notify(NotifyEvent & rNEvt)595*b1cdbd2cSJim Jagielski long SvxMetricField::Notify( NotifyEvent& rNEvt )
596*b1cdbd2cSJim Jagielski {
597*b1cdbd2cSJim Jagielski 	long nHandled = MetricField::Notify( rNEvt );
598*b1cdbd2cSJim Jagielski 
599*b1cdbd2cSJim Jagielski 	if ( rNEvt.GetType() == EVENT_KEYINPUT )
600*b1cdbd2cSJim Jagielski 	{
601*b1cdbd2cSJim Jagielski 		const KeyEvent* pKEvt = rNEvt.GetKeyEvent();
602*b1cdbd2cSJim Jagielski 		const KeyCode& rKey = pKEvt->GetKeyCode();
603*b1cdbd2cSJim Jagielski 		SfxViewShell* pSh = SfxViewShell::Current();
604*b1cdbd2cSJim Jagielski 
605*b1cdbd2cSJim Jagielski 		if ( rKey.GetModifier() && rKey.GetGroup() != KEYGROUP_CURSOR && pSh )
606*b1cdbd2cSJim Jagielski 			pSh->KeyInput( *pKEvt );
607*b1cdbd2cSJim Jagielski 		else
608*b1cdbd2cSJim Jagielski 		{
609*b1cdbd2cSJim Jagielski 			bool bHandled = sal_False;
610*b1cdbd2cSJim Jagielski 
611*b1cdbd2cSJim Jagielski 			switch ( rKey.GetCode() )
612*b1cdbd2cSJim Jagielski 			{
613*b1cdbd2cSJim Jagielski 				case KEY_RETURN:
614*b1cdbd2cSJim Jagielski 					Reformat();
615*b1cdbd2cSJim Jagielski 					bHandled = sal_True;
616*b1cdbd2cSJim Jagielski 					break;
617*b1cdbd2cSJim Jagielski 
618*b1cdbd2cSJim Jagielski 				case KEY_ESCAPE:
619*b1cdbd2cSJim Jagielski 					SetText( aCurTxt );
620*b1cdbd2cSJim Jagielski 					bHandled = sal_True;
621*b1cdbd2cSJim Jagielski 					break;
622*b1cdbd2cSJim Jagielski 			}
623*b1cdbd2cSJim Jagielski 
624*b1cdbd2cSJim Jagielski 			if ( bHandled )
625*b1cdbd2cSJim Jagielski 			{
626*b1cdbd2cSJim Jagielski 				nHandled = 1;
627*b1cdbd2cSJim Jagielski 				Modify();
628*b1cdbd2cSJim Jagielski 				ReleaseFocus_Impl();
629*b1cdbd2cSJim Jagielski 			}
630*b1cdbd2cSJim Jagielski 		}
631*b1cdbd2cSJim Jagielski 	}
632*b1cdbd2cSJim Jagielski 	return nHandled;
633*b1cdbd2cSJim Jagielski }
634*b1cdbd2cSJim Jagielski /* -----------------------------08.03.2002 15:32------------------------------
635*b1cdbd2cSJim Jagielski 
636*b1cdbd2cSJim Jagielski  ---------------------------------------------------------------------------*/
DataChanged(const DataChangedEvent & rDCEvt)637*b1cdbd2cSJim Jagielski void SvxMetricField::DataChanged( const DataChangedEvent& rDCEvt )
638*b1cdbd2cSJim Jagielski {
639*b1cdbd2cSJim Jagielski 	if ( (rDCEvt.GetType() == DATACHANGED_SETTINGS) &&
640*b1cdbd2cSJim Jagielski          (rDCEvt.GetFlags() & SETTINGS_STYLE) )
641*b1cdbd2cSJim Jagielski     {
642*b1cdbd2cSJim Jagielski         SetSizePixel(LogicToPixel(aLogicalSize, MAP_APPFONT));
643*b1cdbd2cSJim Jagielski     }
644*b1cdbd2cSJim Jagielski 
645*b1cdbd2cSJim Jagielski     MetricField::DataChanged( rDCEvt );
646*b1cdbd2cSJim Jagielski }
647*b1cdbd2cSJim Jagielski 
648*b1cdbd2cSJim Jagielski //========================================================================
649*b1cdbd2cSJim Jagielski // SvxFillTypeBox
650*b1cdbd2cSJim Jagielski //========================================================================
651*b1cdbd2cSJim Jagielski 
SvxFillTypeBox(Window * pParent,WinBits nBits)652*b1cdbd2cSJim Jagielski SvxFillTypeBox::SvxFillTypeBox( Window* pParent, WinBits nBits ) :
653*b1cdbd2cSJim Jagielski 	FillTypeLB( pParent, nBits | WB_TABSTOP ),
654*b1cdbd2cSJim Jagielski 	nCurPos	( 0 ),
655*b1cdbd2cSJim Jagielski     bSelect ( sal_False ),
656*b1cdbd2cSJim Jagielski     bRelease(sal_True)
657*b1cdbd2cSJim Jagielski {
658*b1cdbd2cSJim Jagielski     SetSizePixel( LogicToPixel( Size(40, 40 ),MAP_APPFONT ));
659*b1cdbd2cSJim Jagielski     Fill();
660*b1cdbd2cSJim Jagielski 	SelectEntryPos( XFILL_SOLID );
661*b1cdbd2cSJim Jagielski 	Show();
662*b1cdbd2cSJim Jagielski }
663*b1cdbd2cSJim Jagielski 
664*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
665*b1cdbd2cSJim Jagielski 
~SvxFillTypeBox()666*b1cdbd2cSJim Jagielski SvxFillTypeBox::~SvxFillTypeBox()
667*b1cdbd2cSJim Jagielski {
668*b1cdbd2cSJim Jagielski }
669*b1cdbd2cSJim Jagielski 
670*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
671*b1cdbd2cSJim Jagielski 
PreNotify(NotifyEvent & rNEvt)672*b1cdbd2cSJim Jagielski long SvxFillTypeBox::PreNotify( NotifyEvent& rNEvt )
673*b1cdbd2cSJim Jagielski {
674*b1cdbd2cSJim Jagielski 	sal_uInt16 nType = rNEvt.GetType();
675*b1cdbd2cSJim Jagielski 
676*b1cdbd2cSJim Jagielski 	if ( EVENT_MOUSEBUTTONDOWN == nType || EVENT_GETFOCUS == nType )
677*b1cdbd2cSJim Jagielski 		nCurPos = GetSelectEntryPos();
678*b1cdbd2cSJim Jagielski 	else if ( EVENT_LOSEFOCUS == nType
679*b1cdbd2cSJim Jagielski 		&& Application::GetFocusWindow()
680*b1cdbd2cSJim Jagielski 		&& !IsWindowOrChild( Application::GetFocusWindow(), sal_True ) )
681*b1cdbd2cSJim Jagielski 	{
682*b1cdbd2cSJim Jagielski 		if ( !bSelect )
683*b1cdbd2cSJim Jagielski 			SelectEntryPos( nCurPos );
684*b1cdbd2cSJim Jagielski 		else
685*b1cdbd2cSJim Jagielski 			bSelect = sal_False;
686*b1cdbd2cSJim Jagielski 	}
687*b1cdbd2cSJim Jagielski 
688*b1cdbd2cSJim Jagielski 	return FillTypeLB::PreNotify( rNEvt );
689*b1cdbd2cSJim Jagielski }
690*b1cdbd2cSJim Jagielski 
691*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
692*b1cdbd2cSJim Jagielski 
Notify(NotifyEvent & rNEvt)693*b1cdbd2cSJim Jagielski long SvxFillTypeBox::Notify( NotifyEvent& rNEvt )
694*b1cdbd2cSJim Jagielski {
695*b1cdbd2cSJim Jagielski 	long nHandled = FillTypeLB::Notify( rNEvt );
696*b1cdbd2cSJim Jagielski 
697*b1cdbd2cSJim Jagielski 	if ( rNEvt.GetType() == EVENT_KEYINPUT )
698*b1cdbd2cSJim Jagielski 	{
699*b1cdbd2cSJim Jagielski 		const KeyEvent* pKEvt = rNEvt.GetKeyEvent();
700*b1cdbd2cSJim Jagielski 		switch ( pKEvt->GetKeyCode().GetCode() )
701*b1cdbd2cSJim Jagielski 		{
702*b1cdbd2cSJim Jagielski             case KEY_RETURN:
703*b1cdbd2cSJim Jagielski                 nHandled = 1;
704*b1cdbd2cSJim Jagielski                 ( (Link&)GetSelectHdl() ).Call( this );
705*b1cdbd2cSJim Jagielski             break;
706*b1cdbd2cSJim Jagielski             case KEY_TAB:
707*b1cdbd2cSJim Jagielski                 bRelease = sal_False;
708*b1cdbd2cSJim Jagielski                 ( (Link&)GetSelectHdl() ).Call( this );
709*b1cdbd2cSJim Jagielski                 bRelease = sal_True;
710*b1cdbd2cSJim Jagielski                 break;
711*b1cdbd2cSJim Jagielski 
712*b1cdbd2cSJim Jagielski 			case KEY_ESCAPE:
713*b1cdbd2cSJim Jagielski 				SelectEntryPos( nCurPos );
714*b1cdbd2cSJim Jagielski 				ReleaseFocus_Impl();
715*b1cdbd2cSJim Jagielski 				nHandled = 1;
716*b1cdbd2cSJim Jagielski 				break;
717*b1cdbd2cSJim Jagielski 		}
718*b1cdbd2cSJim Jagielski 	}
719*b1cdbd2cSJim Jagielski 	return nHandled;
720*b1cdbd2cSJim Jagielski }
721*b1cdbd2cSJim Jagielski 
722*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
723*b1cdbd2cSJim Jagielski 
ReleaseFocus_Impl()724*b1cdbd2cSJim Jagielski void SvxFillTypeBox::ReleaseFocus_Impl()
725*b1cdbd2cSJim Jagielski {
726*b1cdbd2cSJim Jagielski 	if( SfxViewShell::Current() )
727*b1cdbd2cSJim Jagielski 	{
728*b1cdbd2cSJim Jagielski 		Window* pShellWnd = SfxViewShell::Current()->GetWindow();
729*b1cdbd2cSJim Jagielski 
730*b1cdbd2cSJim Jagielski 		if ( pShellWnd )
731*b1cdbd2cSJim Jagielski 			pShellWnd->GrabFocus();
732*b1cdbd2cSJim Jagielski 	}
733*b1cdbd2cSJim Jagielski }
734*b1cdbd2cSJim Jagielski 
735*b1cdbd2cSJim Jagielski //========================================================================
736*b1cdbd2cSJim Jagielski // SvxFillAttrBox
737*b1cdbd2cSJim Jagielski //========================================================================
738*b1cdbd2cSJim Jagielski 
SvxFillAttrBox(Window * pParent,WinBits nBits)739*b1cdbd2cSJim Jagielski SvxFillAttrBox::SvxFillAttrBox( Window* pParent, WinBits nBits ) :
740*b1cdbd2cSJim Jagielski 
741*b1cdbd2cSJim Jagielski 	FillAttrLB( pParent, nBits | WB_TABSTOP ),
742*b1cdbd2cSJim Jagielski 
743*b1cdbd2cSJim Jagielski     nCurPos( 0 ),
744*b1cdbd2cSJim Jagielski     bRelease( sal_True )
745*b1cdbd2cSJim Jagielski 
746*b1cdbd2cSJim Jagielski {
747*b1cdbd2cSJim Jagielski 	SetPosPixel( Point( 90, 0 ) );
748*b1cdbd2cSJim Jagielski     SetSizePixel( LogicToPixel( Size(50, 80 ), MAP_APPFONT ));
749*b1cdbd2cSJim Jagielski 	Show();
750*b1cdbd2cSJim Jagielski }
751*b1cdbd2cSJim Jagielski 
752*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
753*b1cdbd2cSJim Jagielski 
~SvxFillAttrBox()754*b1cdbd2cSJim Jagielski SvxFillAttrBox::~SvxFillAttrBox()
755*b1cdbd2cSJim Jagielski {
756*b1cdbd2cSJim Jagielski }
757*b1cdbd2cSJim Jagielski 
758*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
759*b1cdbd2cSJim Jagielski 
PreNotify(NotifyEvent & rNEvt)760*b1cdbd2cSJim Jagielski long SvxFillAttrBox::PreNotify( NotifyEvent& rNEvt )
761*b1cdbd2cSJim Jagielski {
762*b1cdbd2cSJim Jagielski 	sal_uInt16 nType = rNEvt.GetType();
763*b1cdbd2cSJim Jagielski 
764*b1cdbd2cSJim Jagielski 	if ( EVENT_MOUSEBUTTONDOWN == nType || EVENT_GETFOCUS == nType )
765*b1cdbd2cSJim Jagielski 		nCurPos = GetSelectEntryPos();
766*b1cdbd2cSJim Jagielski 
767*b1cdbd2cSJim Jagielski 	return FillAttrLB::PreNotify( rNEvt );
768*b1cdbd2cSJim Jagielski }
769*b1cdbd2cSJim Jagielski 
770*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
771*b1cdbd2cSJim Jagielski 
Notify(NotifyEvent & rNEvt)772*b1cdbd2cSJim Jagielski long SvxFillAttrBox::Notify( NotifyEvent& rNEvt )
773*b1cdbd2cSJim Jagielski {
774*b1cdbd2cSJim Jagielski 	long nHandled = FillAttrLB::Notify( rNEvt );
775*b1cdbd2cSJim Jagielski 
776*b1cdbd2cSJim Jagielski 	if ( rNEvt.GetType() == EVENT_KEYINPUT )
777*b1cdbd2cSJim Jagielski 	{
778*b1cdbd2cSJim Jagielski 		const KeyEvent* pKEvt = rNEvt.GetKeyEvent();
779*b1cdbd2cSJim Jagielski 
780*b1cdbd2cSJim Jagielski 		switch ( pKEvt->GetKeyCode().GetCode() )
781*b1cdbd2cSJim Jagielski 		{
782*b1cdbd2cSJim Jagielski 			case KEY_RETURN:
783*b1cdbd2cSJim Jagielski 				( (Link&)GetSelectHdl() ).Call( this );
784*b1cdbd2cSJim Jagielski 				nHandled = 1;
785*b1cdbd2cSJim Jagielski             break;
786*b1cdbd2cSJim Jagielski             case KEY_TAB:
787*b1cdbd2cSJim Jagielski                 bRelease = sal_False;
788*b1cdbd2cSJim Jagielski                 GetSelectHdl().Call( this );
789*b1cdbd2cSJim Jagielski                 bRelease = sal_True;
790*b1cdbd2cSJim Jagielski             break;
791*b1cdbd2cSJim Jagielski 			case KEY_ESCAPE:
792*b1cdbd2cSJim Jagielski 				SelectEntryPos( nCurPos );
793*b1cdbd2cSJim Jagielski 				ReleaseFocus_Impl();
794*b1cdbd2cSJim Jagielski 				nHandled = 1;
795*b1cdbd2cSJim Jagielski 				break;
796*b1cdbd2cSJim Jagielski 		}
797*b1cdbd2cSJim Jagielski 	}
798*b1cdbd2cSJim Jagielski 	return nHandled;
799*b1cdbd2cSJim Jagielski }
800*b1cdbd2cSJim Jagielski 
801*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
802*b1cdbd2cSJim Jagielski 
Select()803*b1cdbd2cSJim Jagielski void SvxFillAttrBox::Select()
804*b1cdbd2cSJim Jagielski {
805*b1cdbd2cSJim Jagielski 	FillAttrLB::Select();
806*b1cdbd2cSJim Jagielski }
807*b1cdbd2cSJim Jagielski 
808*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
809*b1cdbd2cSJim Jagielski 
ReleaseFocus_Impl()810*b1cdbd2cSJim Jagielski void SvxFillAttrBox::ReleaseFocus_Impl()
811*b1cdbd2cSJim Jagielski {
812*b1cdbd2cSJim Jagielski 	if( SfxViewShell::Current() )
813*b1cdbd2cSJim Jagielski 	{
814*b1cdbd2cSJim Jagielski 		Window* pShellWnd = SfxViewShell::Current()->GetWindow();
815*b1cdbd2cSJim Jagielski 
816*b1cdbd2cSJim Jagielski 		if ( pShellWnd )
817*b1cdbd2cSJim Jagielski 			pShellWnd->GrabFocus();
818*b1cdbd2cSJim Jagielski 	}
819*b1cdbd2cSJim Jagielski }
820