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