LCOV - code coverage report
Current view: top level - framework/source/uiconfiguration - windowstateconfiguration.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 360 589 61.1 %
Date: 2012-08-25 Functions: 31 51 60.8 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 383 1079 35.5 %

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

Generated by: LCOV version 1.10