xref: /trunk/main/extensions/source/bibliography/toolbar.cxx (revision 1ecadb572e7010ff3b3382ad9bf179dbc6efadbb)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 // MARKER(update_precomp.py): autogen include statement, do not remove
29 #include "precompiled_extensions.hxx"
30 #include <comphelper/processfactory.hxx>
31 #include <osl/mutex.hxx>
32 #include <tools/urlobj.hxx>
33 #include <com/sun/star/frame/XDispatch.hpp>
34 #include <com/sun/star/frame/XDispatchProvider.hpp>
35 #include <com/sun/star/util/XURLTransformer.hpp>
36 #include <com/sun/star/frame/FrameSearchFlag.hpp>
37 #include <datman.hxx>
38 #include <tools/debug.hxx>
39 #ifndef _SVX_SVXIDS_HRC
40 #include <svx/svxids.hrc>
41 #endif
42 #include <svtools/miscopt.hxx>
43 #include <svtools/imgdef.hxx>
44 #include <vcl/svapp.hxx>
45 #include <vcl/mnemonic.hxx>
46 #include "bibbeam.hxx"
47 #include "toolbar.hrc"
48 #include "bibresid.hxx"
49 
50 #ifndef BIBTOOLS_HXX
51 #include "bibtools.hxx"
52 #endif
53 #include <vos/mutex.hxx>
54 
55 using namespace ::rtl;
56 using namespace ::com::sun::star;
57 using namespace ::com::sun::star::uno;
58 using namespace ::com::sun::star::beans;
59 #define C2U(cChar) OUString::createFromAscii(cChar)
60 
61 
62 // Konstanten -------------------------------------------------------------
63 
64 
65 BibToolBarListener::BibToolBarListener(BibToolBar *pTB,rtl::OUString aStr,sal_uInt16 nId):
66         nIndex(nId),
67         aCommand(aStr),
68         pToolBar(pTB)
69 {
70 }
71 
72 BibToolBarListener::~BibToolBarListener()
73 {
74 }
75 
76 void BibToolBarListener::statusChanged(const ::com::sun::star::frame::FeatureStateEvent& rEvt)throw( ::com::sun::star::uno::RuntimeException )
77 {
78     if(rEvt.FeatureURL.Complete == aCommand)
79     {
80         vos::OGuard aGuard(Application::GetSolarMutex());
81         pToolBar->EnableItem(nIndex,rEvt.IsEnabled);
82 
83         ::com::sun::star::uno::Any aState=rEvt.State;
84         if(aState.getValueType()==::getBooleanCppuType())
85         {
86             sal_Bool bChecked= *(sal_Bool*)aState.getValue();
87             pToolBar->CheckItem(nIndex, bChecked);
88         }
89 
90         /*
91         rtl::OUString FeatureDescriptor;
92         sal_Bool Requery;
93         ::com::sun::star::uno::Any State;*/
94     }
95 };
96 
97 rtl::OUString   BibToolBarListener::GetCommand()
98 {
99     return aCommand;
100 }
101 
102 BibTBListBoxListener::BibTBListBoxListener(BibToolBar *pTB,rtl::OUString aStr,sal_uInt16 nId):
103     BibToolBarListener(pTB,aStr,nId)
104 {
105 }
106 
107 BibTBListBoxListener::~BibTBListBoxListener()
108 {
109 }
110 
111 void BibTBListBoxListener::statusChanged(const ::com::sun::star::frame::FeatureStateEvent& rEvt)throw( ::com::sun::star::uno::RuntimeException )
112 {
113     if(rEvt.FeatureURL.Complete == GetCommand())
114     {
115         vos::OGuard aGuard(Application::GetSolarMutex());
116         pToolBar->EnableSourceList(rEvt.IsEnabled);
117 
118         Any aState = rEvt.State;
119         if(aState.getValueType() == ::getCppuType((Sequence<rtl::OUString>*)0))
120         {
121             pToolBar->UpdateSourceList(sal_False);
122             pToolBar->ClearSourceList();
123 
124             Sequence<rtl::OUString>* pStringSeq = (Sequence<rtl::OUString>*)aState.getValue();
125             const rtl::OUString* pStringArray = (const rtl::OUString*)pStringSeq->getConstArray();
126 
127             sal_uInt32 nCount = pStringSeq->getLength();
128             XubString aEntry;
129             for( sal_uInt32 i=0; i<nCount; i++ )
130             {
131                 aEntry = String(pStringArray[i]);
132                 pToolBar->InsertSourceEntry(aEntry);
133             }
134             pToolBar->UpdateSourceList(sal_True);
135         }
136 
137         XubString aStr = String(rEvt.FeatureDescriptor);
138         pToolBar->SelectSourceEntry(aStr);
139     }
140 };
141 
142 BibTBQueryMenuListener::BibTBQueryMenuListener(BibToolBar *pTB,rtl::OUString aStr,sal_uInt16 nId):
143     BibToolBarListener(pTB,aStr,nId)
144 {
145 }
146 
147 BibTBQueryMenuListener::~BibTBQueryMenuListener()
148 {
149 }
150 
151 void BibTBQueryMenuListener::statusChanged(const frame::FeatureStateEvent& rEvt)throw( uno::RuntimeException )
152 {
153     if(rEvt.FeatureURL.Complete == GetCommand())
154     {
155         vos::OGuard aGuard(Application::GetSolarMutex());
156         pToolBar->EnableSourceList(rEvt.IsEnabled);
157 
158         uno::Any aState=rEvt.State;
159         if(aState.getValueType()==::getCppuType((Sequence<rtl::OUString>*)0))
160         {
161             pToolBar->ClearFilterMenu();
162 
163             Sequence<rtl::OUString>* pStringSeq = (Sequence<rtl::OUString>*) aState.getValue();
164             const rtl::OUString* pStringArray = (const rtl::OUString*)pStringSeq->getConstArray();
165 
166             sal_uInt32 nCount = pStringSeq->getLength();
167             for( sal_uInt32 i=0; i<nCount; i++ )
168             {
169                 sal_uInt16 nID=pToolBar->InsertFilterItem(String(pStringArray[i]));
170                 if(pStringArray[i]==rEvt.FeatureDescriptor)
171                 {
172 //                  XubString aStr = rEvt.FeatureDescriptor;
173                     pToolBar->SelectFilterItem(nID);
174                 }
175             }
176         }
177     }
178 };
179 
180 BibTBEditListener::BibTBEditListener(BibToolBar *pTB,rtl::OUString aStr,sal_uInt16 nId):
181     BibToolBarListener(pTB,aStr,nId)
182 {
183 }
184 
185 BibTBEditListener::~BibTBEditListener()
186 {
187 }
188 
189 void BibTBEditListener::statusChanged(const frame::FeatureStateEvent& rEvt)throw( uno::RuntimeException )
190 {
191     if(rEvt.FeatureURL.Complete == GetCommand())
192     {
193         vos::OGuard aGuard(Application::GetSolarMutex());
194         pToolBar->EnableQuery(rEvt.IsEnabled);
195 
196         uno::Any aState=rEvt.State;
197         if(aState.getValueType()==::getCppuType((const OUString*)0))
198         {
199             String aStr = String(*(OUString*) aState.getValue());
200             pToolBar->SetQueryString(aStr);
201         }
202     }
203 }
204 
205 SV_IMPL_PTRARR( BibToolBarListenerArr, BibToolBarListenerPtr);
206 
207 BibToolBar::BibToolBar(Window* pParent, Link aLink, WinBits nStyle):
208     ToolBox(pParent,BibResId(RID_BIB_TOOLBAR)),
209     aImgLst(BibResId(  RID_TOOLBAR_IMGLIST     )),
210     aImgLstHC(BibResId(RID_TOOLBAR_IMGLIST_HC  )),
211     aBigImgLst(BibResId( RID_TOOLBAR_BIGIMGLIST )),
212     aBigImgLstHC(BibResId( RID_TOOLBAR_BIGIMGLIST_HC )),
213     aFtSource(this,WB_VCENTER),
214     aLBSource(this,WB_DROPDOWN),
215     aFtQuery(this,WB_VCENTER),
216     aEdQuery(this),
217     nMenuId(0),
218     nSelMenuItem(0),
219     aLayoutManager( aLink ),
220     nSymbolsSize( SFX_SYMBOLS_SIZE_SMALL ),
221     nOutStyle( 0 )
222 {
223     SvtMiscOptions aSvtMiscOptions;
224     nSymbolsSize = aSvtMiscOptions.GetCurrentSymbolsSize();
225     nOutStyle  = aSvtMiscOptions.GetToolboxStyle();
226 
227     ApplyImageList();
228     SetStyle(GetStyle()|nStyle);
229     SetOutStyle(TOOLBOX_STYLE_FLAT);
230     Size aSize=GetSizePixel();
231     Size a2Size(GetOutputSizePixel());
232     a2Size.Width()=100;
233     aLBSource.SetSizePixel(a2Size);
234     aLBSource.SetDropDownLineCount(9);
235     aLBSource.Show();
236     aLBSource.SetSelectHdl(LINK( this, BibToolBar, SelHdl));
237 
238     SvtMiscOptions().AddListenerLink( LINK( this, BibToolBar, OptionsChanged_Impl ) );
239     Application::AddEventListener( LINK( this, BibToolBar, SettingsChanged_Impl ) );
240 
241     aTimer.SetTimeoutHdl(LINK( this, BibToolBar, SendSelHdl));
242     aTimer.SetTimeout(400);
243 
244     SetDropdownClickHdl( LINK( this, BibToolBar, MenuHdl));
245 
246     aEdQuery.SetSizePixel(aLBSource.GetSizePixel());
247     aEdQuery.Show();
248 
249     XubString aStr=GetItemText(TBC_FT_SOURCE);
250     Rectangle aRect=GetItemRect(TBC_FT_SOURCE);
251     aFtSource.SetText(aStr);
252     aFtSource.SetSizePixel(aRect.GetSize());
253     aFtSource.SetBackground(Wallpaper( COL_TRANSPARENT ));
254 
255     aStr=GetItemText(TBC_FT_QUERY);
256     aRect=GetItemRect(TBC_FT_QUERY);
257     aFtQuery.SetText(aStr);
258     aFtQuery.SetSizePixel(aRect.GetSize());
259     aFtQuery.SetBackground(Wallpaper( COL_TRANSPARENT ));
260 
261     SetItemWindow(TBC_FT_SOURCE,&aFtSource);
262     SetItemWindow(TBC_LB_SOURCE,&aLBSource);
263     SetItemWindow(TBC_FT_QUERY ,&aFtQuery);
264     SetItemWindow(TBC_ED_QUERY ,&aEdQuery);
265 
266     ::bib::AddToTaskPaneList( this );
267 }
268 
269 BibToolBar::~BibToolBar()
270 {
271     SvtMiscOptions().RemoveListenerLink( LINK( this, BibToolBar, OptionsChanged_Impl ) );
272     Application::RemoveEventListener( LINK( this, BibToolBar, SettingsChanged_Impl ) );
273     ::bib::RemoveFromTaskPaneList( this );
274 }
275 
276 void BibToolBar::InitListener()
277 {
278     sal_uInt16  nCount=GetItemCount();
279 
280     uno::Reference< lang::XMultiServiceFactory >  xMgr = comphelper::getProcessServiceFactory();
281     uno::Reference< frame::XDispatch >  xDisp(xController,UNO_QUERY);
282 
283     uno::Reference< util::XURLTransformer >  xTrans ( xMgr->createInstance( C2U("com.sun.star.util.URLTransformer") ), UNO_QUERY );
284     if( xTrans.is() )
285     {
286         util::URL aQueryURL;
287         aQueryURL.Complete = C2U(".uno:Bib/MenuFilter");
288         xTrans->parseStrict( aQueryURL);
289         BibToolBarListener* pQuery=new BibTBQueryMenuListener(this,aQueryURL.Complete,TBC_BT_AUTOFILTER);
290         xDisp->addStatusListener(uno::Reference< frame::XStatusListener > (pQuery),aQueryURL);
291 
292         for(sal_uInt16 nPos=0;nPos<nCount;nPos++)
293         {
294             sal_uInt16 nId=GetItemId(nPos);
295             if(!nId || nId==TBC_FT_SOURCE || nId==TBC_FT_QUERY)
296                 continue;
297 
298             util::URL aURL;
299             aURL.Complete = GetItemCommand(nId);
300             if(!aURL.Complete.getLength())
301                 continue;
302 
303             xTrans->parseStrict( aURL );
304 
305             BibToolBarListener* pListener=NULL;
306             if(nId==TBC_LB_SOURCE)
307             {
308                 pListener=new BibTBListBoxListener(this,aURL.Complete,nId);
309             }
310             else if(nId==TBC_ED_QUERY)
311             {
312                 pListener=new BibTBEditListener(this,aURL.Complete,nId);
313             }
314             else
315             {
316                 pListener=new BibToolBarListener(this,aURL.Complete,nId);
317             }
318 
319             BibToolBarListenerPtr pxInsert = new Reference<frame::XStatusListener>;
320             (*pxInsert) = pListener;
321             aListenerArr.Insert( pxInsert, aListenerArr.Count() );
322             xDisp->addStatusListener(uno::Reference< frame::XStatusListener > (pListener),aURL);
323         }
324     }
325 }
326 
327 void BibToolBar::SetXController(const uno::Reference< frame::XController > & xCtr)
328 {
329     xController=xCtr;
330     InitListener();
331 
332 }
333 
334 void BibToolBar::Select()
335 {
336     sal_uInt16  nId=GetCurItemId();
337 
338     if(nId!=TBC_BT_AUTOFILTER)
339     {
340         SendDispatch(nId,Sequence<PropertyValue>() );
341     }
342     else
343     {
344         Sequence<PropertyValue> aPropVal(2);
345         PropertyValue* pPropertyVal = (PropertyValue*)aPropVal.getConstArray();
346         pPropertyVal[0].Name=C2U("QueryText");
347         rtl::OUString aSelection = aEdQuery.GetText();
348         pPropertyVal[0].Value <<= aSelection;
349 
350         pPropertyVal[1].Name=C2U("QueryField");
351         pPropertyVal[1].Value <<= aQueryField;
352         SendDispatch(nId,aPropVal);
353     }
354 }
355 
356 void BibToolBar::SendDispatch(sal_uInt16 nId, const Sequence< PropertyValue >& rArgs)
357 {
358     rtl::OUString aCommand = GetItemCommand(nId);
359 
360     uno::Reference< frame::XDispatchProvider >  xDSP( xController, UNO_QUERY );
361 
362     if( xDSP.is() && aCommand.getLength())
363     {
364         uno::Reference< lang::XMultiServiceFactory >  xMgr = comphelper::getProcessServiceFactory();
365 
366         uno::Reference< util::XURLTransformer >  xTrans ( xMgr->createInstance( C2U("com.sun.star.util.URLTransformer") ), UNO_QUERY );
367         if( xTrans.is() )
368         {
369             // Datei laden
370             util::URL aURL;
371             aURL.Complete = aCommand;
372 
373             xTrans->parseStrict( aURL );
374 
375             uno::Reference< frame::XDispatch >  xDisp = xDSP->queryDispatch( aURL, rtl::OUString(), frame::FrameSearchFlag::SELF );
376 
377             if ( xDisp.is() )
378                     xDisp->dispatch( aURL, rArgs);
379         }
380     }
381 
382 }
383 
384 void BibToolBar::Click()
385 {
386     sal_uInt16  nId=GetCurItemId();
387 
388     if(nId == TBC_BT_COL_ASSIGN )
389     {
390         if(pDatMan)
391             pDatMan->CreateMappingDialog(GetParent());
392         CheckItem( nId, sal_False );
393     }
394     else if(nId == TBC_BT_CHANGESOURCE)
395     {
396         if(pDatMan)
397         {
398             OUString sNew = pDatMan->CreateDBChangeDialog(GetParent());
399             if(sNew.getLength())
400                 pDatMan->setActiveDataSource(sNew);
401         }
402         CheckItem( nId, sal_False );
403     }
404 }
405 
406 void BibToolBar::ClearFilterMenu()
407 {
408     aPopupMenu.Clear();
409     nMenuId=0;
410 }
411 sal_uInt16 BibToolBar::InsertFilterItem(const XubString& aMenuEntry)
412 {
413     nMenuId++;
414     aPopupMenu.InsertItem(nMenuId,aMenuEntry);
415 
416     return nMenuId;
417 }
418 void BibToolBar::SelectFilterItem(sal_uInt16    nId)
419 {
420     aPopupMenu.CheckItem(nId);
421     nSelMenuItem=nId;
422     aQueryField = MnemonicGenerator::EraseAllMnemonicChars( aPopupMenu.GetItemText(nId) );
423 }
424 
425 void BibToolBar::EnableSourceList(sal_Bool bFlag)
426 {
427     aFtSource.Enable(bFlag);
428     aLBSource.Enable(bFlag);
429 }
430 
431 void BibToolBar::ClearSourceList()
432 {
433     aLBSource.Clear();
434 }
435 
436 void BibToolBar::UpdateSourceList(sal_Bool bFlag)
437 {
438     aLBSource.SetUpdateMode(bFlag);
439 }
440 
441 void BibToolBar::InsertSourceEntry(const XubString& aEntry, sal_uInt16 nPos)
442 {
443     aLBSource.InsertEntry(aEntry, nPos);
444 }
445 
446 void BibToolBar::SelectSourceEntry(const XubString& aStr)
447 {
448     aLBSource.SelectEntry(aStr);
449 }
450 
451 void BibToolBar::EnableQuery(sal_Bool bFlag)
452 {
453     aFtQuery.Enable(bFlag);
454     aEdQuery.Enable(bFlag);
455 }
456 
457 void BibToolBar::SetQueryString(const XubString& aStr)
458 {
459     aEdQuery.SetText(aStr);
460 }
461 
462 
463 long BibToolBar::PreNotify( NotifyEvent& rNEvt )
464 {
465     long nResult=sal_True;
466 
467     sal_uInt16 nSwitch=rNEvt.GetType();
468     if(aEdQuery.HasFocus() && nSwitch==EVENT_KEYINPUT)// || nSwitch==EVENT_KEYUP)
469     {
470         const KeyCode& aKeyCode=rNEvt.GetKeyEvent()->GetKeyCode();
471         sal_uInt16 nKey = aKeyCode.GetCode();
472         if(nKey == KEY_RETURN)
473         {
474             Sequence<PropertyValue> aPropVal(2);
475             PropertyValue* pPropertyVal = (PropertyValue*)aPropVal.getConstArray();
476             pPropertyVal[0].Name = C2U("QueryText");
477             rtl::OUString aSelection = aEdQuery.GetText();
478             pPropertyVal[0].Value <<= aSelection;
479             pPropertyVal[1].Name=C2U("QueryField");
480             pPropertyVal[1].Value <<= aQueryField;
481             SendDispatch(TBC_BT_AUTOFILTER,aPropVal);
482             return nResult;
483         }
484 
485     }
486 
487     nResult=ToolBox::PreNotify(rNEvt);
488 
489     return nResult;
490 }
491 
492 IMPL_LINK( BibToolBar, SelHdl, ListBox*, /*pLb*/ )
493 {
494     aTimer.Start();
495     return 0;
496 }
497 
498 IMPL_LINK( BibToolBar, SendSelHdl, Timer*,/*pT*/)
499 {
500     Sequence<PropertyValue> aPropVal(1);
501     PropertyValue* pPropertyVal = (PropertyValue*)aPropVal.getConstArray();
502     pPropertyVal[0].Name = C2U("DataSourceName");
503     String aEntry( MnemonicGenerator::EraseAllMnemonicChars( aLBSource.GetSelectEntry() ) );
504     rtl::OUString aSelection = aEntry;
505     pPropertyVal[0].Value <<= aSelection;
506     SendDispatch(TBC_LB_SOURCE,aPropVal);
507 
508     return 0;
509 }
510 //-----------------------------------------------------------------------------
511 IMPL_LINK( BibToolBar, MenuHdl, ToolBox*, /*pToolbox*/)
512 {
513     sal_uInt16  nId=GetCurItemId();
514     if(nId==TBC_BT_AUTOFILTER)
515     {
516         EndSelection();     // vor SetDropMode (SetDropMode ruft SetItemImage)
517 
518         SetItemDown(TBC_BT_AUTOFILTER,sal_True);
519         nId = aPopupMenu.Execute(this, GetItemRect(TBC_BT_AUTOFILTER));
520 
521 
522         if(nId>0)
523         {
524             aPopupMenu.CheckItem(nSelMenuItem,sal_False);
525             aPopupMenu.CheckItem(nId);
526             nSelMenuItem=nId;
527             aQueryField = MnemonicGenerator::EraseAllMnemonicChars( aPopupMenu.GetItemText(nId) );
528             Sequence<PropertyValue> aPropVal(2);
529             PropertyValue* pPropertyVal = (PropertyValue*)aPropVal.getConstArray();
530             pPropertyVal[0].Name = C2U("QueryText");
531             rtl::OUString aSelection = aEdQuery.GetText();
532             pPropertyVal[0].Value <<= aSelection;
533             pPropertyVal[1].Name=C2U("QueryField");
534             pPropertyVal[1].Value <<= aQueryField;
535             SendDispatch(TBC_BT_AUTOFILTER,aPropVal);
536         }
537 
538         Point aPoint;
539         MouseEvent aLeave( aPoint, 0, MOUSE_LEAVEWINDOW | MOUSE_SYNTHETIC );
540         MouseMove( aLeave );
541         SetItemDown(TBC_BT_AUTOFILTER,sal_False);
542 
543 
544     }
545     return 0;
546 }
547 //-----------------------------------------------------------------------------
548 void    BibToolBar::statusChanged(const frame::FeatureStateEvent& rEvent)
549                                             throw( uno::RuntimeException )
550 {
551     for(sal_uInt16 i = 0; i < aListenerArr.Count(); i++)
552     {
553         BibToolBarListenerPtr pListener = aListenerArr.GetObject(i);
554         (*pListener)->statusChanged(rEvent);
555     }
556 }
557 /* -----------------------------07.05.2002 15:08------------------------------
558 
559  ---------------------------------------------------------------------------*/
560 void BibToolBar::DataChanged( const DataChangedEvent& rDCEvt )
561 {
562     if ( (rDCEvt.GetType() == DATACHANGED_SETTINGS) &&
563          (rDCEvt.GetFlags() & SETTINGS_STYLE) )
564             ApplyImageList();
565     ToolBox::DataChanged( rDCEvt );
566 }
567 /* -----------------------------07.05.2002 15:09------------------------------
568  ---------------------------------------------------------------------------*/
569 
570 IMPL_LINK( BibToolBar, OptionsChanged_Impl, void*, /*pVoid*/ )
571 {
572     sal_Bool bRebuildToolBar = sal_False;
573     sal_Int16 eSymbolsSize = SvtMiscOptions().GetCurrentSymbolsSize();
574     if ( nSymbolsSize != eSymbolsSize )
575     {
576         nSymbolsSize = eSymbolsSize;
577         bRebuildToolBar = sal_True;
578     }
579     else if ( nOutStyle != SvtMiscOptions().GetToolboxStyle() )
580     {
581         nOutStyle = SvtMiscOptions().GetToolboxStyle();
582         SetOutStyle( nOutStyle );
583         bRebuildToolBar = sal_True;
584     }
585 
586     if ( bRebuildToolBar )
587         RebuildToolbar();
588 
589     return 0L;
590 }
591 
592 //-----------------------------------------------------------------------------
593 
594 IMPL_LINK( BibToolBar, SettingsChanged_Impl, void*, /*pVoid*/ )
595 {
596     // Check if toolbar button size have changed and we have to use system settings
597     sal_Int16 eSymbolsSize = SvtMiscOptions().GetCurrentSymbolsSize();
598     if ( eSymbolsSize != nSymbolsSize )
599     {
600         nSymbolsSize = eSymbolsSize;
601         RebuildToolbar();
602     }
603 
604     return 0L;
605 }
606 
607 //-----------------------------------------------------------------------------
608 void BibToolBar::RebuildToolbar()
609 {
610     ApplyImageList();
611     // We have to call parent asynchronously as SetSize works also asynchronously!
612     Application::PostUserEvent( aLayoutManager, 0 );
613 }
614 
615 //-----------------------------------------------------------------------------
616 
617 void BibToolBar::ApplyImageList()
618 {
619     ImageList& rList = ( nSymbolsSize == SFX_SYMBOLS_SIZE_SMALL ) ?
620                        ( GetSettings().GetStyleSettings().GetHighContrastMode() ? aImgLstHC : aImgLst ) :
621                        ( GetSettings().GetStyleSettings().GetHighContrastMode() ? aBigImgLstHC : aBigImgLst );
622 
623     SetItemImage(TBC_BT_AUTOFILTER  , rList.GetImage(SID_FM_AUTOFILTER));
624     SetItemImage(TBC_BT_FILTERCRIT  , rList.GetImage(SID_FM_FILTERCRIT));
625     SetItemImage(TBC_BT_REMOVEFILTER, rList.GetImage(SID_FM_REMOVE_FILTER_SORT ));
626     AdjustToolBox();
627 }
628 
629 void BibToolBar::AdjustToolBox()
630 {
631     Size aOldSize = GetSizePixel();
632     Size aSize = CalcWindowSizePixel();
633     if ( !aSize.Width() )
634         aSize.Width() = aOldSize.Width();
635     else if ( !aSize.Height() )
636         aSize.Height() = aOldSize.Height();
637 
638     Size aTbSize = GetSizePixel();
639     if (
640         (aSize.Width() && aSize.Width() != aTbSize.Width()) ||
641         (aSize.Height() && aSize.Height() != aTbSize.Height())
642        )
643     {
644         SetPosSizePixel( GetPosPixel(), aSize );
645         Invalidate();
646     }
647 }
648