xref: /trunk/main/sfx2/source/toolbox/imgmgr.cxx (revision d119d52d)
1*d119d52dSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*d119d52dSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*d119d52dSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*d119d52dSAndrew Rist  * distributed with this work for additional information
6*d119d52dSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*d119d52dSAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*d119d52dSAndrew Rist  * "License"); you may not use this file except in compliance
9*d119d52dSAndrew Rist  * with the License.  You may obtain a copy of the License at
10*d119d52dSAndrew Rist  *
11*d119d52dSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*d119d52dSAndrew Rist  *
13*d119d52dSAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*d119d52dSAndrew Rist  * software distributed under the License is distributed on an
15*d119d52dSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*d119d52dSAndrew Rist  * KIND, either express or implied.  See the License for the
17*d119d52dSAndrew Rist  * specific language governing permissions and limitations
18*d119d52dSAndrew Rist  * under the License.
19*d119d52dSAndrew Rist  *
20*d119d52dSAndrew Rist  *************************************************************/
21*d119d52dSAndrew Rist 
22*d119d52dSAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_sfx2.hxx"
26cdf0e10cSrcweir 
27cdf0e10cSrcweir #include <stdio.h>
28cdf0e10cSrcweir #include <hash_map>
29cdf0e10cSrcweir 
30cdf0e10cSrcweir #include "sfx2/imgmgr.hxx"
31cdf0e10cSrcweir #include <sfx2/sfx.hrc>
32cdf0e10cSrcweir #include <sfx2/app.hxx>
33cdf0e10cSrcweir #include "sfx2/sfxresid.hxx"
34cdf0e10cSrcweir #include <sfx2/bindings.hxx>
35cdf0e10cSrcweir #include "statcach.hxx"
36cdf0e10cSrcweir #include <sfx2/module.hxx>
37cdf0e10cSrcweir #include <vcl/bitmap.hxx>
38cdf0e10cSrcweir #include <vcl/toolbox.hxx>
39cdf0e10cSrcweir 
40cdf0e10cSrcweir #include <tools/rcid.h>
41cdf0e10cSrcweir #include <tools/link.hxx>
42cdf0e10cSrcweir #include <svtools/miscopt.hxx>
43cdf0e10cSrcweir #include <vos/mutex.hxx>
44cdf0e10cSrcweir 
45cdf0e10cSrcweir #ifndef GCC
46cdf0e10cSrcweir #endif
47cdf0e10cSrcweir 
48cdf0e10cSrcweir #ifndef _UNOTOOLS_PROCESSFACTORY_HXX
49cdf0e10cSrcweir #include <comphelper/processfactory.hxx>
50cdf0e10cSrcweir #endif
51cdf0e10cSrcweir 
52cdf0e10cSrcweir const sal_uInt32 IMAGELIST_COUNT = 4; // small, small-hi, large, large-hi
53cdf0e10cSrcweir 
54cdf0e10cSrcweir struct ToolBoxInf_Impl
55cdf0e10cSrcweir {
56cdf0e10cSrcweir     ToolBox* pToolBox;
57cdf0e10cSrcweir     sal_uInt16   nFlags;
58cdf0e10cSrcweir };
59cdf0e10cSrcweir 
60cdf0e10cSrcweir class SfxImageManager_Impl
61cdf0e10cSrcweir {
62cdf0e10cSrcweir public:
63cdf0e10cSrcweir     sal_Int16                       m_nSymbolsSize;
64cdf0e10cSrcweir     SvtMiscOptions		            m_aOpt;
65cdf0e10cSrcweir     std::vector< ToolBoxInf_Impl* > m_aToolBoxes;
66cdf0e10cSrcweir     ImageList*                      m_pImageList[IMAGELIST_COUNT];
67cdf0e10cSrcweir     SfxModule*                      m_pModule;
68cdf0e10cSrcweir 
69cdf0e10cSrcweir     ImageList*              GetImageList( sal_Bool bBig, sal_Bool bHiContrast );
70cdf0e10cSrcweir     Image                   GetImage( sal_uInt16 nId, sal_Bool bBig, sal_Bool bHiContrast );
71cdf0e10cSrcweir     void                    SetSymbolsSize_Impl( sal_Int16 );
72cdf0e10cSrcweir 
73cdf0e10cSrcweir     DECL_LINK( OptionsChanged_Impl, void* );
74cdf0e10cSrcweir     DECL_LINK( SettingsChanged_Impl, void* );
75cdf0e10cSrcweir 
76cdf0e10cSrcweir 
77cdf0e10cSrcweir     SfxImageManager_Impl( SfxModule* pModule );
78cdf0e10cSrcweir 	~SfxImageManager_Impl();
79cdf0e10cSrcweir };
80cdf0e10cSrcweir 
81cdf0e10cSrcweir typedef std::hash_map< sal_Int64, sal_Int64 > SfxImageManagerMap;
82cdf0e10cSrcweir 
83cdf0e10cSrcweir // global image lists
84cdf0e10cSrcweir static SfxImageManager_Impl* pGlobalImageManager = 0;
85cdf0e10cSrcweir static SfxImageManagerMap    m_ImageManager_ImplMap;
86cdf0e10cSrcweir static SfxImageManagerMap    m_ImageManagerMap;
87cdf0e10cSrcweir static ImageList*            pImageListSmall=0;
88cdf0e10cSrcweir static ImageList*            pImageListBig=0;
89cdf0e10cSrcweir static ImageList*            pImageListHiSmall=0;
90cdf0e10cSrcweir static ImageList*            pImageListHiBig=0;
91cdf0e10cSrcweir 
GetImageManager(SfxModule * pModule)92cdf0e10cSrcweir static SfxImageManager_Impl* GetImageManager( SfxModule* pModule )
93cdf0e10cSrcweir {
94cdf0e10cSrcweir     ::vos::OGuard aGuard( Application::GetSolarMutex() );
95cdf0e10cSrcweir 
96cdf0e10cSrcweir     if ( pModule == 0 )
97cdf0e10cSrcweir     {
98cdf0e10cSrcweir         if ( !pGlobalImageManager )
99cdf0e10cSrcweir             pGlobalImageManager = new SfxImageManager_Impl( 0 );
100cdf0e10cSrcweir         return pGlobalImageManager;
101cdf0e10cSrcweir     }
102cdf0e10cSrcweir     else
103cdf0e10cSrcweir     {
104cdf0e10cSrcweir         SfxImageManager_Impl* pImpl( 0 );
105cdf0e10cSrcweir         SfxImageManagerMap::const_iterator pIter = m_ImageManager_ImplMap.find( sal::static_int_cast< sal_Int64>( reinterpret_cast< sal_IntPtr >( pModule )));
106cdf0e10cSrcweir         if ( pIter != m_ImageManager_ImplMap.end() )
107cdf0e10cSrcweir             pImpl = reinterpret_cast< SfxImageManager_Impl* >( sal::static_int_cast< sal_IntPtr >( pIter->second ));
108cdf0e10cSrcweir         else
109cdf0e10cSrcweir         {
110cdf0e10cSrcweir             pImpl = new SfxImageManager_Impl( pModule );
111cdf0e10cSrcweir             m_ImageManager_ImplMap.insert(
112cdf0e10cSrcweir                 SfxImageManagerMap::value_type(
113cdf0e10cSrcweir                     sal::static_int_cast< sal_Int64 >( reinterpret_cast< sal_IntPtr >( pModule )),
114cdf0e10cSrcweir                     sal::static_int_cast< sal_Int64 >( reinterpret_cast< sal_IntPtr >( pImpl )) ));
115cdf0e10cSrcweir         }
116cdf0e10cSrcweir         return pImpl;
117cdf0e10cSrcweir     }
118cdf0e10cSrcweir }
119cdf0e10cSrcweir 
120cdf0e10cSrcweir // Global image list
GetImageList(sal_Bool bBig,sal_Bool bHiContrast)121cdf0e10cSrcweir static ImageList* GetImageList( sal_Bool bBig, sal_Bool bHiContrast )
122cdf0e10cSrcweir {
123cdf0e10cSrcweir     ::vos::OGuard aGuard( Application::GetSolarMutex() );
124cdf0e10cSrcweir 
125cdf0e10cSrcweir     // Has to be changed if we know how the IDs are named!!!
126cdf0e10cSrcweir     ImageList*& rpList = bBig ? ( bHiContrast ? pImageListHiBig : pImageListBig ) :
127cdf0e10cSrcweir                                 ( bHiContrast ? pImageListHiSmall : pImageListSmall );
128cdf0e10cSrcweir     if ( !rpList )
129cdf0e10cSrcweir     {
130cdf0e10cSrcweir         ResMgr *pResMgr = SfxApplication::GetOrCreate()->GetOffResManager_Impl();
131cdf0e10cSrcweir 
132cdf0e10cSrcweir         ResId aResId( bBig ? ( bHiContrast ? RID_DEFAULTIMAGELIST_LCH : RID_DEFAULTIMAGELIST_LC ) :
133cdf0e10cSrcweir                              ( bHiContrast ? RID_DEFAULTIMAGELIST_SCH : RID_DEFAULTIMAGELIST_SC ), *pResMgr);
134cdf0e10cSrcweir 
135cdf0e10cSrcweir         aResId.SetRT( RSC_IMAGELIST );
136cdf0e10cSrcweir 
137cdf0e10cSrcweir         DBG_ASSERT( pResMgr->IsAvailable(aResId), "No default ImageList!" );
138cdf0e10cSrcweir 
139cdf0e10cSrcweir         if ( pResMgr->IsAvailable(aResId) )
140cdf0e10cSrcweir             rpList = new ImageList( aResId );
141cdf0e10cSrcweir         else
142cdf0e10cSrcweir             rpList = new ImageList();
143cdf0e10cSrcweir 	}
144cdf0e10cSrcweir 
145cdf0e10cSrcweir     return rpList;
146cdf0e10cSrcweir }
147cdf0e10cSrcweir 
impl_convertBools(sal_Bool bLarge,sal_Bool bHiContrast)148cdf0e10cSrcweir static sal_Int16 impl_convertBools( sal_Bool bLarge, sal_Bool bHiContrast )
149cdf0e10cSrcweir {
150cdf0e10cSrcweir     sal_Int16 nIndex( 0 );
151cdf0e10cSrcweir     if ( bLarge  )
152cdf0e10cSrcweir         nIndex += 1;
153cdf0e10cSrcweir     if ( bHiContrast )
154cdf0e10cSrcweir         nIndex += 2;
155cdf0e10cSrcweir     return nIndex;
156cdf0e10cSrcweir }
157cdf0e10cSrcweir 
158cdf0e10cSrcweir //=========================================================================
159cdf0e10cSrcweir 
SfxImageManager_Impl(SfxModule * pModule)160cdf0e10cSrcweir SfxImageManager_Impl::SfxImageManager_Impl( SfxModule* pModule ) :
161cdf0e10cSrcweir     m_nSymbolsSize( SvtMiscOptions().GetCurrentSymbolsSize() ),
162cdf0e10cSrcweir     m_pModule( pModule )
163cdf0e10cSrcweir {
164cdf0e10cSrcweir     for ( sal_uInt32 i = 0; i < IMAGELIST_COUNT; i++ )
165cdf0e10cSrcweir         m_pImageList[i] = 0;
166cdf0e10cSrcweir 
167cdf0e10cSrcweir     m_aOpt.AddListenerLink( LINK( this, SfxImageManager_Impl, OptionsChanged_Impl ) );
168cdf0e10cSrcweir     Application::AddEventListener( LINK( this, SfxImageManager_Impl, SettingsChanged_Impl ) );
169cdf0e10cSrcweir }
170cdf0e10cSrcweir 
171cdf0e10cSrcweir //-------------------------------------------------------------------------
172cdf0e10cSrcweir 
~SfxImageManager_Impl()173cdf0e10cSrcweir SfxImageManager_Impl::~SfxImageManager_Impl()
174cdf0e10cSrcweir {
175cdf0e10cSrcweir     m_aOpt.RemoveListenerLink( LINK( this, SfxImageManager_Impl, OptionsChanged_Impl ) );
176cdf0e10cSrcweir     Application::RemoveEventListener( LINK( this, SfxImageManager_Impl, SettingsChanged_Impl ) );
177cdf0e10cSrcweir 
178cdf0e10cSrcweir     for ( sal_uInt32 i = 0; i < m_aToolBoxes.size(); i++ )
179cdf0e10cSrcweir         delete m_aToolBoxes[i];
180cdf0e10cSrcweir }
181cdf0e10cSrcweir 
182cdf0e10cSrcweir //-------------------------------------------------------------------------
183cdf0e10cSrcweir 
GetImageList(sal_Bool bBig,sal_Bool bHiContrast)184cdf0e10cSrcweir ImageList* SfxImageManager_Impl::GetImageList( sal_Bool bBig, sal_Bool bHiContrast )
185cdf0e10cSrcweir {
186cdf0e10cSrcweir     sal_Int32 nIndex = impl_convertBools( bBig, bHiContrast );
187cdf0e10cSrcweir     if ( !m_pImageList[nIndex] )
188cdf0e10cSrcweir     {
189cdf0e10cSrcweir         if ( !m_pModule )
190cdf0e10cSrcweir             m_pImageList[nIndex] = ::GetImageList( bBig, bHiContrast );
191cdf0e10cSrcweir         else
192cdf0e10cSrcweir             m_pImageList[nIndex] = m_pModule->GetImageList_Impl( bBig, bHiContrast );
193cdf0e10cSrcweir     }
194cdf0e10cSrcweir 
195cdf0e10cSrcweir     return m_pImageList[nIndex];
196cdf0e10cSrcweir }
197cdf0e10cSrcweir 
198cdf0e10cSrcweir //-------------------------------------------------------------------------
199cdf0e10cSrcweir 
GetImage(sal_uInt16 nId,sal_Bool bBig,sal_Bool bHiContrast)200cdf0e10cSrcweir Image SfxImageManager_Impl::GetImage( sal_uInt16 nId, sal_Bool bBig, sal_Bool bHiContrast )
201cdf0e10cSrcweir {
202cdf0e10cSrcweir 	ImageList* pImageList = GetImageList( bBig, bHiContrast );
203cdf0e10cSrcweir     if ( pImageList )
204cdf0e10cSrcweir 	    return pImageList->GetImage( nId );
205cdf0e10cSrcweir     return Image();
206cdf0e10cSrcweir }
207cdf0e10cSrcweir 
208cdf0e10cSrcweir //-------------------------------------------------------------------------
209cdf0e10cSrcweir 
SetSymbolsSize_Impl(sal_Int16 nNewSymbolsSize)210cdf0e10cSrcweir void SfxImageManager_Impl::SetSymbolsSize_Impl( sal_Int16 nNewSymbolsSize )
211cdf0e10cSrcweir {
212cdf0e10cSrcweir     ::vos::OGuard aGuard( Application::GetSolarMutex() );
213cdf0e10cSrcweir 
214cdf0e10cSrcweir     if ( nNewSymbolsSize != m_nSymbolsSize )
215cdf0e10cSrcweir 	{
216cdf0e10cSrcweir         m_nSymbolsSize = nNewSymbolsSize;
217cdf0e10cSrcweir         sal_Bool bLarge( m_nSymbolsSize == SFX_SYMBOLS_SIZE_LARGE );
218cdf0e10cSrcweir 
219cdf0e10cSrcweir         for ( sal_uInt32 n=0; n < m_aToolBoxes.size(); n++ )
220cdf0e10cSrcweir         {
221cdf0e10cSrcweir             ToolBoxInf_Impl *pInf = m_aToolBoxes[n];
222cdf0e10cSrcweir             if ( pInf->nFlags & SFX_TOOLBOX_CHANGESYMBOLSET )
223cdf0e10cSrcweir             {
224cdf0e10cSrcweir                 ToolBox *pBox       = pInf->pToolBox;
225cdf0e10cSrcweir                 sal_Bool    bHiContrast = pBox->GetSettings().GetStyleSettings().GetHighContrastMode();
226cdf0e10cSrcweir                 sal_uInt16  nCount      = pBox->GetItemCount();
227cdf0e10cSrcweir                 for ( sal_uInt16 nPos=0; nPos<nCount; nPos++ )
228cdf0e10cSrcweir                 {
229cdf0e10cSrcweir                     sal_uInt16 nId = pBox->GetItemId( nPos );
230cdf0e10cSrcweir                     if ( pBox->GetItemType(nPos) == TOOLBOXITEM_BUTTON )
231cdf0e10cSrcweir                     {
232cdf0e10cSrcweir                         pBox->SetItemImage( nId, GetImage( nId, bLarge, bHiContrast ) );
233cdf0e10cSrcweir                         SfxStateCache *pCache = SfxViewFrame::Current()->GetBindings().GetStateCache( nId );
234cdf0e10cSrcweir                         if ( pCache )
235cdf0e10cSrcweir                             pCache->SetCachedState();
236cdf0e10cSrcweir                     }
237cdf0e10cSrcweir                 }
238cdf0e10cSrcweir 
239cdf0e10cSrcweir                 if ( !pBox->IsFloatingMode() )
240cdf0e10cSrcweir                 {
241cdf0e10cSrcweir                     Size aActSize( pBox->GetSizePixel() );
242cdf0e10cSrcweir                     Size aSize( pBox->CalcWindowSizePixel() );
243cdf0e10cSrcweir                     if ( pBox->IsHorizontal() )
244cdf0e10cSrcweir                         aSize.Width() = aActSize.Width();
245cdf0e10cSrcweir                     else
246cdf0e10cSrcweir                         aSize.Height() = aActSize.Height();
247cdf0e10cSrcweir 
248cdf0e10cSrcweir                     pBox->SetSizePixel( aSize );
249cdf0e10cSrcweir                 }
250cdf0e10cSrcweir             }
251cdf0e10cSrcweir         }
252cdf0e10cSrcweir     }
253cdf0e10cSrcweir }
254cdf0e10cSrcweir 
255cdf0e10cSrcweir //-------------------------------------------------------------------------
256cdf0e10cSrcweir 
IMPL_LINK(SfxImageManager_Impl,OptionsChanged_Impl,void *,EMPTYARG)257cdf0e10cSrcweir IMPL_LINK( SfxImageManager_Impl, OptionsChanged_Impl, void*, EMPTYARG )
258cdf0e10cSrcweir {
259cdf0e10cSrcweir     SetSymbolsSize_Impl( SvtMiscOptions().GetCurrentSymbolsSize() );
260cdf0e10cSrcweir     return 0L;
261cdf0e10cSrcweir }
262cdf0e10cSrcweir 
263cdf0e10cSrcweir //-------------------------------------------------------------------------
264cdf0e10cSrcweir 
IMPL_LINK(SfxImageManager_Impl,SettingsChanged_Impl,void *,EMPTYARG)265cdf0e10cSrcweir IMPL_LINK( SfxImageManager_Impl, SettingsChanged_Impl, void*, EMPTYARG )
266cdf0e10cSrcweir {
267cdf0e10cSrcweir     // Check if toolbar button size have changed and we have to use system settings
268cdf0e10cSrcweir     sal_Int16 nSymbolsSize = SvtMiscOptions().GetCurrentSymbolsSize();
269cdf0e10cSrcweir     if ( m_nSymbolsSize != nSymbolsSize )
270cdf0e10cSrcweir         SetSymbolsSize_Impl( nSymbolsSize );
271cdf0e10cSrcweir     return 0L;
272cdf0e10cSrcweir }
273cdf0e10cSrcweir 
274cdf0e10cSrcweir //-------------------------------------------------------------------------
275cdf0e10cSrcweir 
276cdf0e10cSrcweir //=========================================================================
277cdf0e10cSrcweir 
SfxImageManager(SfxModule * pModule)278cdf0e10cSrcweir SfxImageManager::SfxImageManager( SfxModule* pModule )
279cdf0e10cSrcweir {
280cdf0e10cSrcweir     pImp = ::GetImageManager( pModule );
281cdf0e10cSrcweir }
282cdf0e10cSrcweir 
283cdf0e10cSrcweir //-------------------------------------------------------------------------
284cdf0e10cSrcweir 
~SfxImageManager()285cdf0e10cSrcweir SfxImageManager::~SfxImageManager()
286cdf0e10cSrcweir {
287cdf0e10cSrcweir }
288cdf0e10cSrcweir 
289cdf0e10cSrcweir //-------------------------------------------------------------------------
290cdf0e10cSrcweir 
GetImageManager(SfxModule * pModule)291cdf0e10cSrcweir SfxImageManager* SfxImageManager::GetImageManager( SfxModule* pModule )
292cdf0e10cSrcweir {
293cdf0e10cSrcweir     ::vos::OGuard aGuard( Application::GetSolarMutex() );
294cdf0e10cSrcweir 
295cdf0e10cSrcweir     SfxImageManagerMap::const_iterator pIter =
296cdf0e10cSrcweir         m_ImageManagerMap.find( sal::static_int_cast< sal_Int64 >( reinterpret_cast< sal_IntPtr >( pModule )));
297cdf0e10cSrcweir     if ( pIter != m_ImageManagerMap.end() )
298cdf0e10cSrcweir         return reinterpret_cast< SfxImageManager* >( sal::static_int_cast< sal_IntPtr >( pIter->second ));
299cdf0e10cSrcweir     else
300cdf0e10cSrcweir     {
301cdf0e10cSrcweir         SfxImageManager* pSfxImageManager = new SfxImageManager( pModule );
302cdf0e10cSrcweir         m_ImageManagerMap.insert( SfxImageManagerMap::value_type(
303cdf0e10cSrcweir             sal::static_int_cast< sal_Int64 >( reinterpret_cast< sal_IntPtr >( pModule )),
304cdf0e10cSrcweir             sal::static_int_cast< sal_Int64 >( reinterpret_cast< sal_IntPtr >( pSfxImageManager )) ));
305cdf0e10cSrcweir         return pSfxImageManager;
306cdf0e10cSrcweir     }
307cdf0e10cSrcweir }
308cdf0e10cSrcweir 
309cdf0e10cSrcweir //-------------------------------------------------------------------------
310cdf0e10cSrcweir 
GetImage(sal_uInt16 nId,sal_Bool bBig,sal_Bool bHiContrast) const311cdf0e10cSrcweir Image SfxImageManager::GetImage( sal_uInt16 nId, sal_Bool bBig, sal_Bool bHiContrast ) const
312cdf0e10cSrcweir {
313cdf0e10cSrcweir     ImageList* pImageList = pImp->GetImageList( bBig, bHiContrast );
314cdf0e10cSrcweir     if ( pImageList && pImageList->HasImageAtPos( nId ) )
315cdf0e10cSrcweir         return pImageList->GetImage( nId );
316cdf0e10cSrcweir     return Image();
317cdf0e10cSrcweir }
318cdf0e10cSrcweir 
319cdf0e10cSrcweir //-------------------------------------------------------------------------
320cdf0e10cSrcweir 
GetImage(sal_uInt16 nId,sal_Bool bHiContrast) const321cdf0e10cSrcweir Image SfxImageManager::GetImage( sal_uInt16 nId, sal_Bool bHiContrast ) const
322cdf0e10cSrcweir {
323cdf0e10cSrcweir     sal_Bool bLarge = SvtMiscOptions().AreCurrentSymbolsLarge();
324cdf0e10cSrcweir     return GetImage( nId, bLarge, bHiContrast );
325cdf0e10cSrcweir }
326cdf0e10cSrcweir 
327cdf0e10cSrcweir //-------------------------------------------------------------------------
328cdf0e10cSrcweir 
SeekImage(sal_uInt16 nId,sal_Bool bBig,sal_Bool bHiContrast) const329cdf0e10cSrcweir Image SfxImageManager::SeekImage( sal_uInt16 nId, sal_Bool bBig, sal_Bool bHiContrast ) const
330cdf0e10cSrcweir {
331cdf0e10cSrcweir     sal_Bool bGlobal = ( pImp->m_pModule == 0 );
332cdf0e10cSrcweir     ImageList* pImageList = pImp->GetImageList( bBig, bHiContrast );
333cdf0e10cSrcweir     if ( pImageList && pImageList->HasImageAtPos( nId ) )
334cdf0e10cSrcweir 	    return pImageList->GetImage( nId );
335cdf0e10cSrcweir     else if ( !bGlobal )
336cdf0e10cSrcweir     {
337cdf0e10cSrcweir         pImageList = ::GetImageManager( 0 )->GetImageList( bBig, bHiContrast );
338cdf0e10cSrcweir         if ( pImageList )
339cdf0e10cSrcweir 	        return pImageList->GetImage( nId );
340cdf0e10cSrcweir     }
341cdf0e10cSrcweir     return Image();
342cdf0e10cSrcweir }
343cdf0e10cSrcweir 
344cdf0e10cSrcweir //-------------------------------------------------------------------------
345cdf0e10cSrcweir 
SeekImage(sal_uInt16 nId,sal_Bool bHiContrast) const346cdf0e10cSrcweir Image SfxImageManager::SeekImage( sal_uInt16 nId, sal_Bool bHiContrast ) const
347cdf0e10cSrcweir {
348cdf0e10cSrcweir     sal_Bool bLarge = SvtMiscOptions().AreCurrentSymbolsLarge();
349cdf0e10cSrcweir     return SeekImage( nId, bLarge, bHiContrast );
350cdf0e10cSrcweir }
351cdf0e10cSrcweir 
352cdf0e10cSrcweir //-------------------------------------------------------------------------
353cdf0e10cSrcweir 
RegisterToolBox(ToolBox * pBox,sal_uInt16 nFlags)354cdf0e10cSrcweir void SfxImageManager::RegisterToolBox( ToolBox *pBox, sal_uInt16 nFlags )
355cdf0e10cSrcweir {
356cdf0e10cSrcweir     ::vos::OGuard aGuard( Application::GetSolarMutex() );
357cdf0e10cSrcweir 
358cdf0e10cSrcweir     ToolBoxInf_Impl* pInf = new ToolBoxInf_Impl;
359cdf0e10cSrcweir     pInf->pToolBox = pBox;
360cdf0e10cSrcweir     pInf->nFlags   = nFlags;
361cdf0e10cSrcweir     pImp->m_aToolBoxes.push_back( pInf );
362cdf0e10cSrcweir }
363cdf0e10cSrcweir 
364cdf0e10cSrcweir //-------------------------------------------------------------------------
365cdf0e10cSrcweir 
ReleaseToolBox(ToolBox * pBox)366cdf0e10cSrcweir void SfxImageManager::ReleaseToolBox( ToolBox *pBox )
367cdf0e10cSrcweir {
368cdf0e10cSrcweir     ::vos::OGuard aGuard( Application::GetSolarMutex() );
369cdf0e10cSrcweir 
370cdf0e10cSrcweir     for ( sal_uInt32 n=0; n < pImp->m_aToolBoxes.size(); n++ )
371cdf0e10cSrcweir     {
372cdf0e10cSrcweir         if ((pImp->m_aToolBoxes[n])->pToolBox == pBox )
373cdf0e10cSrcweir         {
374cdf0e10cSrcweir             delete pImp->m_aToolBoxes[n];
375cdf0e10cSrcweir             pImp->m_aToolBoxes.erase( pImp->m_aToolBoxes.begin() + n );
376cdf0e10cSrcweir             return;
377cdf0e10cSrcweir         }
378cdf0e10cSrcweir     }
379cdf0e10cSrcweir }
380cdf0e10cSrcweir 
381cdf0e10cSrcweir //-------------------------------------------------------------------------
382cdf0e10cSrcweir 
SetImages(ToolBox & rToolBox,sal_Bool bHiContrast,sal_Bool bLarge)383cdf0e10cSrcweir void SfxImageManager::SetImages( ToolBox& rToolBox, sal_Bool bHiContrast, sal_Bool bLarge )
384cdf0e10cSrcweir {
385cdf0e10cSrcweir     SetImagesForceSize( rToolBox, bLarge, bHiContrast );
386cdf0e10cSrcweir }
387cdf0e10cSrcweir 
388cdf0e10cSrcweir //-------------------------------------------------------------------------
389cdf0e10cSrcweir 
SetImagesForceSize(ToolBox & rToolBox,sal_Bool bHiContrast,sal_Bool bLarge)390cdf0e10cSrcweir void SfxImageManager::SetImagesForceSize( ToolBox& rToolBox, sal_Bool bHiContrast, sal_Bool bLarge )
391cdf0e10cSrcweir {
392cdf0e10cSrcweir     ImageList* pImageList = pImp->GetImageList( bLarge, bHiContrast );
393cdf0e10cSrcweir 
394cdf0e10cSrcweir     sal_uInt16 nCount = rToolBox.GetItemCount();
395cdf0e10cSrcweir     for (sal_uInt16 n=0; n<nCount; n++)
396cdf0e10cSrcweir     {
397cdf0e10cSrcweir         sal_uInt16 nId = rToolBox.GetItemId(n);
398cdf0e10cSrcweir         switch ( rToolBox.GetItemType(n) )
399cdf0e10cSrcweir         {
400cdf0e10cSrcweir             case TOOLBOXITEM_BUTTON:
401cdf0e10cSrcweir             {
402cdf0e10cSrcweir                 if ( pImageList && pImageList->HasImageAtPos( nId ) )
403cdf0e10cSrcweir                     rToolBox.SetItemImage( nId, pImageList->GetImage( nId ));
404cdf0e10cSrcweir                 else
405cdf0e10cSrcweir                     rToolBox.SetItemImage( nId, Image() );
406cdf0e10cSrcweir             }
407cdf0e10cSrcweir 
408cdf0e10cSrcweir             case TOOLBOXITEM_SEPARATOR:
409cdf0e10cSrcweir             case TOOLBOXITEM_SPACE:
410cdf0e10cSrcweir             case TOOLBOXITEM_BREAK:
411cdf0e10cSrcweir             default:
412cdf0e10cSrcweir                 break;
413cdf0e10cSrcweir         }
414cdf0e10cSrcweir     }
415cdf0e10cSrcweir }
416cdf0e10cSrcweir 
SetImages(ToolBox & rToolBox)417cdf0e10cSrcweir void SfxImageManager::SetImages( ToolBox& rToolBox )
418cdf0e10cSrcweir {
419cdf0e10cSrcweir     sal_Bool bLarge = ( pImp->m_nSymbolsSize == SFX_SYMBOLS_SIZE_LARGE );
420cdf0e10cSrcweir     sal_Bool bHiContrast = rToolBox.GetSettings().GetStyleSettings().GetHighContrastMode();
421cdf0e10cSrcweir     SetImagesForceSize( rToolBox, bHiContrast, bLarge );
422cdf0e10cSrcweir }
423