16d739b60SAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
36d739b60SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
46d739b60SAndrew Rist * or more contributor license agreements. See the NOTICE file
56d739b60SAndrew Rist * distributed with this work for additional information
66d739b60SAndrew Rist * regarding copyright ownership. The ASF licenses this file
76d739b60SAndrew Rist * to you under the Apache License, Version 2.0 (the
86d739b60SAndrew Rist * "License"); you may not use this file except in compliance
96d739b60SAndrew Rist * with the License. You may obtain a copy of the License at
106d739b60SAndrew Rist *
116d739b60SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
126d739b60SAndrew Rist *
136d739b60SAndrew Rist * Unless required by applicable law or agreed to in writing,
146d739b60SAndrew Rist * software distributed under the License is distributed on an
156d739b60SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
166d739b60SAndrew Rist * KIND, either express or implied. See the License for the
176d739b60SAndrew Rist * specific language governing permissions and limitations
186d739b60SAndrew Rist * under the License.
196d739b60SAndrew Rist *
206d739b60SAndrew Rist *************************************************************/
216d739b60SAndrew Rist
226d739b60SAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_framework.hxx"
26cdf0e10cSrcweir
27cdf0e10cSrcweir //_________________________________________________________________________________________________________________
28cdf0e10cSrcweir // my own includes
29cdf0e10cSrcweir //_________________________________________________________________________________________________________________
30cdf0e10cSrcweir #include "uiconfiguration/windowstateconfiguration.hxx"
31cdf0e10cSrcweir #include <threadhelp/resetableguard.hxx>
32cdf0e10cSrcweir #include "services.h"
33cdf0e10cSrcweir
34cdf0e10cSrcweir //_________________________________________________________________________________________________________________
35cdf0e10cSrcweir // interface includes
36cdf0e10cSrcweir //_________________________________________________________________________________________________________________
37cdf0e10cSrcweir #include <com/sun/star/beans/PropertyValue.hpp>
38cdf0e10cSrcweir #include <com/sun/star/beans/XPropertySet.hpp>
39cdf0e10cSrcweir #include <com/sun/star/container/XNameAccess.hpp>
40cdf0e10cSrcweir #include <com/sun/star/container/XNameContainer.hpp>
41cdf0e10cSrcweir #include <com/sun/star/container/XContainer.hpp>
42cdf0e10cSrcweir #include <com/sun/star/awt/Point.hpp>
43cdf0e10cSrcweir #include <com/sun/star/awt/Size.hpp>
44cdf0e10cSrcweir #include <com/sun/star/ui/DockingArea.hpp>
45cdf0e10cSrcweir #include <com/sun/star/util/XChangesBatch.hpp>
46cdf0e10cSrcweir
47cdf0e10cSrcweir //_________________________________________________________________________________________________________________
48cdf0e10cSrcweir // includes of other projects
49cdf0e10cSrcweir //_________________________________________________________________________________________________________________
50cdf0e10cSrcweir #include <rtl/ustrbuf.hxx>
51cdf0e10cSrcweir #include <cppuhelper/weak.hxx>
52cdf0e10cSrcweir #include <tools/debug.hxx>
53cdf0e10cSrcweir
54cdf0e10cSrcweir //_________________________________________________________________________________________________________________
55cdf0e10cSrcweir // Defines
56cdf0e10cSrcweir //_________________________________________________________________________________________________________________
57cdf0e10cSrcweir //
58cdf0e10cSrcweir
59cdf0e10cSrcweir using namespace com::sun::star::uno;
60cdf0e10cSrcweir using namespace com::sun::star::lang;
61cdf0e10cSrcweir using namespace com::sun::star::beans;
62cdf0e10cSrcweir using namespace com::sun::star::util;
63cdf0e10cSrcweir using namespace com::sun::star::container;
64cdf0e10cSrcweir using namespace ::com::sun::star::frame;
65cdf0e10cSrcweir using namespace ::com::sun::star::ui;
66cdf0e10cSrcweir
67cdf0e10cSrcweir //_________________________________________________________________________________________________________________
68cdf0e10cSrcweir // Namespace
69cdf0e10cSrcweir //_________________________________________________________________________________________________________________
70cdf0e10cSrcweir //
71cdf0e10cSrcweir
72cdf0e10cSrcweir static const char CONFIGURATION_ROOT_ACCESS[] = "/org.openoffice.Office.UI.";
73cdf0e10cSrcweir static const char CONFIGURATION_WINDOWSTATE_ACCESS[] = "/UIElements/States";
74cdf0e10cSrcweir
75cdf0e10cSrcweir static const char CONFIGURATION_PROPERTY_LOCKED[] = WINDOWSTATE_PROPERTY_LOCKED;
76cdf0e10cSrcweir static const char CONFIGURATION_PROPERTY_DOCKED[] = WINDOWSTATE_PROPERTY_DOCKED;
77cdf0e10cSrcweir static const char CONFIGURATION_PROPERTY_VISIBLE[] = WINDOWSTATE_PROPERTY_VISIBLE;
78cdf0e10cSrcweir static const char CONFIGURATION_PROPERTY_DOCKINGAREA[] = WINDOWSTATE_PROPERTY_DOCKINGAREA;
79cdf0e10cSrcweir static const char CONFIGURATION_PROPERTY_DOCKPOS[] = WINDOWSTATE_PROPERTY_DOCKPOS;
80cdf0e10cSrcweir static const char CONFIGURATION_PROPERTY_DOCKSIZE[] = WINDOWSTATE_PROPERTY_DOCKSIZE;
81cdf0e10cSrcweir static const char CONFIGURATION_PROPERTY_POS[] = WINDOWSTATE_PROPERTY_POS;
82cdf0e10cSrcweir static const char CONFIGURATION_PROPERTY_SIZE[] = WINDOWSTATE_PROPERTY_SIZE;
83cdf0e10cSrcweir static const char CONFIGURATION_PROPERTY_UINAME[] = WINDOWSTATE_PROPERTY_UINAME;
84cdf0e10cSrcweir static const char CONFIGURATION_PROPERTY_INTERNALSTATE[] = WINDOWSTATE_PROPERTY_INTERNALSTATE;
85cdf0e10cSrcweir static const char CONFIGURATION_PROPERTY_STYLE[] = WINDOWSTATE_PROPERTY_STYLE;
86cdf0e10cSrcweir static const char CONFIGURATION_PROPERTY_CONTEXT[] = WINDOWSTATE_PROPERTY_CONTEXT;
87cdf0e10cSrcweir static const char CONFIGURATION_PROPERTY_HIDEFROMMENU[] = WINDOWSTATE_PROPERTY_HIDEFROMENU;
88cdf0e10cSrcweir static const char CONFIGURATION_PROPERTY_NOCLOSE[] = WINDOWSTATE_PROPERTY_NOCLOSE;
89cdf0e10cSrcweir static const char CONFIGURATION_PROPERTY_SOFTCLOSE[] = WINDOWSTATE_PROPERTY_SOFTCLOSE;
90cdf0e10cSrcweir static const char CONFIGURATION_PROPERTY_CONTEXTACTIVE[] = WINDOWSTATE_PROPERTY_CONTEXTACTIVE;
91cdf0e10cSrcweir
92cdf0e10cSrcweir // Zero based indexes, order must be the same as WindowStateMask && CONFIGURATION_PROPERTIES!
93cdf0e10cSrcweir static const sal_Int16 PROPERTY_LOCKED = 0;
94cdf0e10cSrcweir static const sal_Int16 PROPERTY_DOCKED = 1;
95cdf0e10cSrcweir static const sal_Int16 PROPERTY_VISIBLE = 2;
96cdf0e10cSrcweir static const sal_Int16 PROPERTY_CONTEXT = 3;
97cdf0e10cSrcweir static const sal_Int16 PROPERTY_HIDEFROMMENU = 4;
98cdf0e10cSrcweir static const sal_Int16 PROPERTY_NOCLOSE = 5;
99cdf0e10cSrcweir static const sal_Int16 PROPERTY_SOFTCLOSE = 6;
100cdf0e10cSrcweir static const sal_Int16 PROPERTY_CONTEXTACTIVE = 7;
101cdf0e10cSrcweir static const sal_Int16 PROPERTY_DOCKINGAREA = 8;
102cdf0e10cSrcweir static const sal_Int16 PROPERTY_POS = 9;
103cdf0e10cSrcweir static const sal_Int16 PROPERTY_SIZE = 10;
104cdf0e10cSrcweir static const sal_Int16 PROPERTY_UINAME = 11;
105cdf0e10cSrcweir static const sal_Int16 PROPERTY_INTERNALSTATE = 12;
106cdf0e10cSrcweir static const sal_Int16 PROPERTY_STYLE = 13;
107cdf0e10cSrcweir static const sal_Int16 PROPERTY_DOCKPOS = 14;
108cdf0e10cSrcweir static const sal_Int16 PROPERTY_DOCKSIZE = 15;
109cdf0e10cSrcweir
110cdf0e10cSrcweir // Order must be the same as WindowStateMask!!
111cdf0e10cSrcweir static const char* CONFIGURATION_PROPERTIES[] =
112cdf0e10cSrcweir {
113cdf0e10cSrcweir CONFIGURATION_PROPERTY_LOCKED,
114cdf0e10cSrcweir CONFIGURATION_PROPERTY_DOCKED,
115cdf0e10cSrcweir CONFIGURATION_PROPERTY_VISIBLE,
116cdf0e10cSrcweir CONFIGURATION_PROPERTY_CONTEXT,
117cdf0e10cSrcweir CONFIGURATION_PROPERTY_HIDEFROMMENU,
118cdf0e10cSrcweir CONFIGURATION_PROPERTY_NOCLOSE,
119cdf0e10cSrcweir CONFIGURATION_PROPERTY_SOFTCLOSE,
120cdf0e10cSrcweir CONFIGURATION_PROPERTY_CONTEXTACTIVE,
121cdf0e10cSrcweir CONFIGURATION_PROPERTY_DOCKINGAREA,
122cdf0e10cSrcweir CONFIGURATION_PROPERTY_POS,
123cdf0e10cSrcweir CONFIGURATION_PROPERTY_SIZE,
124cdf0e10cSrcweir CONFIGURATION_PROPERTY_UINAME,
125cdf0e10cSrcweir CONFIGURATION_PROPERTY_INTERNALSTATE,
126cdf0e10cSrcweir CONFIGURATION_PROPERTY_STYLE,
127cdf0e10cSrcweir CONFIGURATION_PROPERTY_DOCKPOS,
128cdf0e10cSrcweir CONFIGURATION_PROPERTY_DOCKSIZE,
129cdf0e10cSrcweir 0
130cdf0e10cSrcweir };
131cdf0e10cSrcweir
132cdf0e10cSrcweir namespace framework
133cdf0e10cSrcweir {
134cdf0e10cSrcweir
135cdf0e10cSrcweir //*****************************************************************************************************************
136cdf0e10cSrcweir // Configuration access class for WindowState supplier implementation
137cdf0e10cSrcweir //*****************************************************************************************************************
138cdf0e10cSrcweir
139cdf0e10cSrcweir class ConfigurationAccess_WindowState : // interfaces
140cdf0e10cSrcweir public XTypeProvider ,
141cdf0e10cSrcweir public XNameContainer ,
142cdf0e10cSrcweir public XContainerListener ,
143cdf0e10cSrcweir // baseclasses
144cdf0e10cSrcweir // Order is neccessary for right initialization!
145cdf0e10cSrcweir private ThreadHelpBase ,
146cdf0e10cSrcweir public ::cppu::OWeakObject
147cdf0e10cSrcweir {
148cdf0e10cSrcweir public:
149cdf0e10cSrcweir ConfigurationAccess_WindowState( const ::rtl::OUString& aWindowStateConfigFile, const Reference< XMultiServiceFactory >& rServiceManager );
150cdf0e10cSrcweir virtual ~ConfigurationAccess_WindowState();
151cdf0e10cSrcweir
152cdf0e10cSrcweir // XInterface, XTypeProvider
153cdf0e10cSrcweir FWK_DECLARE_XINTERFACE
154cdf0e10cSrcweir FWK_DECLARE_XTYPEPROVIDER
155cdf0e10cSrcweir
156cdf0e10cSrcweir // XNameAccess
157cdf0e10cSrcweir virtual ::com::sun::star::uno::Any SAL_CALL getByName( const ::rtl::OUString& aName )
158cdf0e10cSrcweir throw (::com::sun::star::container::NoSuchElementException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException);
159cdf0e10cSrcweir
160cdf0e10cSrcweir virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getElementNames()
161cdf0e10cSrcweir throw (::com::sun::star::uno::RuntimeException);
162cdf0e10cSrcweir
163cdf0e10cSrcweir virtual sal_Bool SAL_CALL hasByName( const ::rtl::OUString& aName )
164cdf0e10cSrcweir throw (::com::sun::star::uno::RuntimeException);
165cdf0e10cSrcweir
166cdf0e10cSrcweir // XNameContainer
167cdf0e10cSrcweir virtual void SAL_CALL removeByName( const ::rtl::OUString& sName )
168cdf0e10cSrcweir throw(css::container::NoSuchElementException, css::lang::WrappedTargetException, css::uno::RuntimeException );
169cdf0e10cSrcweir
170cdf0e10cSrcweir virtual void SAL_CALL insertByName( const ::rtl::OUString& sName, const css::uno::Any& aPropertySet )
171cdf0e10cSrcweir throw(css::lang::IllegalArgumentException, css::container::ElementExistException, css::lang::WrappedTargetException, css::uno::RuntimeException );
172cdf0e10cSrcweir
173cdf0e10cSrcweir // XNameReplace
174cdf0e10cSrcweir virtual void SAL_CALL replaceByName( const ::rtl::OUString& sName, const css::uno::Any& aPropertySet )
175cdf0e10cSrcweir throw(css::lang::IllegalArgumentException, css::container::NoSuchElementException, css::lang::WrappedTargetException, css::uno::RuntimeException );
176cdf0e10cSrcweir
177cdf0e10cSrcweir // XElementAccess
178cdf0e10cSrcweir virtual ::com::sun::star::uno::Type SAL_CALL getElementType()
179cdf0e10cSrcweir throw (::com::sun::star::uno::RuntimeException);
180cdf0e10cSrcweir
181cdf0e10cSrcweir virtual sal_Bool SAL_CALL hasElements()
182cdf0e10cSrcweir throw (::com::sun::star::uno::RuntimeException);
183cdf0e10cSrcweir
184cdf0e10cSrcweir // container.XContainerListener
185cdf0e10cSrcweir virtual void SAL_CALL elementInserted( const ContainerEvent& aEvent ) throw(RuntimeException);
186cdf0e10cSrcweir virtual void SAL_CALL elementRemoved ( const ContainerEvent& aEvent ) throw(RuntimeException);
187cdf0e10cSrcweir virtual void SAL_CALL elementReplaced( const ContainerEvent& aEvent ) throw(RuntimeException);
188cdf0e10cSrcweir
189cdf0e10cSrcweir // lang.XEventListener
190cdf0e10cSrcweir virtual void SAL_CALL disposing( const EventObject& aEvent ) throw(RuntimeException);
191cdf0e10cSrcweir
192cdf0e10cSrcweir protected:
193cdf0e10cSrcweir enum WindowStateMask
194cdf0e10cSrcweir {
195cdf0e10cSrcweir WINDOWSTATE_MASK_LOCKED = 1,
196cdf0e10cSrcweir WINDOWSTATE_MASK_DOCKED = 2,
197cdf0e10cSrcweir WINDOWSTATE_MASK_VISIBLE = 4,
198cdf0e10cSrcweir WINDOWSTATE_MASK_CONTEXT = 8,
199cdf0e10cSrcweir WINDOWSTATE_MASK_HIDEFROMMENU = 16,
200cdf0e10cSrcweir WINDOWSTATE_MASK_NOCLOSE = 32,
201cdf0e10cSrcweir WINDOWSTATE_MASK_SOFTCLOSE = 64,
202cdf0e10cSrcweir WINDOWSTATE_MASK_CONTEXTACTIVE = 128,
203cdf0e10cSrcweir WINDOWSTATE_MASK_DOCKINGAREA = 256,
204cdf0e10cSrcweir WINDOWSTATE_MASK_POS = 512,
205cdf0e10cSrcweir WINDOWSTATE_MASK_SIZE = 1024,
206cdf0e10cSrcweir WINDOWSTATE_MASK_UINAME = 2048,
207cdf0e10cSrcweir WINDOWSTATE_MASK_INTERNALSTATE = 4096,
208cdf0e10cSrcweir WINDOWSTATE_MASK_STYLE = 8192,
209cdf0e10cSrcweir WINDOWSTATE_MASK_DOCKPOS = 16384,
210cdf0e10cSrcweir WINDOWSTATE_MASK_DOCKSIZE = 32768
211cdf0e10cSrcweir };
212cdf0e10cSrcweir
213cdf0e10cSrcweir // Cache structure. Valid values are described by tje eMask member. All other values should not be
214cdf0e10cSrcweir // provided to outside code!
215cdf0e10cSrcweir struct WindowStateInfo
216cdf0e10cSrcweir {
WindowStateInfoframework::ConfigurationAccess_WindowState::WindowStateInfo217cdf0e10cSrcweir WindowStateInfo() : aDockingArea( ::com::sun::star::ui::DockingArea_DOCKINGAREA_TOP ),
218cdf0e10cSrcweir aDockPos( 0, 0 ),
219cdf0e10cSrcweir aPos( 0, 0 ),
220cdf0e10cSrcweir aSize( 0, 0 ),
221cdf0e10cSrcweir nInternalState( 0 ),
222cdf0e10cSrcweir nStyle( 0 ),
223cdf0e10cSrcweir nMask( 0 ) {}
224cdf0e10cSrcweir
225cdf0e10cSrcweir bool bLocked : 1,
226cdf0e10cSrcweir bDocked : 1,
227cdf0e10cSrcweir bVisible : 1,
228cdf0e10cSrcweir bContext : 1,
229cdf0e10cSrcweir bHideFromMenu : 1,
230cdf0e10cSrcweir bNoClose : 1,
231cdf0e10cSrcweir bSoftClose : 1,
232cdf0e10cSrcweir bContextActive : 1;
233cdf0e10cSrcweir ::com::sun::star::ui::DockingArea aDockingArea;
234cdf0e10cSrcweir com::sun::star::awt::Point aDockPos;
235cdf0e10cSrcweir com::sun::star::awt::Size aDockSize;
236cdf0e10cSrcweir com::sun::star::awt::Point aPos;
237cdf0e10cSrcweir com::sun::star::awt::Size aSize;
238cdf0e10cSrcweir rtl::OUString aUIName;
239cdf0e10cSrcweir sal_uInt32 nInternalState;
240cdf0e10cSrcweir sal_uInt16 nStyle;
241cdf0e10cSrcweir sal_uInt32 nMask; // see WindowStateMask
242cdf0e10cSrcweir };
243cdf0e10cSrcweir
244cdf0e10cSrcweir void impl_putPropertiesFromStruct( const WindowStateInfo& rWinStateInfo, Reference< XPropertySet >& xPropSet );
245cdf0e10cSrcweir Any impl_insertCacheAndReturnSequence( const rtl::OUString& rResourceURL, Reference< XNameAccess >& rNameAccess );
246cdf0e10cSrcweir WindowStateInfo& impl_insertCacheAndReturnWinState( const rtl::OUString& rResourceURL, Reference< XNameAccess >& rNameAccess );
247cdf0e10cSrcweir Any impl_getSequenceFromStruct( const WindowStateInfo& rWinStateInfo );
248cdf0e10cSrcweir void impl_fillStructFromSequence( WindowStateInfo& rWinStateInfo, const Sequence< PropertyValue >& rSeq );
249cdf0e10cSrcweir Any impl_getWindowStateFromResourceURL( const rtl::OUString& rResourceURL );
250cdf0e10cSrcweir sal_Bool impl_initializeConfigAccess();
251cdf0e10cSrcweir
252cdf0e10cSrcweir private:
253cdf0e10cSrcweir typedef ::std::hash_map< ::rtl::OUString,
254cdf0e10cSrcweir WindowStateInfo,
255*5758ad8cSAriel Constenla-Haile rtl::OUStringHash,
256cdf0e10cSrcweir ::std::equal_to< ::rtl::OUString > > ResourceURLToInfoCache;
257cdf0e10cSrcweir
258cdf0e10cSrcweir rtl::OUString m_aConfigWindowAccess;
259cdf0e10cSrcweir Reference< XMultiServiceFactory > m_xServiceManager;
260cdf0e10cSrcweir Reference< XMultiServiceFactory > m_xConfigProvider;
261cdf0e10cSrcweir Reference< XNameAccess > m_xConfigAccess;
262cdf0e10cSrcweir ResourceURLToInfoCache m_aResourceURLToInfoCache;
263cdf0e10cSrcweir sal_Bool m_bConfigAccessInitialized : 1,
264cdf0e10cSrcweir m_bModified : 1;
265cdf0e10cSrcweir std::vector< ::rtl::OUString > m_aPropArray;
266cdf0e10cSrcweir };
267cdf0e10cSrcweir
268cdf0e10cSrcweir //*****************************************************************************************************************
269cdf0e10cSrcweir // XInterface, XTypeProvider
270cdf0e10cSrcweir //*****************************************************************************************************************
DEFINE_XINTERFACE_7(ConfigurationAccess_WindowState,OWeakObject,DIRECT_INTERFACE (css::container::XNameContainer),DIRECT_INTERFACE (css::container::XContainerListener),DIRECT_INTERFACE (css::lang::XTypeProvider),DERIVED_INTERFACE (css::container::XElementAccess,css::container::XNameAccess),DERIVED_INTERFACE (css::container::XNameAccess,css::container::XNameReplace),DERIVED_INTERFACE (css::container::XNameReplace,css::container::XNameContainer),DERIVED_INTERFACE (css::lang::XEventListener,XContainerListener))271cdf0e10cSrcweir DEFINE_XINTERFACE_7 ( ConfigurationAccess_WindowState ,
272cdf0e10cSrcweir OWeakObject ,
273cdf0e10cSrcweir DIRECT_INTERFACE ( css::container::XNameContainer ),
274cdf0e10cSrcweir DIRECT_INTERFACE ( css::container::XContainerListener ),
275cdf0e10cSrcweir DIRECT_INTERFACE ( css::lang::XTypeProvider ),
276cdf0e10cSrcweir DERIVED_INTERFACE( css::container::XElementAccess, css::container::XNameAccess ),
277cdf0e10cSrcweir DERIVED_INTERFACE( css::container::XNameAccess, css::container::XNameReplace ),
278cdf0e10cSrcweir DERIVED_INTERFACE( css::container::XNameReplace, css::container::XNameContainer ),
279cdf0e10cSrcweir DERIVED_INTERFACE( css::lang::XEventListener, XContainerListener )
280cdf0e10cSrcweir )
281cdf0e10cSrcweir
282cdf0e10cSrcweir DEFINE_XTYPEPROVIDER_7 ( ConfigurationAccess_WindowState ,
283cdf0e10cSrcweir css::container::XNameContainer ,
284cdf0e10cSrcweir css::container::XNameReplace ,
285cdf0e10cSrcweir css::container::XNameAccess ,
286cdf0e10cSrcweir css::container::XElementAccess ,
287cdf0e10cSrcweir css::container::XContainerListener ,
288cdf0e10cSrcweir css::lang::XEventListener ,
289cdf0e10cSrcweir css::lang::XTypeProvider
290cdf0e10cSrcweir )
291cdf0e10cSrcweir
292cdf0e10cSrcweir ConfigurationAccess_WindowState::ConfigurationAccess_WindowState( const rtl::OUString& aModuleName, const Reference< XMultiServiceFactory >& rServiceManager ) :
293cdf0e10cSrcweir ThreadHelpBase(),
294cdf0e10cSrcweir m_aConfigWindowAccess( RTL_CONSTASCII_USTRINGPARAM( CONFIGURATION_ROOT_ACCESS )),
295cdf0e10cSrcweir m_xServiceManager( rServiceManager ),
296cdf0e10cSrcweir m_bConfigAccessInitialized( sal_False ),
297cdf0e10cSrcweir m_bModified( sal_False )
298cdf0e10cSrcweir {
299cdf0e10cSrcweir // Create configuration hierachical access name
300cdf0e10cSrcweir m_aConfigWindowAccess += aModuleName;
301cdf0e10cSrcweir m_aConfigWindowAccess += rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( CONFIGURATION_WINDOWSTATE_ACCESS ));
302cdf0e10cSrcweir m_xConfigProvider = Reference< XMultiServiceFactory >( rServiceManager->createInstance( SERVICENAME_CFGPROVIDER ), UNO_QUERY );
303cdf0e10cSrcweir
304cdf0e10cSrcweir // Initialize access array with property names.
305cdf0e10cSrcweir sal_Int32 n = 0;
306cdf0e10cSrcweir while ( CONFIGURATION_PROPERTIES[n] )
307cdf0e10cSrcweir {
308cdf0e10cSrcweir m_aPropArray.push_back( ::rtl::OUString::createFromAscii( CONFIGURATION_PROPERTIES[n] ));
309cdf0e10cSrcweir ++n;
310cdf0e10cSrcweir }
311cdf0e10cSrcweir }
312cdf0e10cSrcweir
~ConfigurationAccess_WindowState()313cdf0e10cSrcweir ConfigurationAccess_WindowState::~ConfigurationAccess_WindowState()
314cdf0e10cSrcweir {
315cdf0e10cSrcweir // SAFE
316cdf0e10cSrcweir ResetableGuard aLock( m_aLock );
317cdf0e10cSrcweir Reference< XContainer > xContainer( m_xConfigAccess, UNO_QUERY );
318cdf0e10cSrcweir if ( xContainer.is() )
319cdf0e10cSrcweir xContainer->removeContainerListener( this );
320cdf0e10cSrcweir }
321cdf0e10cSrcweir
322cdf0e10cSrcweir // XNameAccess
getByName(const::rtl::OUString & rResourceURL)323cdf0e10cSrcweir Any SAL_CALL ConfigurationAccess_WindowState::getByName( const ::rtl::OUString& rResourceURL )
324cdf0e10cSrcweir throw ( NoSuchElementException, WrappedTargetException, RuntimeException)
325cdf0e10cSrcweir {
326cdf0e10cSrcweir // SAFE
327cdf0e10cSrcweir ResetableGuard aLock( m_aLock );
328cdf0e10cSrcweir
329cdf0e10cSrcweir ResourceURLToInfoCache::const_iterator pIter = m_aResourceURLToInfoCache.find( rResourceURL );
330cdf0e10cSrcweir if ( pIter != m_aResourceURLToInfoCache.end() )
331cdf0e10cSrcweir return impl_getSequenceFromStruct( pIter->second );
332cdf0e10cSrcweir else
333cdf0e10cSrcweir {
334cdf0e10cSrcweir Any a( impl_getWindowStateFromResourceURL( rResourceURL ) );
335cdf0e10cSrcweir if ( a == Any() )
336cdf0e10cSrcweir throw NoSuchElementException();
337cdf0e10cSrcweir else
338cdf0e10cSrcweir return a;
339cdf0e10cSrcweir }
340cdf0e10cSrcweir }
341cdf0e10cSrcweir
getElementNames()342cdf0e10cSrcweir Sequence< ::rtl::OUString > SAL_CALL ConfigurationAccess_WindowState::getElementNames()
343cdf0e10cSrcweir throw ( RuntimeException )
344cdf0e10cSrcweir {
345cdf0e10cSrcweir // SAFE
346cdf0e10cSrcweir ResetableGuard aLock( m_aLock );
347cdf0e10cSrcweir
348cdf0e10cSrcweir if ( !m_bConfigAccessInitialized )
349cdf0e10cSrcweir {
350cdf0e10cSrcweir impl_initializeConfigAccess();
351cdf0e10cSrcweir m_bConfigAccessInitialized = sal_True;
352cdf0e10cSrcweir }
353cdf0e10cSrcweir
354cdf0e10cSrcweir if ( m_xConfigAccess.is() )
355cdf0e10cSrcweir return m_xConfigAccess->getElementNames();
356cdf0e10cSrcweir else
357cdf0e10cSrcweir return Sequence< ::rtl::OUString > ();
358cdf0e10cSrcweir }
359cdf0e10cSrcweir
hasByName(const::rtl::OUString & rResourceURL)360cdf0e10cSrcweir sal_Bool SAL_CALL ConfigurationAccess_WindowState::hasByName( const ::rtl::OUString& rResourceURL )
361cdf0e10cSrcweir throw (::com::sun::star::uno::RuntimeException)
362cdf0e10cSrcweir {
363cdf0e10cSrcweir // SAFE
364cdf0e10cSrcweir ResetableGuard aLock( m_aLock );
365cdf0e10cSrcweir
366cdf0e10cSrcweir ResourceURLToInfoCache::const_iterator pIter = m_aResourceURLToInfoCache.find( rResourceURL );
367cdf0e10cSrcweir if ( pIter != m_aResourceURLToInfoCache.end() )
368cdf0e10cSrcweir return sal_True;
369cdf0e10cSrcweir else
370cdf0e10cSrcweir {
371cdf0e10cSrcweir Any a( impl_getWindowStateFromResourceURL( rResourceURL ) );
372cdf0e10cSrcweir if ( a == Any() )
373cdf0e10cSrcweir return sal_False;
374cdf0e10cSrcweir else
375cdf0e10cSrcweir return sal_True;
376cdf0e10cSrcweir }
377cdf0e10cSrcweir }
378cdf0e10cSrcweir
379cdf0e10cSrcweir // XElementAccess
getElementType()380cdf0e10cSrcweir Type SAL_CALL ConfigurationAccess_WindowState::getElementType()
381cdf0e10cSrcweir throw ( RuntimeException )
382cdf0e10cSrcweir {
383cdf0e10cSrcweir return( ::getCppuType( (const Sequence< PropertyValue >*)NULL ) );
384cdf0e10cSrcweir }
385cdf0e10cSrcweir
hasElements()386cdf0e10cSrcweir sal_Bool SAL_CALL ConfigurationAccess_WindowState::hasElements()
387cdf0e10cSrcweir throw ( RuntimeException )
388cdf0e10cSrcweir {
389cdf0e10cSrcweir // SAFE
390cdf0e10cSrcweir ResetableGuard aLock( m_aLock );
391cdf0e10cSrcweir
392cdf0e10cSrcweir if ( !m_bConfigAccessInitialized )
393cdf0e10cSrcweir {
394cdf0e10cSrcweir impl_initializeConfigAccess();
395cdf0e10cSrcweir m_bConfigAccessInitialized = sal_True;
396cdf0e10cSrcweir }
397cdf0e10cSrcweir
398cdf0e10cSrcweir if ( m_xConfigAccess.is() )
399cdf0e10cSrcweir return m_xConfigAccess->hasElements();
400cdf0e10cSrcweir else
401cdf0e10cSrcweir return sal_False;
402cdf0e10cSrcweir }
403cdf0e10cSrcweir
404cdf0e10cSrcweir // XNameContainer
removeByName(const::rtl::OUString & rResourceURL)405cdf0e10cSrcweir void SAL_CALL ConfigurationAccess_WindowState::removeByName( const ::rtl::OUString& rResourceURL )
406cdf0e10cSrcweir throw( NoSuchElementException, WrappedTargetException, RuntimeException )
407cdf0e10cSrcweir {
408cdf0e10cSrcweir // SAFE
409cdf0e10cSrcweir ResetableGuard aLock( m_aLock );
410cdf0e10cSrcweir
411cdf0e10cSrcweir ResourceURLToInfoCache::iterator pIter = m_aResourceURLToInfoCache.find( rResourceURL );
412cdf0e10cSrcweir if ( pIter != m_aResourceURLToInfoCache.end() )
413cdf0e10cSrcweir m_aResourceURLToInfoCache.erase( pIter );
414cdf0e10cSrcweir
415cdf0e10cSrcweir if ( !m_bConfigAccessInitialized )
416cdf0e10cSrcweir {
417cdf0e10cSrcweir impl_initializeConfigAccess();
418cdf0e10cSrcweir m_bConfigAccessInitialized = sal_True;
419cdf0e10cSrcweir }
420cdf0e10cSrcweir
421cdf0e10cSrcweir try
422cdf0e10cSrcweir {
423cdf0e10cSrcweir // Remove must be write-through => remove element from configuration
424cdf0e10cSrcweir Reference< XNameContainer > xNameContainer( m_xConfigAccess, UNO_QUERY );
425cdf0e10cSrcweir if ( xNameContainer.is() )
426cdf0e10cSrcweir {
427cdf0e10cSrcweir aLock.unlock();
428cdf0e10cSrcweir
429cdf0e10cSrcweir xNameContainer->removeByName( rResourceURL );
430cdf0e10cSrcweir Reference< XChangesBatch > xFlush( m_xConfigAccess, UNO_QUERY );
431cdf0e10cSrcweir if ( xFlush.is() )
432cdf0e10cSrcweir xFlush->commitChanges();
433cdf0e10cSrcweir }
434cdf0e10cSrcweir }
435cdf0e10cSrcweir catch ( com::sun::star::lang::WrappedTargetException& )
436cdf0e10cSrcweir {
437cdf0e10cSrcweir }
438cdf0e10cSrcweir }
439cdf0e10cSrcweir
insertByName(const::rtl::OUString & rResourceURL,const css::uno::Any & aPropertySet)440cdf0e10cSrcweir void SAL_CALL ConfigurationAccess_WindowState::insertByName( const ::rtl::OUString& rResourceURL, const css::uno::Any& aPropertySet )
441cdf0e10cSrcweir throw( IllegalArgumentException, ElementExistException, WrappedTargetException, RuntimeException )
442cdf0e10cSrcweir {
443cdf0e10cSrcweir // SAFE
444cdf0e10cSrcweir ResetableGuard aLock( m_aLock );
445cdf0e10cSrcweir
446cdf0e10cSrcweir Sequence< PropertyValue > aPropSet;
447cdf0e10cSrcweir if ( aPropertySet >>= aPropSet )
448cdf0e10cSrcweir {
449cdf0e10cSrcweir ResourceURLToInfoCache::const_iterator pIter = m_aResourceURLToInfoCache.find( rResourceURL );
450cdf0e10cSrcweir if ( pIter != m_aResourceURLToInfoCache.end() )
451cdf0e10cSrcweir throw ElementExistException();
452cdf0e10cSrcweir else
453cdf0e10cSrcweir {
454cdf0e10cSrcweir if ( !m_bConfigAccessInitialized )
455cdf0e10cSrcweir {
456cdf0e10cSrcweir impl_initializeConfigAccess();
457cdf0e10cSrcweir m_bConfigAccessInitialized = sal_True;
458cdf0e10cSrcweir }
459cdf0e10cSrcweir
460cdf0e10cSrcweir // Try to ask our configuration access
461cdf0e10cSrcweir if ( m_xConfigAccess.is() )
462cdf0e10cSrcweir {
463cdf0e10cSrcweir if ( m_xConfigAccess->hasByName( rResourceURL ) )
464cdf0e10cSrcweir throw ElementExistException();
465cdf0e10cSrcweir else
466cdf0e10cSrcweir {
467cdf0e10cSrcweir WindowStateInfo aWinStateInfo;
468cdf0e10cSrcweir impl_fillStructFromSequence( aWinStateInfo, aPropSet );
469cdf0e10cSrcweir m_aResourceURLToInfoCache.insert( ResourceURLToInfoCache::value_type( rResourceURL, aWinStateInfo ));
470cdf0e10cSrcweir
471cdf0e10cSrcweir // insert must be write-through => insert element into configuration
472cdf0e10cSrcweir Reference< XNameContainer > xNameContainer( m_xConfigAccess, UNO_QUERY );
473cdf0e10cSrcweir if ( xNameContainer.is() )
474cdf0e10cSrcweir {
475cdf0e10cSrcweir Reference< XSingleServiceFactory > xFactory( m_xConfigAccess, UNO_QUERY );
476cdf0e10cSrcweir aLock.unlock();
477cdf0e10cSrcweir
478cdf0e10cSrcweir try
479cdf0e10cSrcweir {
480cdf0e10cSrcweir Reference< XPropertySet > xPropSet( xFactory->createInstance(), UNO_QUERY );
481cdf0e10cSrcweir if ( xPropSet.is() )
482cdf0e10cSrcweir {
483cdf0e10cSrcweir Any a;
484cdf0e10cSrcweir impl_putPropertiesFromStruct( aWinStateInfo, xPropSet );
485cdf0e10cSrcweir a <<= xPropSet;
486cdf0e10cSrcweir xNameContainer->insertByName( rResourceURL, a );
487cdf0e10cSrcweir Reference< XChangesBatch > xFlush( xFactory, UNO_QUERY );
488cdf0e10cSrcweir if ( xFlush.is() )
489cdf0e10cSrcweir xFlush->commitChanges();
490cdf0e10cSrcweir }
491cdf0e10cSrcweir }
492cdf0e10cSrcweir catch ( Exception& )
493cdf0e10cSrcweir {
494cdf0e10cSrcweir }
495cdf0e10cSrcweir }
496cdf0e10cSrcweir }
497cdf0e10cSrcweir }
498cdf0e10cSrcweir }
499cdf0e10cSrcweir }
500cdf0e10cSrcweir else
501cdf0e10cSrcweir throw IllegalArgumentException();
502cdf0e10cSrcweir }
503cdf0e10cSrcweir
504cdf0e10cSrcweir // XNameReplace
replaceByName(const::rtl::OUString & rResourceURL,const css::uno::Any & aPropertySet)505cdf0e10cSrcweir void SAL_CALL ConfigurationAccess_WindowState::replaceByName( const ::rtl::OUString& rResourceURL, const css::uno::Any& aPropertySet )
506cdf0e10cSrcweir throw( IllegalArgumentException, NoSuchElementException, WrappedTargetException, RuntimeException )
507cdf0e10cSrcweir {
508cdf0e10cSrcweir // SAFE
509cdf0e10cSrcweir ResetableGuard aLock( m_aLock );
510cdf0e10cSrcweir
511cdf0e10cSrcweir Sequence< PropertyValue > aPropSet;
512cdf0e10cSrcweir if ( aPropertySet >>= aPropSet )
513cdf0e10cSrcweir {
514cdf0e10cSrcweir ResourceURLToInfoCache::iterator pIter = m_aResourceURLToInfoCache.find( rResourceURL );
515cdf0e10cSrcweir if ( pIter != m_aResourceURLToInfoCache.end() )
516cdf0e10cSrcweir {
517cdf0e10cSrcweir WindowStateInfo& rWinStateInfo = pIter->second;
518cdf0e10cSrcweir impl_fillStructFromSequence( rWinStateInfo, aPropSet );
519cdf0e10cSrcweir m_bModified = sal_True;
520cdf0e10cSrcweir }
521cdf0e10cSrcweir else
522cdf0e10cSrcweir {
523cdf0e10cSrcweir if ( !m_bConfigAccessInitialized )
524cdf0e10cSrcweir {
525cdf0e10cSrcweir impl_initializeConfigAccess();
526cdf0e10cSrcweir m_bConfigAccessInitialized = sal_True;
527cdf0e10cSrcweir }
528cdf0e10cSrcweir
529cdf0e10cSrcweir // Try to ask our configuration access
530cdf0e10cSrcweir Reference< XNameAccess > xNameAccess;
531cdf0e10cSrcweir Any a( m_xConfigAccess->getByName( rResourceURL ));
532cdf0e10cSrcweir
533cdf0e10cSrcweir if ( a >>= xNameAccess )
534cdf0e10cSrcweir {
535cdf0e10cSrcweir WindowStateInfo& rWinStateInfo( impl_insertCacheAndReturnWinState( rResourceURL, xNameAccess ));
536cdf0e10cSrcweir impl_fillStructFromSequence( rWinStateInfo, aPropSet );
537cdf0e10cSrcweir m_bModified = sal_True;
538cdf0e10cSrcweir pIter = m_aResourceURLToInfoCache.find( rResourceURL );
539cdf0e10cSrcweir }
540cdf0e10cSrcweir else
541cdf0e10cSrcweir throw NoSuchElementException();
542cdf0e10cSrcweir }
543cdf0e10cSrcweir
544cdf0e10cSrcweir if ( m_bModified && pIter != m_aResourceURLToInfoCache.end() )
545cdf0e10cSrcweir {
546cdf0e10cSrcweir Reference< XNameContainer > xNameContainer( m_xConfigAccess, UNO_QUERY );
547cdf0e10cSrcweir if ( xNameContainer.is() )
548cdf0e10cSrcweir {
549cdf0e10cSrcweir WindowStateInfo aWinStateInfo( pIter->second );
550cdf0e10cSrcweir ::rtl::OUString aResourceURL( pIter->first );
551cdf0e10cSrcweir m_bModified = sal_False;
552cdf0e10cSrcweir aLock.unlock();
553cdf0e10cSrcweir
554cdf0e10cSrcweir try
555cdf0e10cSrcweir {
556cdf0e10cSrcweir Reference< XPropertySet > xPropSet;
557cdf0e10cSrcweir if ( xNameContainer->getByName( aResourceURL ) >>= xPropSet )
558cdf0e10cSrcweir {
559cdf0e10cSrcweir impl_putPropertiesFromStruct( aWinStateInfo, xPropSet );
560cdf0e10cSrcweir
561cdf0e10cSrcweir Reference< XChangesBatch > xFlush( m_xConfigAccess, UNO_QUERY );
562cdf0e10cSrcweir if ( xFlush.is() )
563cdf0e10cSrcweir xFlush->commitChanges();
564cdf0e10cSrcweir }
565cdf0e10cSrcweir }
566cdf0e10cSrcweir catch ( Exception& )
567cdf0e10cSrcweir {
568cdf0e10cSrcweir }
569cdf0e10cSrcweir }
570cdf0e10cSrcweir }
571cdf0e10cSrcweir }
572cdf0e10cSrcweir else
573cdf0e10cSrcweir throw IllegalArgumentException();
574cdf0e10cSrcweir }
575cdf0e10cSrcweir
576cdf0e10cSrcweir // container.XContainerListener
elementInserted(const ContainerEvent &)577cdf0e10cSrcweir void SAL_CALL ConfigurationAccess_WindowState::elementInserted( const ContainerEvent& ) throw(RuntimeException)
578cdf0e10cSrcweir {
579cdf0e10cSrcweir // do nothing - next time someone wants to retrieve this node we will find it in the configuration
580cdf0e10cSrcweir }
581cdf0e10cSrcweir
elementRemoved(const ContainerEvent &)582cdf0e10cSrcweir void SAL_CALL ConfigurationAccess_WindowState::elementRemoved ( const ContainerEvent& ) throw(RuntimeException)
583cdf0e10cSrcweir {
584cdf0e10cSrcweir //
585cdf0e10cSrcweir }
586cdf0e10cSrcweir
elementReplaced(const ContainerEvent &)587cdf0e10cSrcweir void SAL_CALL ConfigurationAccess_WindowState::elementReplaced( const ContainerEvent& ) throw(RuntimeException)
588cdf0e10cSrcweir {
589cdf0e10cSrcweir //
590cdf0e10cSrcweir }
591cdf0e10cSrcweir
592cdf0e10cSrcweir // lang.XEventListener
disposing(const EventObject & aEvent)593cdf0e10cSrcweir void SAL_CALL ConfigurationAccess_WindowState::disposing( const EventObject& aEvent ) throw(RuntimeException)
594cdf0e10cSrcweir {
595cdf0e10cSrcweir // SAFE
596cdf0e10cSrcweir // remove our reference to the config access
597cdf0e10cSrcweir ResetableGuard aLock( m_aLock );
598cdf0e10cSrcweir
599cdf0e10cSrcweir Reference< XInterface > xIfac1( aEvent.Source, UNO_QUERY );
600cdf0e10cSrcweir Reference< XInterface > xIfac2( m_xConfigAccess, UNO_QUERY );
601cdf0e10cSrcweir if ( xIfac1 == xIfac2 )
602cdf0e10cSrcweir m_xConfigAccess.clear();
603cdf0e10cSrcweir }
604cdf0e10cSrcweir
605cdf0e10cSrcweir // private helper methods
impl_getSequenceFromStruct(const WindowStateInfo & rWinStateInfo)606cdf0e10cSrcweir Any ConfigurationAccess_WindowState::impl_getSequenceFromStruct( const WindowStateInfo& rWinStateInfo )
607cdf0e10cSrcweir {
608cdf0e10cSrcweir sal_Int32 i( 0 );
609cdf0e10cSrcweir sal_Int32 nCount( m_aPropArray.size() );
610cdf0e10cSrcweir Sequence< PropertyValue > aPropSeq;
611cdf0e10cSrcweir
612cdf0e10cSrcweir for ( i = 0; i < nCount; i++ )
613cdf0e10cSrcweir {
614cdf0e10cSrcweir if ( rWinStateInfo.nMask & ( 1 << i ))
615cdf0e10cSrcweir {
616cdf0e10cSrcweir // put value into the return sequence
617cdf0e10cSrcweir sal_Int32 nIndex( aPropSeq.getLength());
618cdf0e10cSrcweir aPropSeq.realloc( nIndex+1 );
619cdf0e10cSrcweir aPropSeq[nIndex].Name = m_aPropArray[i];
620cdf0e10cSrcweir
621cdf0e10cSrcweir switch ( i )
622cdf0e10cSrcweir {
623cdf0e10cSrcweir case PROPERTY_LOCKED:
624cdf0e10cSrcweir aPropSeq[nIndex].Value = makeAny( rWinStateInfo.bLocked ); break;
625cdf0e10cSrcweir case PROPERTY_DOCKED:
626cdf0e10cSrcweir aPropSeq[nIndex].Value = makeAny( rWinStateInfo.bDocked ); break;
627cdf0e10cSrcweir case PROPERTY_VISIBLE:
628cdf0e10cSrcweir aPropSeq[nIndex].Value = makeAny( rWinStateInfo.bVisible ); break;
629cdf0e10cSrcweir case PROPERTY_CONTEXT:
630cdf0e10cSrcweir aPropSeq[nIndex].Value = makeAny( rWinStateInfo.bContext ); break;
631cdf0e10cSrcweir case PROPERTY_HIDEFROMMENU:
632cdf0e10cSrcweir aPropSeq[nIndex].Value = makeAny( rWinStateInfo.bHideFromMenu ); break;
633cdf0e10cSrcweir case PROPERTY_NOCLOSE:
634cdf0e10cSrcweir aPropSeq[nIndex].Value = makeAny( rWinStateInfo.bNoClose ); break;
635cdf0e10cSrcweir case PROPERTY_SOFTCLOSE:
636cdf0e10cSrcweir aPropSeq[nIndex].Value = makeAny( rWinStateInfo.bSoftClose ); break;
637cdf0e10cSrcweir case PROPERTY_CONTEXTACTIVE:
638cdf0e10cSrcweir aPropSeq[nIndex].Value = makeAny( rWinStateInfo.bContextActive ); break;
639cdf0e10cSrcweir case PROPERTY_DOCKINGAREA:
640cdf0e10cSrcweir aPropSeq[nIndex].Value = makeAny( rWinStateInfo.aDockingArea ); break;
641cdf0e10cSrcweir case PROPERTY_POS:
642cdf0e10cSrcweir aPropSeq[nIndex].Value = makeAny( rWinStateInfo.aPos ); break;
643cdf0e10cSrcweir case PROPERTY_SIZE:
644cdf0e10cSrcweir aPropSeq[nIndex].Value = makeAny( rWinStateInfo.aSize ); break;
645cdf0e10cSrcweir case PROPERTY_UINAME:
646cdf0e10cSrcweir aPropSeq[nIndex].Value = makeAny( rWinStateInfo.aUIName ); break;
647cdf0e10cSrcweir case PROPERTY_INTERNALSTATE:
648cdf0e10cSrcweir aPropSeq[nIndex].Value = makeAny( sal_Int32( rWinStateInfo.nInternalState )); break;
649cdf0e10cSrcweir case PROPERTY_STYLE:
650cdf0e10cSrcweir aPropSeq[nIndex].Value = makeAny( sal_Int16( rWinStateInfo.nStyle )); break;
651cdf0e10cSrcweir case PROPERTY_DOCKPOS:
652cdf0e10cSrcweir aPropSeq[nIndex].Value = makeAny( rWinStateInfo.aDockPos ); break;
653cdf0e10cSrcweir case PROPERTY_DOCKSIZE:
654cdf0e10cSrcweir aPropSeq[nIndex].Value = makeAny( rWinStateInfo.aDockSize ); break;
655cdf0e10cSrcweir default:
656cdf0e10cSrcweir DBG_ASSERT( sal_False, "Wrong value for ConfigurationAccess_WindowState. Who has forgotten to add this new property!" );
657cdf0e10cSrcweir }
658cdf0e10cSrcweir }
659cdf0e10cSrcweir }
660cdf0e10cSrcweir
661cdf0e10cSrcweir return makeAny( aPropSeq );
662cdf0e10cSrcweir }
663cdf0e10cSrcweir
impl_insertCacheAndReturnSequence(const rtl::OUString & rResourceURL,Reference<XNameAccess> & xNameAccess)664cdf0e10cSrcweir Any ConfigurationAccess_WindowState::impl_insertCacheAndReturnSequence( const rtl::OUString& rResourceURL, Reference< XNameAccess >& xNameAccess )
665cdf0e10cSrcweir {
666cdf0e10cSrcweir sal_Int32 nMask( 0 );
667cdf0e10cSrcweir sal_Int32 nCount( m_aPropArray.size() );
668cdf0e10cSrcweir sal_Int32 i( 0 );
669cdf0e10cSrcweir sal_Int32 nIndex( 0 );
670cdf0e10cSrcweir Sequence< PropertyValue > aPropSeq;
671cdf0e10cSrcweir WindowStateInfo aWindowStateInfo;
672cdf0e10cSrcweir
673cdf0e10cSrcweir for ( i = 0; i < nCount; i++ )
674cdf0e10cSrcweir {
675cdf0e10cSrcweir try
676cdf0e10cSrcweir {
677cdf0e10cSrcweir bool bAddToSeq( false );
678cdf0e10cSrcweir Any a( xNameAccess->getByName( m_aPropArray[i] ) );
679cdf0e10cSrcweir switch ( i )
680cdf0e10cSrcweir {
681cdf0e10cSrcweir case PROPERTY_LOCKED:
682cdf0e10cSrcweir case PROPERTY_DOCKED:
683cdf0e10cSrcweir case PROPERTY_VISIBLE:
684cdf0e10cSrcweir case PROPERTY_CONTEXT:
685cdf0e10cSrcweir case PROPERTY_HIDEFROMMENU:
686cdf0e10cSrcweir case PROPERTY_NOCLOSE:
687cdf0e10cSrcweir case PROPERTY_SOFTCLOSE:
688cdf0e10cSrcweir case PROPERTY_CONTEXTACTIVE:
689cdf0e10cSrcweir {
690cdf0e10cSrcweir sal_Bool bValue = sal_Bool();
691cdf0e10cSrcweir if ( a >>= bValue )
692cdf0e10cSrcweir {
693cdf0e10cSrcweir sal_Int32 nValue( 1 << i );
694cdf0e10cSrcweir nMask |= nValue;
695cdf0e10cSrcweir bAddToSeq = true;
696cdf0e10cSrcweir switch ( i )
697cdf0e10cSrcweir {
698cdf0e10cSrcweir case PROPERTY_LOCKED:
699cdf0e10cSrcweir aWindowStateInfo.bLocked = bValue; break;
700cdf0e10cSrcweir case PROPERTY_DOCKED:
701cdf0e10cSrcweir aWindowStateInfo.bDocked = bValue; break;
702cdf0e10cSrcweir case PROPERTY_VISIBLE:
703cdf0e10cSrcweir aWindowStateInfo.bVisible = bValue; break;
704cdf0e10cSrcweir case PROPERTY_CONTEXT:
705cdf0e10cSrcweir aWindowStateInfo.bContext = bValue; break;
706cdf0e10cSrcweir case PROPERTY_HIDEFROMMENU:
707cdf0e10cSrcweir aWindowStateInfo.bHideFromMenu = bValue; break;
708cdf0e10cSrcweir case PROPERTY_NOCLOSE:
709cdf0e10cSrcweir aWindowStateInfo.bNoClose = bValue; break;
710cdf0e10cSrcweir case PROPERTY_SOFTCLOSE:
711cdf0e10cSrcweir aWindowStateInfo.bSoftClose = bValue; break;
712cdf0e10cSrcweir case PROPERTY_CONTEXTACTIVE:
713cdf0e10cSrcweir aWindowStateInfo.bContextActive = bValue; break;
714cdf0e10cSrcweir }
715cdf0e10cSrcweir }
716cdf0e10cSrcweir }
717cdf0e10cSrcweir break;
718cdf0e10cSrcweir
719cdf0e10cSrcweir case PROPERTY_DOCKINGAREA:
720cdf0e10cSrcweir {
721cdf0e10cSrcweir sal_Int32 nDockingArea = 0;
722cdf0e10cSrcweir if ( a >>= nDockingArea )
723cdf0e10cSrcweir {
724cdf0e10cSrcweir if (( nDockingArea >= 0 ) &&
725cdf0e10cSrcweir ( nDockingArea <= sal_Int32( DockingArea_DOCKINGAREA_RIGHT )))
726cdf0e10cSrcweir {
727cdf0e10cSrcweir aWindowStateInfo.aDockingArea = (DockingArea)nDockingArea;
728cdf0e10cSrcweir nMask |= WINDOWSTATE_MASK_DOCKINGAREA;
729cdf0e10cSrcweir a = makeAny( aWindowStateInfo.aDockingArea );
730cdf0e10cSrcweir bAddToSeq = true;
731cdf0e10cSrcweir }
732cdf0e10cSrcweir }
733cdf0e10cSrcweir }
734cdf0e10cSrcweir break;
735cdf0e10cSrcweir
736cdf0e10cSrcweir case PROPERTY_POS:
737cdf0e10cSrcweir case PROPERTY_DOCKPOS:
738cdf0e10cSrcweir {
739cdf0e10cSrcweir ::rtl::OUString aString;
740cdf0e10cSrcweir if ( a >>= aString )
741cdf0e10cSrcweir {
742cdf0e10cSrcweir sal_Int32 nToken( 0 );
743cdf0e10cSrcweir ::rtl::OUString aXStr = aString.getToken( 0, ',', nToken );
744cdf0e10cSrcweir if ( nToken > 0 )
745cdf0e10cSrcweir {
746cdf0e10cSrcweir com::sun::star::awt::Point aPos;
747cdf0e10cSrcweir aPos.X = aXStr.toInt32();
748cdf0e10cSrcweir aPos.Y = aString.getToken( 0, ',', nToken ).toInt32();
749cdf0e10cSrcweir
750cdf0e10cSrcweir if ( i == PROPERTY_POS )
751cdf0e10cSrcweir {
752cdf0e10cSrcweir aWindowStateInfo.aPos = aPos;
753cdf0e10cSrcweir nMask |= WINDOWSTATE_MASK_POS;
754cdf0e10cSrcweir }
755cdf0e10cSrcweir else
756cdf0e10cSrcweir {
757cdf0e10cSrcweir aWindowStateInfo.aDockPos = aPos;
758cdf0e10cSrcweir nMask |= WINDOWSTATE_MASK_DOCKPOS;
759cdf0e10cSrcweir }
760cdf0e10cSrcweir
761cdf0e10cSrcweir a <<= aPos;
762cdf0e10cSrcweir bAddToSeq = true;
763cdf0e10cSrcweir }
764cdf0e10cSrcweir }
765cdf0e10cSrcweir }
766cdf0e10cSrcweir break;
767cdf0e10cSrcweir
768cdf0e10cSrcweir case PROPERTY_SIZE:
769cdf0e10cSrcweir case PROPERTY_DOCKSIZE:
770cdf0e10cSrcweir {
771cdf0e10cSrcweir ::rtl::OUString aString;
772cdf0e10cSrcweir if ( a >>= aString )
773cdf0e10cSrcweir {
774cdf0e10cSrcweir sal_Int32 nToken( 0 );
775cdf0e10cSrcweir ::rtl::OUString aStr = aString.getToken( 0, ',', nToken );
776cdf0e10cSrcweir if ( nToken > 0 )
777cdf0e10cSrcweir {
778cdf0e10cSrcweir com::sun::star::awt::Size aSize;
779cdf0e10cSrcweir aSize.Width = aStr.toInt32();
780cdf0e10cSrcweir aSize.Height = aString.getToken( 0, ',', nToken ).toInt32();
781cdf0e10cSrcweir if ( i == PROPERTY_SIZE )
782cdf0e10cSrcweir {
783cdf0e10cSrcweir aWindowStateInfo.aSize = aSize;
784cdf0e10cSrcweir nMask |= WINDOWSTATE_MASK_SIZE;
785cdf0e10cSrcweir }
786cdf0e10cSrcweir else
787cdf0e10cSrcweir {
788cdf0e10cSrcweir aWindowStateInfo.aDockSize = aSize;
789cdf0e10cSrcweir nMask |= WINDOWSTATE_MASK_DOCKSIZE;
790cdf0e10cSrcweir }
791cdf0e10cSrcweir
792cdf0e10cSrcweir a <<= aSize;
793cdf0e10cSrcweir bAddToSeq = true;
794cdf0e10cSrcweir }
795cdf0e10cSrcweir }
796cdf0e10cSrcweir }
797cdf0e10cSrcweir break;
798cdf0e10cSrcweir
799cdf0e10cSrcweir case PROPERTY_UINAME:
800cdf0e10cSrcweir {
801cdf0e10cSrcweir ::rtl::OUString aValue;
802cdf0e10cSrcweir if ( a >>= aValue )
803cdf0e10cSrcweir {
804cdf0e10cSrcweir nMask |= WINDOWSTATE_MASK_UINAME;
805cdf0e10cSrcweir aWindowStateInfo.aUIName = aValue;
806cdf0e10cSrcweir bAddToSeq = true;
807cdf0e10cSrcweir }
808cdf0e10cSrcweir }
809cdf0e10cSrcweir break;
810cdf0e10cSrcweir
811cdf0e10cSrcweir case PROPERTY_INTERNALSTATE:
812cdf0e10cSrcweir {
813cdf0e10cSrcweir sal_uInt32 nValue = 0;
814cdf0e10cSrcweir if ( a >>= nValue )
815cdf0e10cSrcweir {
816cdf0e10cSrcweir nMask |= WINDOWSTATE_MASK_INTERNALSTATE;
817cdf0e10cSrcweir aWindowStateInfo.nInternalState = nValue;
818cdf0e10cSrcweir bAddToSeq = true;
819cdf0e10cSrcweir }
820cdf0e10cSrcweir }
821cdf0e10cSrcweir break;
822cdf0e10cSrcweir
823cdf0e10cSrcweir case PROPERTY_STYLE:
824cdf0e10cSrcweir {
825cdf0e10cSrcweir sal_Int32 nValue = 0;
826cdf0e10cSrcweir if ( a >>= nValue )
827cdf0e10cSrcweir {
828cdf0e10cSrcweir nMask |= WINDOWSTATE_MASK_STYLE;
829cdf0e10cSrcweir aWindowStateInfo.nStyle = sal_uInt16( nValue );
830cdf0e10cSrcweir bAddToSeq = true;
831cdf0e10cSrcweir }
832cdf0e10cSrcweir }
833cdf0e10cSrcweir break;
834cdf0e10cSrcweir
835cdf0e10cSrcweir default:
836cdf0e10cSrcweir DBG_ASSERT( sal_False, "Wrong value for ConfigurationAccess_WindowState. Who has forgotten to add this new property!" );
837cdf0e10cSrcweir }
838cdf0e10cSrcweir
839cdf0e10cSrcweir if ( bAddToSeq )
840cdf0e10cSrcweir {
841cdf0e10cSrcweir // put value into the return sequence
842cdf0e10cSrcweir nIndex = aPropSeq.getLength();
843cdf0e10cSrcweir aPropSeq.realloc( nIndex+1 );
844cdf0e10cSrcweir aPropSeq[nIndex].Name = m_aPropArray[i];
845cdf0e10cSrcweir aPropSeq[nIndex].Value = a;
846cdf0e10cSrcweir }
847cdf0e10cSrcweir }
848cdf0e10cSrcweir catch( com::sun::star::container::NoSuchElementException& )
849cdf0e10cSrcweir {
850cdf0e10cSrcweir }
851cdf0e10cSrcweir catch ( com::sun::star::lang::WrappedTargetException& )
852cdf0e10cSrcweir {
853cdf0e10cSrcweir }
854cdf0e10cSrcweir }
855cdf0e10cSrcweir
856cdf0e10cSrcweir aWindowStateInfo.nMask = nMask;
857cdf0e10cSrcweir m_aResourceURLToInfoCache.insert( ResourceURLToInfoCache::value_type( rResourceURL, aWindowStateInfo ));
858cdf0e10cSrcweir return makeAny( aPropSeq );
859cdf0e10cSrcweir }
860cdf0e10cSrcweir
impl_insertCacheAndReturnWinState(const rtl::OUString & rResourceURL,Reference<XNameAccess> & rNameAccess)861cdf0e10cSrcweir ConfigurationAccess_WindowState::WindowStateInfo& ConfigurationAccess_WindowState::impl_insertCacheAndReturnWinState( const rtl::OUString& rResourceURL, Reference< XNameAccess >& rNameAccess )
862cdf0e10cSrcweir {
863cdf0e10cSrcweir sal_Int32 nMask( 0 );
864cdf0e10cSrcweir sal_Int32 nCount( m_aPropArray.size() );
865cdf0e10cSrcweir sal_Int32 i( 0 );
866cdf0e10cSrcweir Sequence< PropertyValue > aPropSeq;
867cdf0e10cSrcweir WindowStateInfo aWindowStateInfo;
868cdf0e10cSrcweir
869cdf0e10cSrcweir for ( i = 0; i < nCount; i++ )
870cdf0e10cSrcweir {
871cdf0e10cSrcweir try
872cdf0e10cSrcweir {
873cdf0e10cSrcweir Any a( rNameAccess->getByName( m_aPropArray[i] ) );
874cdf0e10cSrcweir switch ( i )
875cdf0e10cSrcweir {
876cdf0e10cSrcweir case PROPERTY_LOCKED:
877cdf0e10cSrcweir case PROPERTY_DOCKED:
878cdf0e10cSrcweir case PROPERTY_VISIBLE:
879cdf0e10cSrcweir case PROPERTY_CONTEXT:
880cdf0e10cSrcweir case PROPERTY_HIDEFROMMENU:
881cdf0e10cSrcweir case PROPERTY_NOCLOSE:
882cdf0e10cSrcweir case PROPERTY_SOFTCLOSE:
883cdf0e10cSrcweir case PROPERTY_CONTEXTACTIVE:
884cdf0e10cSrcweir {
885cdf0e10cSrcweir sal_Bool bValue = sal_Bool();
886cdf0e10cSrcweir if ( a >>= bValue )
887cdf0e10cSrcweir {
888cdf0e10cSrcweir sal_Int32 nValue( 1 << i );
889cdf0e10cSrcweir nMask |= nValue;
890cdf0e10cSrcweir switch ( i )
891cdf0e10cSrcweir {
892cdf0e10cSrcweir case PROPERTY_LOCKED:
893cdf0e10cSrcweir aWindowStateInfo.bLocked = bValue; break;
894cdf0e10cSrcweir case PROPERTY_DOCKED:
895cdf0e10cSrcweir aWindowStateInfo.bDocked = bValue; break;
896cdf0e10cSrcweir case PROPERTY_VISIBLE:
897cdf0e10cSrcweir aWindowStateInfo.bVisible = bValue; break;
898cdf0e10cSrcweir case PROPERTY_CONTEXT:
899cdf0e10cSrcweir aWindowStateInfo.bContext = bValue; break;
900cdf0e10cSrcweir case PROPERTY_HIDEFROMMENU:
901cdf0e10cSrcweir aWindowStateInfo.bHideFromMenu = bValue; break;
902cdf0e10cSrcweir case PROPERTY_NOCLOSE:
903cdf0e10cSrcweir aWindowStateInfo.bNoClose = bValue; break;
904cdf0e10cSrcweir case PROPERTY_SOFTCLOSE:
905cdf0e10cSrcweir aWindowStateInfo.bNoClose = bValue; break;
906cdf0e10cSrcweir case PROPERTY_CONTEXTACTIVE:
907cdf0e10cSrcweir aWindowStateInfo.bContextActive = bValue; break;
908cdf0e10cSrcweir default:
909cdf0e10cSrcweir DBG_ASSERT( sal_False, "Unknown boolean property in WindowState found!" );
910cdf0e10cSrcweir }
911cdf0e10cSrcweir }
912cdf0e10cSrcweir }
913cdf0e10cSrcweir break;
914cdf0e10cSrcweir
915cdf0e10cSrcweir case PROPERTY_DOCKINGAREA:
916cdf0e10cSrcweir {
917cdf0e10cSrcweir sal_Int32 nDockingArea = 0;
918cdf0e10cSrcweir if ( a >>= nDockingArea )
919cdf0e10cSrcweir {
920cdf0e10cSrcweir if (( nDockingArea >= 0 ) &&
921cdf0e10cSrcweir ( nDockingArea <= sal_Int32( DockingArea_DOCKINGAREA_RIGHT )))
922cdf0e10cSrcweir {
923cdf0e10cSrcweir aWindowStateInfo.aDockingArea = (DockingArea)nDockingArea;
924cdf0e10cSrcweir nMask |= WINDOWSTATE_MASK_DOCKINGAREA;
925cdf0e10cSrcweir }
926cdf0e10cSrcweir }
927cdf0e10cSrcweir }
928cdf0e10cSrcweir break;
929cdf0e10cSrcweir
930cdf0e10cSrcweir case PROPERTY_POS:
931cdf0e10cSrcweir case PROPERTY_DOCKPOS:
932cdf0e10cSrcweir {
933cdf0e10cSrcweir ::rtl::OUString aString;
934cdf0e10cSrcweir if ( a >>= aString )
935cdf0e10cSrcweir {
936cdf0e10cSrcweir sal_Int32 nToken( 0 );
937cdf0e10cSrcweir ::rtl::OUString aXStr = aString.getToken( 0, ',', nToken );
938cdf0e10cSrcweir if ( nToken > 0 )
939cdf0e10cSrcweir {
940cdf0e10cSrcweir com::sun::star::awt::Point aPos;
941cdf0e10cSrcweir aPos.X = aXStr.toInt32();
942cdf0e10cSrcweir aPos.Y = aString.getToken( 0, ',', nToken ).toInt32();
943cdf0e10cSrcweir
944cdf0e10cSrcweir if ( i == PROPERTY_POS )
945cdf0e10cSrcweir {
946cdf0e10cSrcweir aWindowStateInfo.aPos = aPos;
947cdf0e10cSrcweir nMask |= WINDOWSTATE_MASK_POS;
948cdf0e10cSrcweir }
949cdf0e10cSrcweir else
950cdf0e10cSrcweir {
951cdf0e10cSrcweir aWindowStateInfo.aDockPos = aPos;
952cdf0e10cSrcweir nMask |= WINDOWSTATE_MASK_DOCKPOS;
953cdf0e10cSrcweir }
954cdf0e10cSrcweir }
955cdf0e10cSrcweir }
956cdf0e10cSrcweir }
957cdf0e10cSrcweir break;
958cdf0e10cSrcweir
959cdf0e10cSrcweir case PROPERTY_SIZE:
960cdf0e10cSrcweir case PROPERTY_DOCKSIZE:
961cdf0e10cSrcweir {
962cdf0e10cSrcweir ::rtl::OUString aString;
963cdf0e10cSrcweir if ( a >>= aString )
964cdf0e10cSrcweir {
965cdf0e10cSrcweir sal_Int32 nToken( 0 );
966cdf0e10cSrcweir ::rtl::OUString aStr = aString.getToken( 0, ',', nToken );
967cdf0e10cSrcweir if ( nToken > 0 )
968cdf0e10cSrcweir {
969cdf0e10cSrcweir com::sun::star::awt::Size aSize;
970cdf0e10cSrcweir aSize.Width = aStr.toInt32();
971cdf0e10cSrcweir aSize.Height = aString.getToken( 0, ',', nToken ).toInt32();
972cdf0e10cSrcweir if ( i == PROPERTY_SIZE )
973cdf0e10cSrcweir {
974cdf0e10cSrcweir aWindowStateInfo.aSize = aSize;
975cdf0e10cSrcweir nMask |= WINDOWSTATE_MASK_SIZE;
976cdf0e10cSrcweir }
977cdf0e10cSrcweir else
978cdf0e10cSrcweir {
979cdf0e10cSrcweir aWindowStateInfo.aDockSize = aSize;
980cdf0e10cSrcweir nMask |= WINDOWSTATE_MASK_DOCKSIZE;
981cdf0e10cSrcweir }
982cdf0e10cSrcweir }
983cdf0e10cSrcweir }
984cdf0e10cSrcweir }
985cdf0e10cSrcweir break;
986cdf0e10cSrcweir
987cdf0e10cSrcweir case PROPERTY_UINAME:
988cdf0e10cSrcweir {
989cdf0e10cSrcweir ::rtl::OUString aValue;
990cdf0e10cSrcweir if ( a >>= aValue )
991cdf0e10cSrcweir {
992cdf0e10cSrcweir nMask |= WINDOWSTATE_MASK_UINAME;
993cdf0e10cSrcweir aWindowStateInfo.aUIName = aValue;
994cdf0e10cSrcweir }
995cdf0e10cSrcweir }
996cdf0e10cSrcweir break;
997cdf0e10cSrcweir
998cdf0e10cSrcweir case PROPERTY_INTERNALSTATE:
999cdf0e10cSrcweir {
1000cdf0e10cSrcweir sal_Int32 nValue = 0;
1001cdf0e10cSrcweir if ( a >>= nValue )
1002cdf0e10cSrcweir {
1003cdf0e10cSrcweir nMask |= WINDOWSTATE_MASK_INTERNALSTATE;
1004cdf0e10cSrcweir aWindowStateInfo.nInternalState = sal_uInt32( nValue );
1005cdf0e10cSrcweir }
1006cdf0e10cSrcweir }
1007cdf0e10cSrcweir break;
1008cdf0e10cSrcweir
1009cdf0e10cSrcweir case PROPERTY_STYLE:
1010cdf0e10cSrcweir {
1011cdf0e10cSrcweir sal_Int32 nValue = 0;
1012cdf0e10cSrcweir if ( a >>= nValue )
1013cdf0e10cSrcweir {
1014cdf0e10cSrcweir nMask |= WINDOWSTATE_MASK_STYLE;
1015cdf0e10cSrcweir aWindowStateInfo.nStyle = sal_uInt16( nValue );
1016cdf0e10cSrcweir }
1017cdf0e10cSrcweir }
1018cdf0e10cSrcweir
1019cdf0e10cSrcweir default:
1020cdf0e10cSrcweir DBG_ASSERT( sal_False, "Wrong value for ConfigurationAccess_WindowState. Who has forgotten to add this new property!" );
1021cdf0e10cSrcweir }
1022cdf0e10cSrcweir }
1023cdf0e10cSrcweir catch( com::sun::star::container::NoSuchElementException& )
1024cdf0e10cSrcweir {
1025cdf0e10cSrcweir }
1026cdf0e10cSrcweir catch ( com::sun::star::lang::WrappedTargetException& )
1027cdf0e10cSrcweir {
1028cdf0e10cSrcweir }
1029cdf0e10cSrcweir }
1030cdf0e10cSrcweir
1031cdf0e10cSrcweir aWindowStateInfo.nMask = nMask;
1032cdf0e10cSrcweir ResourceURLToInfoCache::iterator pIter = (m_aResourceURLToInfoCache.insert( ResourceURLToInfoCache::value_type( rResourceURL, aWindowStateInfo ))).first;
1033cdf0e10cSrcweir return pIter->second;
1034cdf0e10cSrcweir }
1035cdf0e10cSrcweir
impl_getWindowStateFromResourceURL(const rtl::OUString & rResourceURL)1036cdf0e10cSrcweir Any ConfigurationAccess_WindowState::impl_getWindowStateFromResourceURL( const rtl::OUString& rResourceURL )
1037cdf0e10cSrcweir {
1038cdf0e10cSrcweir if ( !m_bConfigAccessInitialized )
1039cdf0e10cSrcweir {
1040cdf0e10cSrcweir impl_initializeConfigAccess();
1041cdf0e10cSrcweir m_bConfigAccessInitialized = sal_True;
1042cdf0e10cSrcweir }
1043cdf0e10cSrcweir
1044cdf0e10cSrcweir try
1045cdf0e10cSrcweir {
1046cdf0e10cSrcweir // Try to ask our configuration access
1047cdf0e10cSrcweir if ( m_xConfigAccess.is() && m_xConfigAccess->hasByName( rResourceURL ) )
1048cdf0e10cSrcweir {
1049cdf0e10cSrcweir
1050cdf0e10cSrcweir Reference< XNameAccess > xNameAccess( m_xConfigAccess->getByName( rResourceURL ), UNO_QUERY );
1051cdf0e10cSrcweir if ( xNameAccess.is() )
1052cdf0e10cSrcweir return impl_insertCacheAndReturnSequence( rResourceURL, xNameAccess );
1053cdf0e10cSrcweir }
1054cdf0e10cSrcweir }
1055cdf0e10cSrcweir catch( com::sun::star::container::NoSuchElementException& )
1056cdf0e10cSrcweir {
1057cdf0e10cSrcweir }
1058cdf0e10cSrcweir catch ( com::sun::star::lang::WrappedTargetException& )
1059cdf0e10cSrcweir {
1060cdf0e10cSrcweir }
1061cdf0e10cSrcweir
1062cdf0e10cSrcweir return Any();
1063cdf0e10cSrcweir }
1064cdf0e10cSrcweir
impl_fillStructFromSequence(WindowStateInfo & rWinStateInfo,const Sequence<PropertyValue> & rSeq)1065cdf0e10cSrcweir void ConfigurationAccess_WindowState::impl_fillStructFromSequence( WindowStateInfo& rWinStateInfo, const Sequence< PropertyValue >& rSeq )
1066cdf0e10cSrcweir {
1067cdf0e10cSrcweir sal_Int32 nCompareCount( m_aPropArray.size() );
1068cdf0e10cSrcweir sal_Int32 nCount( rSeq.getLength() );
1069cdf0e10cSrcweir sal_Int32 i( 0 );
1070cdf0e10cSrcweir
1071cdf0e10cSrcweir for ( i = 0; i < nCount; i++ )
1072cdf0e10cSrcweir {
1073cdf0e10cSrcweir for ( sal_Int32 j = 0; j < nCompareCount; j++ )
1074cdf0e10cSrcweir {
1075cdf0e10cSrcweir if ( rSeq[i].Name.equals( m_aPropArray[j] ))
1076cdf0e10cSrcweir {
1077cdf0e10cSrcweir switch ( j )
1078cdf0e10cSrcweir {
1079cdf0e10cSrcweir case PROPERTY_LOCKED:
1080cdf0e10cSrcweir case PROPERTY_DOCKED:
1081cdf0e10cSrcweir case PROPERTY_VISIBLE:
1082cdf0e10cSrcweir case PROPERTY_CONTEXT:
1083cdf0e10cSrcweir case PROPERTY_HIDEFROMMENU:
1084cdf0e10cSrcweir case PROPERTY_NOCLOSE:
1085cdf0e10cSrcweir case PROPERTY_SOFTCLOSE:
1086cdf0e10cSrcweir case PROPERTY_CONTEXTACTIVE:
1087cdf0e10cSrcweir {
1088cdf0e10cSrcweir sal_Bool bValue = sal_Bool();
1089cdf0e10cSrcweir if ( rSeq[i].Value >>= bValue )
1090cdf0e10cSrcweir {
1091cdf0e10cSrcweir sal_Int32 nValue( 1 << j );
1092cdf0e10cSrcweir rWinStateInfo.nMask |= nValue;
1093cdf0e10cSrcweir switch ( j )
1094cdf0e10cSrcweir {
1095cdf0e10cSrcweir case PROPERTY_LOCKED:
1096cdf0e10cSrcweir rWinStateInfo.bLocked = bValue;
1097cdf0e10cSrcweir break;
1098cdf0e10cSrcweir case PROPERTY_DOCKED:
1099cdf0e10cSrcweir rWinStateInfo.bDocked = bValue;
1100cdf0e10cSrcweir break;
1101cdf0e10cSrcweir case PROPERTY_VISIBLE:
1102cdf0e10cSrcweir rWinStateInfo.bVisible = bValue;
1103cdf0e10cSrcweir break;
1104cdf0e10cSrcweir case PROPERTY_CONTEXT:
1105cdf0e10cSrcweir rWinStateInfo.bContext = bValue;
1106cdf0e10cSrcweir break;
1107cdf0e10cSrcweir case PROPERTY_HIDEFROMMENU:
1108cdf0e10cSrcweir rWinStateInfo.bHideFromMenu = bValue;
1109cdf0e10cSrcweir break;
1110cdf0e10cSrcweir case PROPERTY_NOCLOSE:
1111cdf0e10cSrcweir rWinStateInfo.bNoClose = bValue;
1112cdf0e10cSrcweir break;
1113cdf0e10cSrcweir case PROPERTY_SOFTCLOSE:
1114cdf0e10cSrcweir rWinStateInfo.bSoftClose = bValue;
1115cdf0e10cSrcweir break;
1116cdf0e10cSrcweir case PROPERTY_CONTEXTACTIVE:
1117cdf0e10cSrcweir rWinStateInfo.bContextActive = bValue;
1118cdf0e10cSrcweir break;
1119cdf0e10cSrcweir default:
1120cdf0e10cSrcweir DBG_ASSERT( sal_False, "Unknown boolean property in WindowState found!" );
1121cdf0e10cSrcweir }
1122cdf0e10cSrcweir }
1123cdf0e10cSrcweir }
1124cdf0e10cSrcweir break;
1125cdf0e10cSrcweir
1126cdf0e10cSrcweir case PROPERTY_DOCKINGAREA:
1127cdf0e10cSrcweir {
1128cdf0e10cSrcweir ::com::sun::star::ui::DockingArea eDockingArea;
1129cdf0e10cSrcweir if ( rSeq[i].Value >>= eDockingArea )
1130cdf0e10cSrcweir {
1131cdf0e10cSrcweir rWinStateInfo.aDockingArea = eDockingArea;
1132cdf0e10cSrcweir rWinStateInfo.nMask |= WINDOWSTATE_MASK_DOCKINGAREA;
1133cdf0e10cSrcweir }
1134cdf0e10cSrcweir }
1135cdf0e10cSrcweir break;
1136cdf0e10cSrcweir
1137cdf0e10cSrcweir case PROPERTY_POS:
1138cdf0e10cSrcweir case PROPERTY_DOCKPOS:
1139cdf0e10cSrcweir {
1140cdf0e10cSrcweir com::sun::star::awt::Point aPoint;
1141cdf0e10cSrcweir if ( rSeq[i].Value >>= aPoint )
1142cdf0e10cSrcweir {
1143cdf0e10cSrcweir if ( j == PROPERTY_POS )
1144cdf0e10cSrcweir {
1145cdf0e10cSrcweir rWinStateInfo.aPos = aPoint;
1146cdf0e10cSrcweir rWinStateInfo.nMask |= WINDOWSTATE_MASK_POS;
1147cdf0e10cSrcweir }
1148cdf0e10cSrcweir else
1149cdf0e10cSrcweir {
1150cdf0e10cSrcweir rWinStateInfo.aDockPos = aPoint;
1151cdf0e10cSrcweir rWinStateInfo.nMask |= WINDOWSTATE_MASK_DOCKPOS;
1152cdf0e10cSrcweir }
1153cdf0e10cSrcweir }
1154cdf0e10cSrcweir }
1155cdf0e10cSrcweir break;
1156cdf0e10cSrcweir
1157cdf0e10cSrcweir case PROPERTY_SIZE:
1158cdf0e10cSrcweir case PROPERTY_DOCKSIZE:
1159cdf0e10cSrcweir {
1160cdf0e10cSrcweir com::sun::star::awt::Size aSize;
1161cdf0e10cSrcweir if ( rSeq[i].Value >>= aSize )
1162cdf0e10cSrcweir {
1163cdf0e10cSrcweir if ( j == PROPERTY_SIZE )
1164cdf0e10cSrcweir {
1165cdf0e10cSrcweir rWinStateInfo.aSize = aSize;
1166cdf0e10cSrcweir rWinStateInfo.nMask |= WINDOWSTATE_MASK_SIZE;
1167cdf0e10cSrcweir }
1168cdf0e10cSrcweir else
1169cdf0e10cSrcweir {
1170cdf0e10cSrcweir rWinStateInfo.aDockSize = aSize;
1171cdf0e10cSrcweir rWinStateInfo.nMask |= WINDOWSTATE_MASK_DOCKSIZE;
1172cdf0e10cSrcweir }
1173cdf0e10cSrcweir }
1174cdf0e10cSrcweir }
1175cdf0e10cSrcweir break;
1176cdf0e10cSrcweir
1177cdf0e10cSrcweir case PROPERTY_UINAME:
1178cdf0e10cSrcweir {
1179cdf0e10cSrcweir ::rtl::OUString aValue;
1180cdf0e10cSrcweir if ( rSeq[i].Value >>= aValue )
1181cdf0e10cSrcweir {
1182cdf0e10cSrcweir rWinStateInfo.aUIName = aValue;
1183cdf0e10cSrcweir rWinStateInfo.nMask |= WINDOWSTATE_MASK_UINAME;
1184cdf0e10cSrcweir }
1185cdf0e10cSrcweir }
1186cdf0e10cSrcweir break;
1187cdf0e10cSrcweir
1188cdf0e10cSrcweir case PROPERTY_INTERNALSTATE:
1189cdf0e10cSrcweir {
1190cdf0e10cSrcweir sal_Int32 nValue = 0;
1191cdf0e10cSrcweir if ( rSeq[i].Value >>= nValue )
1192cdf0e10cSrcweir {
1193cdf0e10cSrcweir rWinStateInfo.nInternalState = sal_uInt32( nValue );
1194cdf0e10cSrcweir rWinStateInfo.nMask |= WINDOWSTATE_MASK_INTERNALSTATE;
1195cdf0e10cSrcweir }
1196cdf0e10cSrcweir }
1197cdf0e10cSrcweir break;
1198cdf0e10cSrcweir
1199cdf0e10cSrcweir case PROPERTY_STYLE:
1200cdf0e10cSrcweir {
1201cdf0e10cSrcweir sal_Int32 nValue = 0;
1202cdf0e10cSrcweir if ( rSeq[i].Value >>= nValue )
1203cdf0e10cSrcweir {
1204cdf0e10cSrcweir rWinStateInfo.nStyle = sal_uInt16( nValue );
1205cdf0e10cSrcweir rWinStateInfo.nMask |= WINDOWSTATE_MASK_STYLE;
1206cdf0e10cSrcweir }
1207cdf0e10cSrcweir }
1208cdf0e10cSrcweir break;
1209cdf0e10cSrcweir
1210cdf0e10cSrcweir default:
1211cdf0e10cSrcweir DBG_ASSERT( sal_False, "Wrong value for ConfigurationAccess_WindowState. Who has forgotten to add this new property!" );
1212cdf0e10cSrcweir }
1213cdf0e10cSrcweir
1214cdf0e10cSrcweir break;
1215cdf0e10cSrcweir }
1216cdf0e10cSrcweir }
1217cdf0e10cSrcweir }
1218cdf0e10cSrcweir }
1219cdf0e10cSrcweir
impl_putPropertiesFromStruct(const WindowStateInfo & rWinStateInfo,Reference<XPropertySet> & xPropSet)1220cdf0e10cSrcweir void ConfigurationAccess_WindowState::impl_putPropertiesFromStruct( const WindowStateInfo& rWinStateInfo, Reference< XPropertySet >& xPropSet )
1221cdf0e10cSrcweir {
1222cdf0e10cSrcweir sal_Int32 i( 0 );
1223cdf0e10cSrcweir sal_Int32 nCount( m_aPropArray.size() );
1224cdf0e10cSrcweir Sequence< PropertyValue > aPropSeq;
1225cdf0e10cSrcweir ::rtl::OUString aDelim( ::rtl::OUString::createFromAscii( "," ));
1226cdf0e10cSrcweir
1227cdf0e10cSrcweir for ( i = 0; i < nCount; i++ )
1228cdf0e10cSrcweir {
1229cdf0e10cSrcweir if ( rWinStateInfo.nMask & ( 1 << i ))
1230cdf0e10cSrcweir {
1231cdf0e10cSrcweir try
1232cdf0e10cSrcweir {
1233cdf0e10cSrcweir // put values into the property set
1234cdf0e10cSrcweir switch ( i )
1235cdf0e10cSrcweir {
1236cdf0e10cSrcweir case PROPERTY_LOCKED:
1237cdf0e10cSrcweir xPropSet->setPropertyValue( m_aPropArray[i], makeAny( sal_Bool( rWinStateInfo.bLocked )) ); break;
1238cdf0e10cSrcweir case PROPERTY_DOCKED:
1239cdf0e10cSrcweir xPropSet->setPropertyValue( m_aPropArray[i], makeAny( sal_Bool( rWinStateInfo.bDocked )) ); break;
1240cdf0e10cSrcweir case PROPERTY_VISIBLE:
1241cdf0e10cSrcweir xPropSet->setPropertyValue( m_aPropArray[i], makeAny( sal_Bool( rWinStateInfo.bVisible )) ); break;
1242cdf0e10cSrcweir case PROPERTY_CONTEXT:
1243cdf0e10cSrcweir xPropSet->setPropertyValue( m_aPropArray[i], makeAny( sal_Bool( rWinStateInfo.bContext )) ); break;
1244cdf0e10cSrcweir case PROPERTY_HIDEFROMMENU:
1245cdf0e10cSrcweir xPropSet->setPropertyValue( m_aPropArray[i], makeAny( sal_Bool( rWinStateInfo.bHideFromMenu )) ); break;
1246cdf0e10cSrcweir case PROPERTY_NOCLOSE:
1247cdf0e10cSrcweir xPropSet->setPropertyValue( m_aPropArray[i], makeAny( sal_Bool( rWinStateInfo.bNoClose )) ); break;
1248cdf0e10cSrcweir case PROPERTY_SOFTCLOSE:
1249cdf0e10cSrcweir xPropSet->setPropertyValue( m_aPropArray[i], makeAny( sal_Bool( rWinStateInfo.bSoftClose )) ); break;
1250cdf0e10cSrcweir case PROPERTY_CONTEXTACTIVE:
1251cdf0e10cSrcweir xPropSet->setPropertyValue( m_aPropArray[i], makeAny( sal_Bool( rWinStateInfo.bContextActive )) ); break;
1252cdf0e10cSrcweir case PROPERTY_DOCKINGAREA:
1253cdf0e10cSrcweir xPropSet->setPropertyValue( m_aPropArray[i], makeAny( sal_Int16( rWinStateInfo.aDockingArea ) ) ); break;
1254cdf0e10cSrcweir case PROPERTY_POS:
1255cdf0e10cSrcweir case PROPERTY_DOCKPOS:
1256cdf0e10cSrcweir {
1257cdf0e10cSrcweir ::rtl::OUString aPosStr;
1258cdf0e10cSrcweir if ( i == PROPERTY_POS )
1259cdf0e10cSrcweir aPosStr = ::rtl::OUString::valueOf( rWinStateInfo.aPos.X );
1260cdf0e10cSrcweir else
1261cdf0e10cSrcweir aPosStr = ::rtl::OUString::valueOf( rWinStateInfo.aDockPos.X );
1262cdf0e10cSrcweir aPosStr += aDelim;
1263cdf0e10cSrcweir if ( i == PROPERTY_POS )
1264cdf0e10cSrcweir aPosStr += ::rtl::OUString::valueOf( rWinStateInfo.aPos.Y );
1265cdf0e10cSrcweir else
1266cdf0e10cSrcweir aPosStr += ::rtl::OUString::valueOf( rWinStateInfo.aDockPos.Y );
1267cdf0e10cSrcweir xPropSet->setPropertyValue( m_aPropArray[i], makeAny( aPosStr ) );
1268cdf0e10cSrcweir break;
1269cdf0e10cSrcweir }
1270cdf0e10cSrcweir case PROPERTY_SIZE:
1271cdf0e10cSrcweir case PROPERTY_DOCKSIZE:
1272cdf0e10cSrcweir {
1273cdf0e10cSrcweir ::rtl::OUString aSizeStr;
1274cdf0e10cSrcweir if ( i == PROPERTY_SIZE )
1275cdf0e10cSrcweir aSizeStr = ( ::rtl::OUString::valueOf( rWinStateInfo.aSize.Width ));
1276cdf0e10cSrcweir else
1277cdf0e10cSrcweir aSizeStr = ( ::rtl::OUString::valueOf( rWinStateInfo.aDockSize.Width ));
1278cdf0e10cSrcweir aSizeStr += aDelim;
1279cdf0e10cSrcweir if ( i == PROPERTY_SIZE )
1280cdf0e10cSrcweir aSizeStr += ::rtl::OUString::valueOf( rWinStateInfo.aSize.Height );
1281cdf0e10cSrcweir else
1282cdf0e10cSrcweir aSizeStr += ::rtl::OUString::valueOf( rWinStateInfo.aDockSize.Height );
1283cdf0e10cSrcweir xPropSet->setPropertyValue( m_aPropArray[i], makeAny( aSizeStr ) );
1284cdf0e10cSrcweir break;
1285cdf0e10cSrcweir }
1286cdf0e10cSrcweir case PROPERTY_UINAME:
1287cdf0e10cSrcweir xPropSet->setPropertyValue( m_aPropArray[i], makeAny( rWinStateInfo.aUIName ) ); break;
1288cdf0e10cSrcweir case PROPERTY_INTERNALSTATE:
1289cdf0e10cSrcweir xPropSet->setPropertyValue( m_aPropArray[i], makeAny( sal_Int32( rWinStateInfo.nInternalState )) ); break;
1290cdf0e10cSrcweir case PROPERTY_STYLE:
1291cdf0e10cSrcweir xPropSet->setPropertyValue( m_aPropArray[i], makeAny( sal_Int32( rWinStateInfo.nStyle )) ); break;
1292cdf0e10cSrcweir default:
1293cdf0e10cSrcweir DBG_ASSERT( sal_False, "Wrong value for ConfigurationAccess_WindowState. Who has forgotten to add this new property!" );
1294cdf0e10cSrcweir }
1295cdf0e10cSrcweir }
1296cdf0e10cSrcweir catch( Exception& )
1297cdf0e10cSrcweir {
1298cdf0e10cSrcweir }
1299cdf0e10cSrcweir }
1300cdf0e10cSrcweir }
1301cdf0e10cSrcweir }
1302cdf0e10cSrcweir
impl_initializeConfigAccess()1303cdf0e10cSrcweir sal_Bool ConfigurationAccess_WindowState::impl_initializeConfigAccess()
1304cdf0e10cSrcweir {
1305cdf0e10cSrcweir Sequence< Any > aArgs( 2 );
1306cdf0e10cSrcweir PropertyValue aPropValue;
1307cdf0e10cSrcweir
1308cdf0e10cSrcweir try
1309cdf0e10cSrcweir {
1310cdf0e10cSrcweir aPropValue.Name = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "nodepath" ));
1311cdf0e10cSrcweir aPropValue.Value <<= m_aConfigWindowAccess;
1312cdf0e10cSrcweir aArgs[0] <<= aPropValue;
1313cdf0e10cSrcweir aPropValue.Name = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "lazywrite" ));
1314cdf0e10cSrcweir aPropValue.Value <<= sal_True;
1315cdf0e10cSrcweir aArgs[1] <<= aPropValue;
1316cdf0e10cSrcweir
1317cdf0e10cSrcweir m_xConfigAccess = Reference< XNameAccess >( m_xConfigProvider->createInstanceWithArguments(
1318cdf0e10cSrcweir SERVICENAME_CFGUPDATEACCESS, aArgs ),
1319cdf0e10cSrcweir UNO_QUERY );
1320cdf0e10cSrcweir if ( m_xConfigAccess.is() )
1321cdf0e10cSrcweir {
1322cdf0e10cSrcweir // Add as container listener
1323cdf0e10cSrcweir Reference< XContainer > xContainer( m_xConfigAccess, UNO_QUERY );
1324cdf0e10cSrcweir if ( xContainer.is() )
1325cdf0e10cSrcweir xContainer->addContainerListener( this );
1326cdf0e10cSrcweir }
1327cdf0e10cSrcweir
1328cdf0e10cSrcweir return sal_True;
1329cdf0e10cSrcweir }
1330cdf0e10cSrcweir catch ( WrappedTargetException& )
1331cdf0e10cSrcweir {
1332cdf0e10cSrcweir }
1333cdf0e10cSrcweir catch ( Exception& )
1334cdf0e10cSrcweir {
1335cdf0e10cSrcweir }
1336cdf0e10cSrcweir
1337cdf0e10cSrcweir return sal_False;
1338cdf0e10cSrcweir }
1339cdf0e10cSrcweir
1340cdf0e10cSrcweir
1341cdf0e10cSrcweir //*****************************************************************************************************************
1342cdf0e10cSrcweir // XInterface, XTypeProvider, XServiceInfo
1343cdf0e10cSrcweir //*****************************************************************************************************************
DEFINE_XINTERFACE_4(WindowStateConfiguration,OWeakObject,DIRECT_INTERFACE (css::lang::XTypeProvider),DIRECT_INTERFACE (css::lang::XServiceInfo),DIRECT_INTERFACE (css::container::XNameAccess),DERIVED_INTERFACE (css::container::XElementAccess,css::container::XNameAccess))1344cdf0e10cSrcweir DEFINE_XINTERFACE_4 ( WindowStateConfiguration ,
1345cdf0e10cSrcweir OWeakObject ,
1346cdf0e10cSrcweir DIRECT_INTERFACE( css::lang::XTypeProvider ),
1347cdf0e10cSrcweir DIRECT_INTERFACE( css::lang::XServiceInfo ),
1348cdf0e10cSrcweir DIRECT_INTERFACE( css::container::XNameAccess ),
1349cdf0e10cSrcweir DERIVED_INTERFACE( css::container::XElementAccess, css::container::XNameAccess )
1350cdf0e10cSrcweir )
1351cdf0e10cSrcweir
1352cdf0e10cSrcweir DEFINE_XTYPEPROVIDER_4 ( WindowStateConfiguration ,
1353cdf0e10cSrcweir css::lang::XTypeProvider ,
1354cdf0e10cSrcweir css::lang::XServiceInfo ,
1355cdf0e10cSrcweir css::container::XNameAccess ,
1356cdf0e10cSrcweir css::container::XElementAccess
1357cdf0e10cSrcweir )
1358cdf0e10cSrcweir
1359cdf0e10cSrcweir DEFINE_XSERVICEINFO_ONEINSTANCESERVICE ( WindowStateConfiguration ,
1360cdf0e10cSrcweir ::cppu::OWeakObject ,
1361cdf0e10cSrcweir SERVICENAME_WINDOWSTATECONFIGURATION ,
1362cdf0e10cSrcweir IMPLEMENTATIONNAME_WINDOWSTATECONFIGURATION
1363cdf0e10cSrcweir )
1364cdf0e10cSrcweir
1365cdf0e10cSrcweir DEFINE_INIT_SERVICE ( WindowStateConfiguration, {} )
1366cdf0e10cSrcweir
1367cdf0e10cSrcweir WindowStateConfiguration::WindowStateConfiguration( const Reference< XMultiServiceFactory >& xServiceManager ) :
1368cdf0e10cSrcweir ThreadHelpBase(),
1369cdf0e10cSrcweir m_xServiceManager( xServiceManager )
1370cdf0e10cSrcweir {
1371cdf0e10cSrcweir m_xModuleManager = Reference< XModuleManager >( m_xServiceManager->createInstance( SERVICENAME_MODULEMANAGER ),
1372cdf0e10cSrcweir UNO_QUERY );
1373cdf0e10cSrcweir Reference< XNameAccess > xEmptyNameAccess;
1374cdf0e10cSrcweir Reference< XNameAccess > xNameAccess( m_xModuleManager, UNO_QUERY_THROW );
1375cdf0e10cSrcweir Sequence< rtl::OUString > aElementNames = xNameAccess->getElementNames();
1376cdf0e10cSrcweir Sequence< PropertyValue > aSeq;
1377cdf0e10cSrcweir ::rtl::OUString aModuleIdentifier;
1378cdf0e10cSrcweir
1379cdf0e10cSrcweir for ( sal_Int32 i = 0; i < aElementNames.getLength(); i++ )
1380cdf0e10cSrcweir {
1381cdf0e10cSrcweir aModuleIdentifier = aElementNames[i];
1382cdf0e10cSrcweir if ( xNameAccess->getByName( aModuleIdentifier ) >>= aSeq )
1383cdf0e10cSrcweir {
1384cdf0e10cSrcweir ::rtl::OUString aWindowStateFileStr;
1385cdf0e10cSrcweir for ( sal_Int32 y = 0; y < aSeq.getLength(); y++ )
1386cdf0e10cSrcweir {
1387cdf0e10cSrcweir if ( aSeq[y].Name.equalsAscii("ooSetupFactoryWindowStateConfigRef") )
1388cdf0e10cSrcweir {
1389cdf0e10cSrcweir aSeq[y].Value >>= aWindowStateFileStr;
1390cdf0e10cSrcweir break;
1391cdf0e10cSrcweir }
1392cdf0e10cSrcweir }
1393cdf0e10cSrcweir
1394cdf0e10cSrcweir if ( aWindowStateFileStr.getLength() > 0 )
1395cdf0e10cSrcweir {
1396cdf0e10cSrcweir // Create first mapping ModuleIdentifier ==> Window state configuration file
1397cdf0e10cSrcweir m_aModuleToFileHashMap.insert( ModuleToWindowStateFileMap::value_type( aModuleIdentifier, aWindowStateFileStr ));
1398cdf0e10cSrcweir
1399cdf0e10cSrcweir // Create second mapping Command File ==> Window state configuration instance
1400cdf0e10cSrcweir ModuleToWindowStateConfigHashMap::iterator pIter = m_aModuleToWindowStateHashMap.find( aWindowStateFileStr );
1401cdf0e10cSrcweir if ( pIter == m_aModuleToWindowStateHashMap.end() )
1402cdf0e10cSrcweir m_aModuleToWindowStateHashMap.insert( ModuleToWindowStateConfigHashMap::value_type( aWindowStateFileStr, xEmptyNameAccess ));
1403cdf0e10cSrcweir }
1404cdf0e10cSrcweir }
1405cdf0e10cSrcweir }
1406cdf0e10cSrcweir }
1407cdf0e10cSrcweir
~WindowStateConfiguration()1408cdf0e10cSrcweir WindowStateConfiguration::~WindowStateConfiguration()
1409cdf0e10cSrcweir {
1410cdf0e10cSrcweir ResetableGuard aLock( m_aLock );
1411cdf0e10cSrcweir m_aModuleToFileHashMap.clear();
1412cdf0e10cSrcweir m_aModuleToWindowStateHashMap.clear();
1413cdf0e10cSrcweir }
1414cdf0e10cSrcweir
getByName(const::rtl::OUString & aModuleIdentifier)1415cdf0e10cSrcweir Any SAL_CALL WindowStateConfiguration::getByName( const ::rtl::OUString& aModuleIdentifier )
1416cdf0e10cSrcweir throw (::com::sun::star::container::NoSuchElementException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException)
1417cdf0e10cSrcweir {
1418cdf0e10cSrcweir ResetableGuard aLock( m_aLock );
1419cdf0e10cSrcweir
1420cdf0e10cSrcweir ModuleToWindowStateFileMap::const_iterator pIter = m_aModuleToFileHashMap.find( aModuleIdentifier );
1421cdf0e10cSrcweir if ( pIter != m_aModuleToFileHashMap.end() )
1422cdf0e10cSrcweir {
1423cdf0e10cSrcweir Any a;
1424cdf0e10cSrcweir ::rtl::OUString aWindowStateConfigFile( pIter->second );
1425cdf0e10cSrcweir
1426cdf0e10cSrcweir ModuleToWindowStateConfigHashMap::iterator pModuleIter = m_aModuleToWindowStateHashMap.find( aWindowStateConfigFile );
1427cdf0e10cSrcweir if ( pModuleIter != m_aModuleToWindowStateHashMap.end() )
1428cdf0e10cSrcweir {
1429cdf0e10cSrcweir if ( pModuleIter->second.is() )
1430cdf0e10cSrcweir a = makeAny( pModuleIter->second );
1431cdf0e10cSrcweir else
1432cdf0e10cSrcweir {
1433cdf0e10cSrcweir Reference< XNameAccess > xResourceURLWindowState;
1434cdf0e10cSrcweir ConfigurationAccess_WindowState* pModuleWindowState = new ConfigurationAccess_WindowState( aWindowStateConfigFile, m_xServiceManager );
1435cdf0e10cSrcweir xResourceURLWindowState = Reference< XNameAccess >( static_cast< cppu::OWeakObject* >( pModuleWindowState ),UNO_QUERY );
1436cdf0e10cSrcweir pModuleIter->second = xResourceURLWindowState;
1437cdf0e10cSrcweir a <<= xResourceURLWindowState;
1438cdf0e10cSrcweir }
1439cdf0e10cSrcweir
1440cdf0e10cSrcweir return a;
1441cdf0e10cSrcweir }
1442cdf0e10cSrcweir }
1443cdf0e10cSrcweir
1444cdf0e10cSrcweir throw NoSuchElementException();
1445cdf0e10cSrcweir }
1446cdf0e10cSrcweir
getElementNames()1447cdf0e10cSrcweir Sequence< ::rtl::OUString > SAL_CALL WindowStateConfiguration::getElementNames()
1448cdf0e10cSrcweir throw (::com::sun::star::uno::RuntimeException)
1449cdf0e10cSrcweir {
1450cdf0e10cSrcweir ResetableGuard aLock( m_aLock );
1451cdf0e10cSrcweir
1452cdf0e10cSrcweir Sequence< rtl::OUString > aSeq( m_aModuleToFileHashMap.size() );
1453cdf0e10cSrcweir
1454cdf0e10cSrcweir sal_Int32 n = 0;
1455cdf0e10cSrcweir ModuleToWindowStateFileMap::const_iterator pIter = m_aModuleToFileHashMap.begin();
1456cdf0e10cSrcweir while ( pIter != m_aModuleToFileHashMap.end() )
1457cdf0e10cSrcweir {
1458cdf0e10cSrcweir aSeq[n] = pIter->first;
1459cdf0e10cSrcweir ++pIter;
1460cdf0e10cSrcweir }
1461cdf0e10cSrcweir
1462cdf0e10cSrcweir return aSeq;
1463cdf0e10cSrcweir }
1464cdf0e10cSrcweir
hasByName(const::rtl::OUString & aName)1465cdf0e10cSrcweir sal_Bool SAL_CALL WindowStateConfiguration::hasByName( const ::rtl::OUString& aName )
1466cdf0e10cSrcweir throw (::com::sun::star::uno::RuntimeException)
1467cdf0e10cSrcweir {
1468cdf0e10cSrcweir ResetableGuard aLock( m_aLock );
1469cdf0e10cSrcweir
1470cdf0e10cSrcweir ModuleToWindowStateFileMap::const_iterator pIter = m_aModuleToFileHashMap.find( aName );
1471cdf0e10cSrcweir return ( pIter != m_aModuleToFileHashMap.end() );
1472cdf0e10cSrcweir }
1473cdf0e10cSrcweir
1474cdf0e10cSrcweir // XElementAccess
getElementType()1475cdf0e10cSrcweir Type SAL_CALL WindowStateConfiguration::getElementType()
1476cdf0e10cSrcweir throw (::com::sun::star::uno::RuntimeException)
1477cdf0e10cSrcweir {
1478cdf0e10cSrcweir return( ::getCppuType( (const Reference< XNameAccess >*)NULL ) );
1479cdf0e10cSrcweir }
1480cdf0e10cSrcweir
hasElements()1481cdf0e10cSrcweir sal_Bool SAL_CALL WindowStateConfiguration::hasElements()
1482cdf0e10cSrcweir throw (::com::sun::star::uno::RuntimeException)
1483cdf0e10cSrcweir {
1484cdf0e10cSrcweir // We always have at least one module. So it is valid to return true!
1485cdf0e10cSrcweir return sal_True;
1486cdf0e10cSrcweir }
1487cdf0e10cSrcweir
1488cdf0e10cSrcweir } // namespace framework
1489cdf0e10cSrcweir
1490