1*6d739b60SAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*6d739b60SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*6d739b60SAndrew Rist * or more contributor license agreements. See the NOTICE file 5*6d739b60SAndrew Rist * distributed with this work for additional information 6*6d739b60SAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*6d739b60SAndrew Rist * to you under the Apache License, Version 2.0 (the 8*6d739b60SAndrew Rist * "License"); you may not use this file except in compliance 9*6d739b60SAndrew Rist * with the License. You may obtain a copy of the License at 10cdf0e10cSrcweir * 11*6d739b60SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12cdf0e10cSrcweir * 13*6d739b60SAndrew Rist * Unless required by applicable law or agreed to in writing, 14*6d739b60SAndrew Rist * software distributed under the License is distributed on an 15*6d739b60SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*6d739b60SAndrew Rist * KIND, either express or implied. See the License for the 17*6d739b60SAndrew Rist * specific language governing permissions and limitations 18*6d739b60SAndrew Rist * under the License. 19cdf0e10cSrcweir * 20*6d739b60SAndrew Rist *************************************************************/ 21*6d739b60SAndrew Rist 22*6d739b60SAndrew 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 { 217cdf0e10cSrcweir 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, 255cdf0e10cSrcweir OUStringHashCode, 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 //***************************************************************************************************************** 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 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 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 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 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 380cdf0e10cSrcweir Type SAL_CALL ConfigurationAccess_WindowState::getElementType() 381cdf0e10cSrcweir throw ( RuntimeException ) 382cdf0e10cSrcweir { 383cdf0e10cSrcweir return( ::getCppuType( (const Sequence< PropertyValue >*)NULL ) ); 384cdf0e10cSrcweir } 385cdf0e10cSrcweir 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 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 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 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 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 582cdf0e10cSrcweir void SAL_CALL ConfigurationAccess_WindowState::elementRemoved ( const ContainerEvent& ) throw(RuntimeException) 583cdf0e10cSrcweir { 584cdf0e10cSrcweir // 585cdf0e10cSrcweir } 586cdf0e10cSrcweir 587cdf0e10cSrcweir void SAL_CALL ConfigurationAccess_WindowState::elementReplaced( const ContainerEvent& ) throw(RuntimeException) 588cdf0e10cSrcweir { 589cdf0e10cSrcweir // 590cdf0e10cSrcweir } 591cdf0e10cSrcweir 592cdf0e10cSrcweir // lang.XEventListener 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 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 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 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 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 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 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 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 //***************************************************************************************************************** 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 1408cdf0e10cSrcweir WindowStateConfiguration::~WindowStateConfiguration() 1409cdf0e10cSrcweir { 1410cdf0e10cSrcweir ResetableGuard aLock( m_aLock ); 1411cdf0e10cSrcweir m_aModuleToFileHashMap.clear(); 1412cdf0e10cSrcweir m_aModuleToWindowStateHashMap.clear(); 1413cdf0e10cSrcweir } 1414cdf0e10cSrcweir 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 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 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 1475cdf0e10cSrcweir Type SAL_CALL WindowStateConfiguration::getElementType() 1476cdf0e10cSrcweir throw (::com::sun::star::uno::RuntimeException) 1477cdf0e10cSrcweir { 1478cdf0e10cSrcweir return( ::getCppuType( (const Reference< XNameAccess >*)NULL ) ); 1479cdf0e10cSrcweir } 1480cdf0e10cSrcweir 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