1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: fillctrl.cxx,v $
12 * This file is part of OpenOffice.org.
14 * OpenOffice.org is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License version 3
16 * only, as published by the Free Software Foundation.
18 * OpenOffice.org is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU Lesser General Public License version 3 for more details
22 * (a copy is included in the LICENSE file that accompanied this code).
24 * You should have received a copy of the GNU Lesser General Public License
25 * version 3 along with OpenOffice.org. If not, see
26 * <http://www.openoffice.org/license.html>
27 * for a copy of the LGPLv3 License.
29 ************************************************************************/
31 // MARKER(update_precomp.py): autogen include statement, do not remove
32 #include "precompiled_svx.hxx"
34 // include ---------------------------------------------------------------
36 #include <string> // HACK: prevent conflict between STLPORT and Workshop headers
37 #include <sfx2/app.hxx>
38 #include <sfx2/dispatch.hxx>
39 #include <sfx2/objsh.hxx>
40 #include <sfx2/viewsh.hxx>
41 #include <rtl/ustring.hxx>
43 #include <svx/dialogs.hrc>
45 #define DELAY_TIMEOUT 300
47 #define TMP_STR_BEGIN '['
48 #define TMP_STR_END ']'
50 #include "drawitem.hxx"
52 #include <svx/xtable.hxx>
53 #include <svx/fillctrl.hxx>
54 #include <svx/itemwin.hxx>
55 #include <svx/dialmgr.hxx>
58 using namespace ::com::sun::star::uno
;
59 using namespace ::com::sun::star::util
;
60 using namespace ::com::sun::star::beans
;
61 using namespace ::com::sun::star::frame
;
62 using namespace ::com::sun::star::lang
;
64 SFX_IMPL_TOOLBOX_CONTROL( SvxFillToolBoxControl
, XFillStyleItem
);
66 /*************************************************************************
68 |* SvxFillToolBoxControl
70 \************************************************************************/
72 SvxFillToolBoxControl::SvxFillToolBoxControl( USHORT nSlotId
, USHORT nId
, ToolBox
& rTbx
) :
73 SfxToolBoxControl( nSlotId
, nId
, rTbx
),
77 pGradientItem ( NULL
),
80 pFillControl ( NULL
),
84 bIgnoreStatusUpdate( FALSE
),
85 eLastXFS ( XFILL_NONE
)
87 addStatusListener( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:FillColor" )));
88 addStatusListener( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:FillGradient" )));
89 addStatusListener( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:FillHatch" )));
90 addStatusListener( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:FillBitmap" )));
91 addStatusListener( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:ColorTableState" )));
92 addStatusListener( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:GradientListState" )));
93 addStatusListener( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:HatchListState" )));
94 addStatusListener( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:BitmapListState" )));
97 //========================================================================
99 SvxFillToolBoxControl::~SvxFillToolBoxControl()
103 delete pGradientItem
;
108 //========================================================================
110 void SvxFillToolBoxControl::StateChanged(
112 USHORT nSID
, SfxItemState eState
, const SfxPoolItem
* pState
)
115 FASTBOOL bEnableControls
= FALSE
;
117 if ( bIgnoreStatusUpdate
)
120 if( eState
== SFX_ITEM_DISABLED
)
122 if( nSID
== SID_ATTR_FILL_STYLE
)
124 pFillTypeLB
->Disable();
125 pFillTypeLB
->SetNoSelection();
127 pFillAttrLB
->Disable();
128 pFillAttrLB
->SetNoSelection();
132 if ( SFX_ITEM_AVAILABLE
== eState
)
134 if( nSID
== SID_ATTR_FILL_STYLE
)
137 pStyleItem
= (XFillStyleItem
*) pState
->Clone();
138 pFillTypeLB
->Enable();
140 eLastXFS
= pFillTypeLB
->GetSelectEntryPos();
143 XFillStyle eXFS
= (XFillStyle
)pStyleItem
->GetValue();
144 pFillTypeLB
->SelectEntryPos(
145 sal::static_int_cast
< USHORT
>( eXFS
) );
146 pFillAttrLB
->Enable();
148 else if( pStyleItem
)
150 XFillStyle eXFS
= (XFillStyle
)pStyleItem
->GetValue();
152 if( nSID
== SID_ATTR_FILL_COLOR
)
155 pColorItem
= (XFillColorItem
*) pState
->Clone();
157 if( eXFS
== XFILL_SOLID
)
158 bEnableControls
= TRUE
;
160 else if( nSID
== SID_ATTR_FILL_GRADIENT
)
162 delete pGradientItem
;
163 pGradientItem
= (XFillGradientItem
*) pState
->Clone();
165 if( eXFS
== XFILL_GRADIENT
)
166 bEnableControls
= TRUE
;
168 else if( nSID
== SID_ATTR_FILL_HATCH
)
171 pHatchItem
= (XFillHatchItem
*) pState
->Clone();
173 if( eXFS
== XFILL_HATCH
)
174 bEnableControls
= TRUE
;
176 else if( nSID
== SID_ATTR_FILL_BITMAP
)
179 pBitmapItem
= (XFillBitmapItem
*) pState
->Clone();
181 if( eXFS
== XFILL_BITMAP
)
182 bEnableControls
= TRUE
;
185 if( bEnableControls
)
187 //pFillTypeLB->Enable();
188 pFillAttrLB
->Enable();
197 // leerer oder uneindeutiger Status
198 if( nSID
== SID_ATTR_FILL_STYLE
)
200 pFillTypeLB
->SetNoSelection();
201 pFillAttrLB
->Disable();
202 pFillAttrLB
->SetNoSelection();
207 XFillStyle eXFS
= XFILL_NONE
;
209 eXFS
= (XFillStyle
)pStyleItem
->GetValue();
211 ( nSID
== SID_ATTR_FILL_COLOR
&& eXFS
== XFILL_SOLID
) ||
212 ( nSID
== SID_ATTR_FILL_GRADIENT
&& eXFS
== XFILL_GRADIENT
) ||
213 ( nSID
== SID_ATTR_FILL_HATCH
&& eXFS
== XFILL_HATCH
) ||
214 ( nSID
== SID_ATTR_FILL_BITMAP
&& eXFS
== XFILL_BITMAP
) )
216 pFillAttrLB
->SetNoSelection();
224 //========================================================================
226 void SvxFillToolBoxControl::IgnoreStatusUpdate( sal_Bool bSet
)
228 bIgnoreStatusUpdate
= bSet
;
231 //========================================================================
233 void SvxFillToolBoxControl::Update( const SfxPoolItem
* pState
)
235 if ( pStyleItem
&& pState
&& bUpdate
)
239 XFillStyle eXFS
= (XFillStyle
)pStyleItem
->GetValue();
241 // Pruefen, ob Fuellstil schon vorher aktiv war
242 //if( eTmpXFS != eXFS )
243 if( (XFillStyle
) eLastXFS
!= eXFS
)
244 pFillControl
->SelectFillTypeHdl( NULL
);
256 String
aString( pColorItem
->GetName() );
257 ::Color aColor
= pColorItem
->GetColorValue();
259 pFillAttrLB
->SelectEntry( aString
);
261 if ( pFillAttrLB
->GetSelectEntryPos() == LISTBOX_ENTRY_NOTFOUND
||
262 pFillAttrLB
->GetSelectEntryColor() != aColor
)
263 pFillAttrLB
->SelectEntry( aColor
);
266 // Pruefen, ob Eintrag nicht in der Liste ist
267 if( pFillAttrLB
->GetSelectEntryPos() ==
268 LISTBOX_ENTRY_NOTFOUND
||
269 pFillAttrLB
->GetSelectEntryColor() != aColor
)
271 USHORT nCount
= pFillAttrLB
->GetEntryCount();
275 //Letzter Eintrag wird auf temporaere Farbe geprueft
276 aTmpStr
= pFillAttrLB
->GetEntry( nCount
- 1 );
277 if( aTmpStr
.GetChar(0) == TMP_STR_BEGIN
&&
278 aTmpStr
.GetChar(aTmpStr
.Len()-1) == TMP_STR_END
)
280 pFillAttrLB
->RemoveEntry( nCount
- 1 );
283 aTmpStr
= TMP_STR_BEGIN
;
285 aTmpStr
+= TMP_STR_END
;
287 //pFillAttrLB->SetUpdateMode( FALSE );
288 USHORT nPos
= pFillAttrLB
->InsertEntry( aColor
, aTmpStr
);
289 //pFillAttrLB->SetUpdateMode( TRUE );
290 pFillAttrLB
->SelectEntryPos( nPos
);
295 pFillAttrLB
->SetNoSelection();
303 String
aString( pGradientItem
->GetName() );
304 pFillAttrLB
->SelectEntry( aString
);
306 // Pruefen, ob Eintrag nicht in der Liste ist
307 if( pFillAttrLB
->GetSelectEntry() != aString
)
309 USHORT nCount
= pFillAttrLB
->GetEntryCount();
313 //Letzter Eintrag wird auf temporaeren Eintrag geprueft
314 aTmpStr
= pFillAttrLB
->GetEntry( nCount
- 1 );
315 if( aTmpStr
.GetChar(0) == TMP_STR_BEGIN
&&
316 aTmpStr
.GetChar(aTmpStr
.Len()-1) == TMP_STR_END
)
318 pFillAttrLB
->RemoveEntry( nCount
- 1 );
321 aTmpStr
= TMP_STR_BEGIN
;
323 aTmpStr
+= TMP_STR_END
;
325 XGradientEntry
* pEntry
= new XGradientEntry( pGradientItem
->GetGradientValue(), aTmpStr
);
326 String aEmptyString
= String();
327 XGradientList
aGradientList( aEmptyString
);
328 aGradientList
.Insert( pEntry
);
329 aGradientList
.SetDirty( FALSE
);
330 Bitmap
* pBmp
= aGradientList
.CreateBitmapForUI( 0 );
334 ( (ListBox
*)pFillAttrLB
)->InsertEntry( pEntry
->GetName(), *pBmp
);
335 pFillAttrLB
->SelectEntryPos( pFillAttrLB
->GetEntryCount() - 1 );
339 aGradientList
.Remove( 0 );
345 pFillAttrLB
->SetNoSelection();
353 String
aString( pHatchItem
->GetName() );
354 pFillAttrLB
->SelectEntry( aString
);
356 // Pruefen, ob Eintrag nicht in der Liste ist
357 if( pFillAttrLB
->GetSelectEntry() != aString
)
359 USHORT nCount
= pFillAttrLB
->GetEntryCount();
363 //Letzter Eintrag wird auf temporaeren Eintrag geprueft
364 aTmpStr
= pFillAttrLB
->GetEntry( nCount
- 1 );
365 if( aTmpStr
.GetChar(0) == TMP_STR_BEGIN
&&
366 aTmpStr
.GetChar(aTmpStr
.Len()-1) == TMP_STR_END
)
368 pFillAttrLB
->RemoveEntry( nCount
- 1 );
371 aTmpStr
= TMP_STR_BEGIN
;
373 aTmpStr
+= TMP_STR_END
;
375 XHatchEntry
* pEntry
= new XHatchEntry( pHatchItem
->GetHatchValue(), aTmpStr
);
376 String aEmptyString
= String();
377 XHatchList
aHatchList( aEmptyString
);
378 aHatchList
.Insert( pEntry
);
379 aHatchList
.SetDirty( FALSE
);
380 Bitmap
* pBmp
= aHatchList
.CreateBitmapForUI( 0 );
384 ( (ListBox
*)pFillAttrLB
)->InsertEntry( pEntry
->GetName(), *pBmp
);
385 pFillAttrLB
->SelectEntryPos( pFillAttrLB
->GetEntryCount() - 1 );
389 aHatchList
.Remove( 0 );
395 pFillAttrLB
->SetNoSelection();
403 // SfxObjectShell::Current() &&
404 // SfxObjectShell::Current()->GetItem( SID_BITMAP_LIST ) )
406 String
aString( pBitmapItem
->GetName() );
407 // Bitmap aBitmap( pBitmapItem->GetValue() );
409 // SvxBitmapListItem aItem( *(const SvxBitmapListItem*)(
410 // SfxObjectShell::Current()->GetItem( SID_BITMAP_LIST ) ) );
411 pFillAttrLB
->SelectEntry( aString
);
413 // Pruefen, ob Eintrag nicht in der Liste ist
414 if( pFillAttrLB
->GetSelectEntry() != aString
)
416 USHORT nCount
= pFillAttrLB
->GetEntryCount();
420 //Letzter Eintrag wird auf temporaeren Eintrag geprueft
421 aTmpStr
= pFillAttrLB
->GetEntry( nCount
- 1 );
422 if( aTmpStr
.GetChar(0) == TMP_STR_BEGIN
&&
423 aTmpStr
.GetChar(aTmpStr
.Len()-1) == TMP_STR_END
)
425 pFillAttrLB
->RemoveEntry( nCount
- 1 );
428 aTmpStr
= TMP_STR_BEGIN
;
430 aTmpStr
+= TMP_STR_END
;
432 XBitmapEntry
* pEntry
= new XBitmapEntry( pBitmapItem
->GetBitmapValue(), aTmpStr
);
433 XBitmapList
aBitmapList( String::CreateFromAscii("TmpList") );
434 aBitmapList
.Insert( pEntry
);
435 aBitmapList
.SetDirty( FALSE
);
436 //Bitmap* pBmp = aBitmapList.GetBitmap( 0 );
437 //( (ListBox*)pFillAttrLB )->InsertEntry( pEntry->GetName(), *pBmp );
438 pFillAttrLB
->Fill( &aBitmapList
);
439 pFillAttrLB
->SelectEntryPos( pFillAttrLB
->GetEntryCount() - 1 );
440 aBitmapList
.Remove( 0 );
446 pFillAttrLB
->SetNoSelection();
451 DBG_ERROR( "Nicht unterstuetzter Flaechentyp" );
456 if( pState
&& pStyleItem
)
458 XFillStyle eXFS
= (XFillStyle
) pStyleItem
->GetValue();
460 // Die Listen haben sich geaendert ?
461 if( pState
->ISA( SvxColorTableItem
) &&
462 eXFS
== XFILL_SOLID
)
464 ::Color
aTmpColor( pFillAttrLB
->GetSelectEntryColor() );
465 pFillAttrLB
->Clear();
466 pFillAttrLB
->Fill( ( (SvxColorTableItem
*)pState
)->GetColorTable() );
467 pFillAttrLB
->SelectEntry( aTmpColor
);
469 if( pState
->ISA( SvxGradientListItem
) &&
470 eXFS
== XFILL_GRADIENT
)
472 String
aString( pFillAttrLB
->GetSelectEntry() );
473 pFillAttrLB
->Clear();
474 pFillAttrLB
->Fill( ( (SvxGradientListItem
*)pState
)->GetGradientList() );
475 pFillAttrLB
->SelectEntry( aString
);
477 if( pState
->ISA( SvxHatchListItem
) &&
478 eXFS
== XFILL_HATCH
)
480 String
aString( pFillAttrLB
->GetSelectEntry() );
481 pFillAttrLB
->Clear();
482 pFillAttrLB
->Fill( ( (SvxHatchListItem
*)pState
)->GetHatchList() );
483 pFillAttrLB
->SelectEntry( aString
);
485 if( pState
->ISA( SvxBitmapListItem
) &&
486 eXFS
== XFILL_BITMAP
)
488 String
aString( pFillAttrLB
->GetSelectEntry() );
489 pFillAttrLB
->Clear();
490 pFillAttrLB
->Fill( ( (SvxBitmapListItem
*)pState
)->GetBitmapList() );
491 pFillAttrLB
->SelectEntry( aString
);
496 //========================================================================
498 Window
* SvxFillToolBoxControl::CreateItemWindow( Window
*pParent
)
500 if ( GetSlotId() == SID_ATTR_FILL_STYLE
)
502 pFillControl
= new FillControl( pParent
);
503 // Damit dem FillControl das SvxFillToolBoxControl bekannt ist
504 // (und um kompatibel zu bleiben)
505 pFillControl
->SetData( this );
507 pFillAttrLB
= (SvxFillAttrBox
*)pFillControl
->pLbFillAttr
;
508 pFillTypeLB
= (SvxFillTypeBox
*)pFillControl
->pLbFillType
;
510 pFillAttrLB
->SetUniqueId( HID_FILL_ATTR_LISTBOX
);
511 pFillTypeLB
->SetUniqueId( HID_FILL_TYPE_LISTBOX
);
518 /*************************************************************************
522 \************************************************************************/
524 FillControl::FillControl( Window
* pParent
, WinBits nStyle
) :
525 Window( pParent
, nStyle
| WB_DIALOGCONTROL
),
526 pLbFillType(new SvxFillTypeBox( this )),
527 aLogicalFillSize(40,80),
528 aLogicalAttrSize(50,80)
530 pLbFillAttr
= new SvxFillAttrBox( this );
531 Size
aTypeSize(LogicToPixel(aLogicalFillSize
, MAP_APPFONT
));
532 Size
aAttrSize(LogicToPixel(aLogicalAttrSize
, MAP_APPFONT
));
533 pLbFillType
->SetSizePixel(aTypeSize
);
534 pLbFillAttr
->SetSizePixel(aAttrSize
);
535 //to get the base height
536 aTypeSize
= pLbFillType
->GetSizePixel();
537 aAttrSize
= pLbFillAttr
->GetSizePixel();
538 Point aAttrPnt
= pLbFillAttr
->GetPosPixel();
540 Size( aAttrPnt
.X() + aAttrSize
.Width(),
541 Max( aAttrSize
.Height(), aTypeSize
.Height() ) ) );
543 pLbFillType
->SetSelectHdl( LINK( this, FillControl
, SelectFillTypeHdl
) );
544 pLbFillAttr
->SetSelectHdl( LINK( this, FillControl
, SelectFillAttrHdl
) );
546 aDelayTimer
.SetTimeout( DELAY_TIMEOUT
);
547 aDelayTimer
.SetTimeoutHdl( LINK( this, FillControl
, DelayHdl
) );
551 //------------------------------------------------------------------------
553 FillControl::~FillControl()
559 //------------------------------------------------------------------------
561 IMPL_LINK_INLINE_START( FillControl
, DelayHdl
, Timer
*, EMPTYARG
)
563 SelectFillTypeHdl( NULL
);
564 ( (SvxFillToolBoxControl
*)GetData() )->updateStatus( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:FillStyle" )));
565 // ( (SvxFillToolBoxControl*)GetData() )->GetBindings().Invalidate( SID_ATTR_FILL_STYLE );
568 IMPL_LINK_INLINE_END( FillControl
, DelayHdl
, Timer
*, pTimer
)
570 //------------------------------------------------------------------------
572 IMPL_LINK( FillControl
, SelectFillTypeHdl
, ListBox
*, pBox
)
574 XFillStyle eXFS
= (XFillStyle
)pLbFillType
->GetSelectEntryPos();
576 // Spaeter sollte eine Optimierung derart erfolgen, dass die
577 // Listen, bzw. Tables nur dann geloescht und wieder aufgebaut
578 // werden, wenn sich die Listen, bzw. Tables tatsaechlich geaendert
579 // haben (in den LBs natuerlich).
581 if ( ( pBox
&& !pBox
->IsTravelSelect() ) || !pBox
)
583 // Damit wir in folgendem Fall einen Status anzeigen koennen:
584 // Ein Typ wurde ausgewaehlt aber kein Attribut.
585 // Die Selektion hat genau die gleichen Attribute wie die vorherige.
586 // SvxFillToolBoxControl* pControlerItem = (SvxFillToolBoxControl*)GetData();
587 // if( pControlerItem )
588 // pControlerItem->ClearCache();
590 pLbFillAttr
->Clear();
591 SfxObjectShell
* pSh
= SfxObjectShell::Current();
597 pLbFillType
->Selected();
598 SelectFillAttrHdl( pBox
);
599 pLbFillAttr
->Disable();
605 if ( pSh
&& pSh
->GetItem( SID_COLOR_TABLE
) )
607 SvxColorTableItem
aItem( *(const SvxColorTableItem
*)(
608 pSh
->GetItem( SID_COLOR_TABLE
) ) );
609 pLbFillAttr
->Enable();
610 pLbFillAttr
->Fill( aItem
.GetColorTable() );
613 pLbFillAttr
->Disable();
619 if ( pSh
&& pSh
->GetItem( SID_GRADIENT_LIST
) )
621 SvxGradientListItem
aItem( *(const SvxGradientListItem
*)(
622 pSh
->GetItem( SID_GRADIENT_LIST
) ) );
623 pLbFillAttr
->Enable();
624 pLbFillAttr
->Fill( aItem
.GetGradientList() );
627 pLbFillAttr
->Disable();
633 if ( pSh
&& pSh
->GetItem( SID_HATCH_LIST
) )
635 SvxHatchListItem
aItem( *(const SvxHatchListItem
*)(
636 pSh
->GetItem( SID_HATCH_LIST
) ) );
637 pLbFillAttr
->Enable();
638 pLbFillAttr
->Fill( aItem
.GetHatchList() );
641 pLbFillAttr
->Disable();
647 if ( pSh
&& pSh
->GetItem( SID_BITMAP_LIST
) )
649 SvxBitmapListItem
aItem( *(const SvxBitmapListItem
*)(
650 pSh
->GetItem( SID_BITMAP_LIST
) ) );
651 pLbFillAttr
->Enable();
652 pLbFillAttr
->Fill( aItem
.GetBitmapList() );
655 pLbFillAttr
->Disable();
660 if( eXFS
!= XFILL_NONE
) // Wurde schon erledigt
663 pLbFillType
->Selected();
666 if ( pBox
&& pLbFillType
->IsRelease() )
668 SfxViewShell
* pViewShell
= SfxViewShell::Current();
669 if( pViewShell
&& pViewShell
->GetWindow() )
670 pViewShell
->GetWindow()->GrabFocus();
677 //------------------------------------------------------------------------
679 IMPL_LINK( FillControl
, SelectFillAttrHdl
, ListBox
*, pBox
)
681 XFillStyle eXFS
= (XFillStyle
)pLbFillType
->GetSelectEntryPos();
682 XFillStyleItem
aXFillStyleItem( eXFS
);
683 BOOL bAction
= pBox
&& !pLbFillAttr
->IsTravelSelect();
685 SfxObjectShell
* pSh
= SfxObjectShell::Current();
689 Sequence
< PropertyValue
> aArgs( 1 );
691 // First set the style
692 aArgs
[0].Name
= ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "FillStyle" ));
693 aXFillStyleItem
.QueryValue( a
);
695 ( (SvxFillToolBoxControl
*)GetData() )->IgnoreStatusUpdate( TRUE
);
696 ((SvxFillToolBoxControl
*)GetData())->Dispatch(
697 ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:FillStyle" )), aArgs
);
698 ( (SvxFillToolBoxControl
*)GetData() )->IgnoreStatusUpdate( FALSE
);
710 //Eintrag wird auf temporaere Farbe geprueft
711 String aTmpStr
= pLbFillAttr
->GetSelectEntry();
712 if( aTmpStr
.GetChar(0) == TMP_STR_BEGIN
&& aTmpStr
.GetChar(aTmpStr
.Len()-1) == TMP_STR_END
)
714 aTmpStr
.Erase( aTmpStr
.Len()-1, 1 );
715 aTmpStr
.Erase( 0, 1 );
718 XFillColorItem
aXFillColorItem( aTmpStr
, pLbFillAttr
->GetSelectEntryColor() );
720 aArgs
[0].Name
= ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "FillColor" ));
721 aXFillColorItem
.QueryValue( a
);
723 ((SvxFillToolBoxControl
*)GetData())->Dispatch( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:FillColor" )),
729 USHORT nPos
= pLbFillAttr
->GetSelectEntryPos();
731 if ( nPos
!= LISTBOX_ENTRY_NOTFOUND
&& pSh
&& pSh
->GetItem( SID_GRADIENT_LIST
) )
733 SvxGradientListItem
aItem(
734 *(const SvxGradientListItem
*)( pSh
->GetItem( SID_GRADIENT_LIST
) ) );
736 if ( nPos
< aItem
.GetGradientList()->Count() ) // kein temp. Eintrag ?
738 XGradient aGradient
= aItem
.GetGradientList()->GetGradient( nPos
)->GetGradient();
739 XFillGradientItem
aXFillGradientItem( pLbFillAttr
->GetSelectEntry(), aGradient
);
741 aArgs
[0].Name
= ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "FillGradient" ));
742 aXFillGradientItem
.QueryValue( a
);
744 ((SvxFillToolBoxControl
*)GetData())->Dispatch( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:FillGradient" )),
753 USHORT nPos
= pLbFillAttr
->GetSelectEntryPos();
755 if ( nPos
!= LISTBOX_ENTRY_NOTFOUND
&& pSh
&& pSh
->GetItem( SID_HATCH_LIST
) )
757 SvxHatchListItem
aItem( *(const SvxHatchListItem
*)( pSh
->GetItem( SID_HATCH_LIST
) ) );
759 if ( nPos
< aItem
.GetHatchList()->Count() ) // kein temp. Eintrag ?
761 XHatch aHatch
= aItem
.GetHatchList()->GetHatch( nPos
)->GetHatch();
762 XFillHatchItem
aXFillHatchItem( pLbFillAttr
->GetSelectEntry(), aHatch
);
764 aArgs
[0].Name
= ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "FillHatch" ));
765 aXFillHatchItem
.QueryValue( a
);
767 ((SvxFillToolBoxControl
*)GetData())->Dispatch( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:FillHatch" )),
776 USHORT nPos
= pLbFillAttr
->GetSelectEntryPos();
778 if ( nPos
!= LISTBOX_ENTRY_NOTFOUND
&& pSh
&& pSh
->GetItem( SID_BITMAP_LIST
) )
780 SvxBitmapListItem
aItem(
781 *(const SvxBitmapListItem
*)( pSh
->GetItem( SID_BITMAP_LIST
) ) );
783 if ( nPos
< aItem
.GetBitmapList()->Count() ) // kein temp. Eintrag ?
785 XOBitmap aXOBitmap
= aItem
.GetBitmapList()->GetBitmap( nPos
)->GetXBitmap();
786 XFillBitmapItem
aXFillBitmapItem( pLbFillAttr
->GetSelectEntry(), aXOBitmap
);
788 aArgs
[0].Name
= ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "FillBitmap" ));
789 aXFillBitmapItem
.QueryValue( a
);
791 ((SvxFillToolBoxControl
*)GetData())->Dispatch( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:FillBitmap" )),
800 if ( pLbFillAttr
->IsRelease() && pBox
)
802 SfxViewShell
* pViewShell
= SfxViewShell::Current();
803 if( pViewShell
&& pViewShell
->GetWindow() )
805 pViewShell
->GetWindow()->GrabFocus();
813 //------------------------------------------------------------------------
815 void FillControl::Resize()
817 // Breite der beiden ListBoxen nicht 1/2 : 1/2, sondern 2/5 : 3/5
818 long nW
= GetOutputSizePixel().Width() / 5;
820 long nSep
= 0; // war vorher 4
822 pLbFillType
->SetSizePixel( Size( nW
* 2 - nSep
, nH
) );
823 pLbFillAttr
->SetPosSizePixel( Point( nW
* 2 + nSep
, 0 ), Size( nW
* 3 - nSep
, nH
) );
825 /* -----------------------------08.03.2002 15:04------------------------------
827 ---------------------------------------------------------------------------*/
829 void FillControl::DataChanged( const DataChangedEvent
& rDCEvt
)
831 if ( (rDCEvt
.GetType() == DATACHANGED_SETTINGS
) &&
832 (rDCEvt
.GetFlags() & SETTINGS_STYLE
) )
834 Size
aTypeSize(LogicToPixel(aLogicalFillSize
, MAP_APPFONT
));
835 Size
aAttrSize(LogicToPixel(aLogicalAttrSize
, MAP_APPFONT
));
836 pLbFillType
->SetSizePixel(aTypeSize
);
837 pLbFillAttr
->SetSizePixel(aAttrSize
);
838 //to get the base height
839 aTypeSize
= pLbFillType
->GetSizePixel();
840 aAttrSize
= pLbFillAttr
->GetSizePixel();
841 Point aAttrPnt
= pLbFillAttr
->GetPosPixel();
844 Size( aAttrPnt
.X() + aAttrSize
.Width(),
845 Max( aAttrSize
.Height(), aTypeSize
.Height() ) ) );
847 Window::DataChanged( rDCEvt
);