LCOV - code coverage report
Current view: top level - svtools/source/config - miscopt.cxx (source / functions) Hit Total Coverage
Test: commit c8344322a7af75b84dd3ca8f78b05543a976dfd5 Lines: 215 301 71.4 %
Date: 2015-06-13 12:38:46 Functions: 34 65 52.3 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /*
       3             :  * This file is part of the LibreOffice project.
       4             :  *
       5             :  * This Source Code Form is subject to the terms of the Mozilla Public
       6             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       7             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       8             :  *
       9             :  * This file incorporates work covered by the following license notice:
      10             :  *
      11             :  *   Licensed to the Apache Software Foundation (ASF) under one or more
      12             :  *   contributor license agreements. See the NOTICE file distributed
      13             :  *   with this work for additional information regarding copyright
      14             :  *   ownership. The ASF licenses this file to you under the Apache
      15             :  *   License, Version 2.0 (the "License"); you may not use this file
      16             :  *   except in compliance with the License. You may obtain a copy of
      17             :  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
      18             :  */
      19             : 
      20             : #include <svtools/miscopt.hxx>
      21             : #include <unotools/configmgr.hxx>
      22             : #include <unotools/configitem.hxx>
      23             : #include <tools/debug.hxx>
      24             : #include <com/sun/star/uno/Any.hxx>
      25             : #include <com/sun/star/uno/Sequence.hxx>
      26             : #include <tools/link.hxx>
      27             : 
      28             : #include <rtl/instance.hxx>
      29             : #include "itemholder2.hxx"
      30             : 
      31             : #include <svtools/imgdef.hxx>
      32             : #include <vcl/svapp.hxx>
      33             : #include <vcl/settings.hxx>
      34             : 
      35             : #include <list>
      36             : 
      37             : using namespace ::utl                   ;
      38             : using namespace ::osl                   ;
      39             : using namespace ::com::sun::star::uno   ;
      40             : using namespace ::com::sun::star;
      41             : 
      42             : #define ROOTNODE_MISC                       "Office.Common/Misc"
      43             : 
      44             : // PROPERTYHANDLE defines must be sequential from zero for Commit/Load
      45             : #define PROPERTYNAME_PLUGINSENABLED         "PluginsEnabled"
      46             : #define PROPERTYHANDLE_PLUGINSENABLED           0
      47             : #define PROPERTYNAME_SYMBOLSET              "SymbolSet"
      48             : #define PROPERTYHANDLE_SYMBOLSET                1
      49             : #define PROPERTYNAME_TOOLBOXSTYLE           "ToolboxStyle"
      50             : #define PROPERTYHANDLE_TOOLBOXSTYLE             2
      51             : #define PROPERTYNAME_USESYSTEMFILEDIALOG    "UseSystemFileDialog"
      52             : #define PROPERTYHANDLE_USESYSTEMFILEDIALOG      3
      53             : #define PROPERTYNAME_ICONTHEME              "SymbolStyle"
      54             : #define PROPERTYHANDLE_SYMBOLSTYLE              4
      55             : #define PROPERTYNAME_USESYSTEMPRINTDIALOG   "UseSystemPrintDialog"
      56             : #define PROPERTYHANDLE_USESYSTEMPRINTDIALOG     5
      57             : #define PROPERTYNAME_SHOWLINKWARNINGDIALOG  "ShowLinkWarningDialog"
      58             : #define PROPERTYHANDLE_SHOWLINKWARNINGDIALOG    6
      59             : #define PROPERTYNAME_DISABLEUICUSTOMIZATION "DisableUICustomization"
      60             : #define PROPERTYHANDLE_DISABLEUICUSTOMIZATION   7
      61             : #define PROPERTYNAME_ALWAYSALLOWSAVE        "AlwaysAllowSave"
      62             : #define PROPERTYHANDLE_ALWAYSALLOWSAVE          8
      63             : #define PROPERTYNAME_EXPERIMENTALMODE       "ExperimentalMode"
      64             : #define PROPERTYHANDLE_EXPERIMENTALMODE         9
      65             : #define PROPERTYNAME_MACRORECORDERMODE       "MacroRecorderMode"
      66             : #define PROPERTYHANDLE_MACRORECORDERMODE        10
      67             : 
      68             : #define VCL_TOOLBOX_STYLE_FLAT              ((sal_uInt16)0x0004) // from <vcl/toolbox.hxx>
      69             : 
      70             : class SvtMiscOptions_Impl : public ConfigItem
      71             : {
      72             :     private:
      73             :     ::std::list<Link<>> aList;
      74             :     bool        m_bUseSystemFileDialog;
      75             :     bool        m_bIsUseSystemFileDialogRO;
      76             :     bool        m_bPluginsEnabled;
      77             :     bool        m_bIsPluginsEnabledRO;
      78             :     sal_Int16   m_nSymbolsSize;
      79             :     bool        m_bIsSymbolsSizeRO;
      80             :     bool        m_bIsSymbolsStyleRO;
      81             :     sal_Int16   m_nToolboxStyle;
      82             :     bool        m_bIsToolboxStyleRO;
      83             :     bool        m_bUseSystemPrintDialog;
      84             :     bool        m_bIsUseSystemPrintDialogRO;
      85             :     bool        m_bShowLinkWarningDialog;
      86             :     bool        m_bIsShowLinkWarningDialogRO;
      87             :     bool        m_bDisableUICustomization;
      88             :     bool        m_bAlwaysAllowSave;
      89             :     bool        m_bExperimentalMode;
      90             :     bool        m_bMacroRecorderMode;
      91             :     bool        m_bIconThemeWasSetAutomatically;
      92             : 
      93             :         virtual void ImplCommit() SAL_OVERRIDE;
      94             : 
      95             :     public:
      96             : 
      97             :          SvtMiscOptions_Impl();
      98             :         virtual ~SvtMiscOptions_Impl();
      99             : 
     100             :         /*-****************************************************************************************************
     101             :             @short      called for notify of configmanager
     102             :             @descr      These method is called from the ConfigManager before application ends or from the
     103             :                          PropertyChangeListener if the sub tree broadcasts changes. You must update your
     104             :                         internal values.
     105             : 
     106             :             @seealso    baseclass ConfigItem
     107             : 
     108             :             @param      "seqPropertyNames" is the list of properties which should be updated.
     109             :         *//*-*****************************************************************************************************/
     110             : 
     111             :         virtual void Notify( const Sequence< OUString >& seqPropertyNames ) SAL_OVERRIDE;
     112             : 
     113             :         /** loads required data from the configuration. It's called in the constructor to
     114             :          read all entries and form ::Notify to re-read changed settings
     115             : 
     116             :          */
     117             :         void Load( const Sequence< OUString >& rPropertyNames );
     118             : 
     119             :         //  public interface
     120             : 
     121             : 
     122         118 :         inline bool UseSystemFileDialog() const
     123         118 :         { return m_bUseSystemFileDialog; }
     124             : 
     125         232 :         inline void SetUseSystemFileDialog( bool bSet )
     126         232 :         {  m_bUseSystemFileDialog = bSet; SetModified(); }
     127             : 
     128           0 :         inline bool IsUseSystemFileDialogReadOnly() const
     129           0 :         { return m_bIsUseSystemFileDialogRO; }
     130             : 
     131        1346 :         inline bool DisableUICustomization() const
     132        1346 :         { return m_bDisableUICustomization; }
     133             : 
     134           0 :         inline void SetSaveAlwaysAllowed( bool bSet )
     135           0 :         { m_bAlwaysAllowSave = bSet; SetModified(); }
     136             : 
     137        1723 :         inline bool IsSaveAlwaysAllowed() const
     138        1723 :         { return m_bAlwaysAllowSave; }
     139             : 
     140           0 :         inline void SetExperimentalMode( bool bSet )
     141           0 :         { m_bExperimentalMode = bSet; SetModified(); }
     142             : 
     143       29247 :         inline bool IsExperimentalMode() const
     144       29247 :         { return m_bExperimentalMode; }
     145             : 
     146           0 :         inline void SetMacroRecorderMode( bool bSet )
     147           0 :         { m_bMacroRecorderMode = bSet; SetModified(); }
     148             : 
     149           0 :         inline bool IsMacroRecorderMode() const
     150           0 :         { return m_bMacroRecorderMode; }
     151             : 
     152           0 :         inline bool IsPluginsEnabled() const
     153           0 :         { return m_bPluginsEnabled; }
     154             : 
     155       14051 :         inline sal_Int16 GetSymbolsSize()
     156       14051 :         { return m_nSymbolsSize; }
     157             : 
     158             :         void SetSymbolsSize( sal_Int16 nSet );
     159             : 
     160             :         static OUString GetIconTheme();
     161             : 
     162             :         enum SetModifiedFlag { SET_MODIFIED, DONT_SET_MODIFIED };
     163             : 
     164             :         /** Set the icon theme
     165             :          *
     166             :          * @param theme
     167             :          * The name of the icon theme to use.
     168             :          *
     169             :          * @param setModified
     170             :          * Whether to call SetModified() and CallListeners().
     171             :          *
     172             :          * @internal
     173             :          * The @p setModified flag was introduced because the unittests fail if we call SetModified()
     174             :          * during initialization in the constructor.
     175             :          */
     176             :         void
     177             :         SetIconTheme(const OUString &theme, SetModifiedFlag setModified = SET_MODIFIED );
     178             : 
     179           0 :         bool IconThemeWasSetAutomatically()
     180           0 :         {return m_bIconThemeWasSetAutomatically;}
     181             : 
     182             :         // translate to VCL settings ( "0" = 3D, "1" = FLAT )
     183        9522 :         inline sal_Int16 GetToolboxStyle()
     184        9522 :         { return m_nToolboxStyle ? VCL_TOOLBOX_STYLE_FLAT : 0; }
     185             : 
     186             :         // translate from VCL settings
     187             :         void SetToolboxStyle( sal_Int16 nStyle, bool _bSetModified );
     188             : 
     189           0 :         inline bool UseSystemPrintDialog() const
     190           0 :         { return m_bUseSystemPrintDialog; }
     191             : 
     192           0 :         inline void SetUseSystemPrintDialog( bool bSet )
     193           0 :         {  m_bUseSystemPrintDialog = bSet; SetModified(); }
     194             : 
     195           0 :         inline bool ShowLinkWarningDialog() const
     196           0 :         { return m_bShowLinkWarningDialog; }
     197             : 
     198           0 :         void SetShowLinkWarningDialog( bool bSet )
     199           0 :         {  m_bShowLinkWarningDialog = bSet; SetModified(); }
     200             : 
     201           0 :         bool IsShowLinkWarningDialogReadOnly() const
     202           0 :         { return m_bIsShowLinkWarningDialogRO; }
     203             : 
     204             :         void AddListenerLink( const Link<>& rLink );
     205             :         void RemoveListenerLink( const Link<>& rLink );
     206             :         void CallListeners();
     207             : 
     208             : 
     209             :     //  private methods
     210             : 
     211             : 
     212             :     private:
     213             : 
     214             :         /*-****************************************************************************************************
     215             :             @short      return list of key names of our configuration management which represent oue module tree
     216             :             @descr      These methods return a static const list of key names. We need it to get needed values from our
     217             :                         configuration management.
     218             :             @return     A list of needed configuration keys is returned.
     219             :         *//*-*****************************************************************************************************/
     220             : 
     221             :         static Sequence< OUString > GetPropertyNames();
     222             : };
     223             : 
     224             : 
     225             : //  constructor
     226             : 
     227         185 : SvtMiscOptions_Impl::SvtMiscOptions_Impl()
     228             :     // Init baseclasses first
     229             :     : ConfigItem( ROOTNODE_MISC )
     230             : 
     231             :     , m_bUseSystemFileDialog( false )
     232             :     , m_bIsUseSystemFileDialogRO( false )
     233             :     , m_bPluginsEnabled( false )
     234             :     , m_bIsPluginsEnabledRO( false )
     235             :     , m_nSymbolsSize( 0 )
     236             :     , m_bIsSymbolsSizeRO( false )
     237             :     , m_bIsSymbolsStyleRO( false )
     238             :     , m_nToolboxStyle( 1 )
     239             :     , m_bIsToolboxStyleRO( false )
     240             :     , m_bUseSystemPrintDialog( false )
     241             :     , m_bIsUseSystemPrintDialogRO( false )
     242             :     , m_bShowLinkWarningDialog( true )
     243             :     , m_bIsShowLinkWarningDialogRO( false )
     244             :     , m_bAlwaysAllowSave( false )
     245             :     , m_bExperimentalMode( false )
     246             :     , m_bMacroRecorderMode( false )
     247         185 :     , m_bIconThemeWasSetAutomatically( false )
     248             : {
     249             :     // Use our static list of configuration keys to get his values.
     250         185 :     Sequence< OUString >    seqNames    = GetPropertyNames  (           );
     251         185 :     Load( seqNames );
     252         370 :     Sequence< Any >         seqValues   = GetProperties     ( seqNames  );
     253         370 :     Sequence< sal_Bool >    seqRO       = GetReadOnlyStates ( seqNames  );
     254             : 
     255             :     // Safe impossible cases.
     256             :     // We need values from ALL configuration keys.
     257             :     // Follow assignment use order of values in relation to our list of key names!
     258             :     DBG_ASSERT( !(seqNames.getLength()!=seqValues.getLength()), "SvtMiscOptions_Impl::SvtMiscOptions_Impl()\nI miss some values of configuration keys!\n" );
     259             : 
     260             :     // Copy values from list in right order to our internal member.
     261         185 :     sal_Int32 nPropertyCount = seqValues.getLength();
     262        2220 :     for( sal_Int32 nProperty=0; nProperty<nPropertyCount; ++nProperty )
     263             :     {
     264        2035 :         if (!seqValues[nProperty].hasValue())
     265           0 :             continue;
     266        2035 :         switch( nProperty )
     267             :         {
     268             :             case PROPERTYHANDLE_PLUGINSENABLED :
     269             :             {
     270         185 :                 if( !(seqValues[nProperty] >>= m_bPluginsEnabled) )
     271             :                 {
     272             :                     OSL_FAIL("Wrong type of \"Misc\\PluginsEnabled\"!" );
     273             :                 }
     274         185 :                 m_bIsPluginsEnabledRO = seqRO[nProperty];
     275         185 :                 break;
     276             :             }
     277             : 
     278             :             case PROPERTYHANDLE_SYMBOLSET :
     279             :             {
     280         185 :                 if( !(seqValues[nProperty] >>= m_nSymbolsSize) )
     281             :                 {
     282             :                     OSL_FAIL("Wrong type of \"Misc\\SymbolSet\"!" );
     283             :                 }
     284         185 :                 m_bIsSymbolsSizeRO = seqRO[nProperty];
     285         185 :                 break;
     286             :             }
     287             : 
     288             :             case PROPERTYHANDLE_TOOLBOXSTYLE :
     289             :             {
     290         185 :                 if( !(seqValues[nProperty] >>= m_nToolboxStyle) )
     291             :                 {
     292             :                     OSL_FAIL("Wrong type of \"Misc\\ToolboxStyle\"!" );
     293             :                 }
     294         185 :                 m_bIsToolboxStyleRO = seqRO[nProperty];
     295         185 :                 break;
     296             :             }
     297             : 
     298             :             case PROPERTYHANDLE_USESYSTEMFILEDIALOG :
     299             :             {
     300         185 :                 if( !(seqValues[nProperty] >>= m_bUseSystemFileDialog) )
     301             :                 {
     302             :                     OSL_FAIL("Wrong type of \"Misc\\UseSystemFileDialog\"!" );
     303             :                 }
     304         185 :                 m_bIsUseSystemFileDialogRO = seqRO[nProperty];
     305         185 :                 break;
     306             :             }
     307             : 
     308             :             case PROPERTYHANDLE_USESYSTEMPRINTDIALOG :
     309             :             {
     310         185 :                 if( !(seqValues[nProperty] >>= m_bUseSystemPrintDialog) )
     311             :                 {
     312             :                     OSL_FAIL("Wrong type of \"Misc\\UseSystemPrintDialog\"!" );
     313             :                 }
     314         185 :                 m_bIsUseSystemPrintDialogRO = seqRO[nProperty];
     315         185 :                 break;
     316             :             }
     317             : 
     318             :             case PROPERTYHANDLE_SHOWLINKWARNINGDIALOG :
     319             :             {
     320         185 :                 if( !(seqValues[nProperty] >>= m_bShowLinkWarningDialog) )
     321             :                 {
     322             :                     OSL_FAIL("Wrong type of \"Misc\\ShowLinkWarningDialog\"!" );
     323             :                 }
     324         185 :                 m_bIsShowLinkWarningDialogRO = seqRO[nProperty];
     325         185 :                 break;
     326             :             }
     327             : 
     328             :             case PROPERTYHANDLE_SYMBOLSTYLE :
     329             :             {
     330         185 :                 OUString aIconTheme;
     331         185 :                 if (seqValues[nProperty] >>= aIconTheme)
     332         185 :                     SetIconTheme(aIconTheme, DONT_SET_MODIFIED);
     333             :                 else
     334             :                     OSL_FAIL("Wrong type of \"Misc\\SymbolStyle\"!" );
     335             : 
     336         185 :                 m_bIsSymbolsStyleRO = seqRO[nProperty];
     337         185 :                 break;
     338             :             }
     339             : 
     340             :             case PROPERTYHANDLE_DISABLEUICUSTOMIZATION :
     341             :             {
     342         185 :                 if( !(seqValues[nProperty] >>= m_bDisableUICustomization) )
     343             :                     OSL_FAIL("Wrong type of \"Misc\\DisableUICustomization\"!" );
     344         185 :                 break;
     345             :             }
     346             :             case PROPERTYHANDLE_ALWAYSALLOWSAVE :
     347             :             {
     348         185 :                 if( !(seqValues[nProperty] >>= m_bAlwaysAllowSave) )
     349             :                     OSL_FAIL("Wrong type of \"Misc\\AlwaysAllowSave\"!" );
     350         185 :                 break;
     351             :             }
     352             :             case PROPERTYHANDLE_EXPERIMENTALMODE :
     353             :             {
     354         185 :                 if( !(seqValues[nProperty] >>= m_bExperimentalMode) )
     355             :                     OSL_FAIL("Wrong type of \"Misc\\ExperimentalMode\"!" );
     356         185 :                 break;
     357             :             }
     358             :             case PROPERTYHANDLE_MACRORECORDERMODE :
     359             :             {
     360         185 :                 if( !(seqValues[nProperty] >>= m_bMacroRecorderMode) )
     361             :                     OSL_FAIL("Wrong type of \"Misc\\MacroRecorderMode\"!" );
     362         185 :                 break;
     363             :             }
     364             :         }
     365             :     }
     366             : 
     367             :     // Enable notification mechanism of our baseclass.
     368             :     // We need it to get information about changes outside these class on our used configuration keys!
     369         370 :     EnableNotification( seqNames );
     370         185 : }
     371             : 
     372             : 
     373             : //  destructor
     374             : 
     375         366 : SvtMiscOptions_Impl::~SvtMiscOptions_Impl()
     376             : {
     377             :     assert(!IsModified()); // should have been committed
     378         366 : }
     379             : 
     380        2035 : static int lcl_MapPropertyName( const OUString& rCompare,
     381             :                 const uno::Sequence< OUString>& aInternalPropertyNames)
     382             : {
     383       12210 :     for(int nProp = 0; nProp < aInternalPropertyNames.getLength(); ++nProp)
     384             :     {
     385       12210 :         if( aInternalPropertyNames[nProp] == rCompare )
     386        2035 :             return nProp;
     387             :     }
     388           0 :     return -1;
     389             : }
     390             : 
     391         185 : void SvtMiscOptions_Impl::Load( const Sequence< OUString >& rPropertyNames )
     392             : {
     393         185 :     const uno::Sequence< OUString> aInternalPropertyNames( GetPropertyNames());
     394         370 :     Sequence< Any > seqValues = GetProperties( rPropertyNames  );
     395             : 
     396             :     // Safe impossible cases.
     397             :     // We need values from ALL configuration keys.
     398             :     // Follow assignment use order of values in relation to our list of key names!
     399             :     DBG_ASSERT( !(rPropertyNames.getLength()!=seqValues.getLength()), "SvtSecurityOptions_Impl::SvtSecurityOptions_Impl()\nI miss some values of configuration keys!\n" );
     400             : 
     401             :     // Copy values from list in right order to our internal member.
     402         185 :     sal_Int32 nPropertyCount = seqValues.getLength();
     403        2220 :     for( sal_Int32 nProperty=0; nProperty<nPropertyCount; ++nProperty )
     404             :     {
     405        2035 :         if (!seqValues[nProperty].hasValue())
     406           0 :             continue;
     407        2035 :         switch( lcl_MapPropertyName(rPropertyNames[nProperty], aInternalPropertyNames) )
     408             :         {
     409             :             case PROPERTYHANDLE_PLUGINSENABLED      :   {
     410         185 :                                                             if( !(seqValues[nProperty] >>= m_bPluginsEnabled) )
     411             :                                                             {
     412             :                                                                 OSL_FAIL("Wrong type of \"Misc\\PluginsEnabled\"!" );
     413             :                                                             }
     414             :                                                         }
     415         185 :                                                     break;
     416             :             case PROPERTYHANDLE_SYMBOLSET           :   {
     417         185 :                                                             if( !(seqValues[nProperty] >>= m_nSymbolsSize) )
     418             :                                                             {
     419             :                                                                 OSL_FAIL("Wrong type of \"Misc\\SymbolSet\"!" );
     420             :                                                             }
     421             :                                                         }
     422         185 :                                                     break;
     423             :             case PROPERTYHANDLE_TOOLBOXSTYLE        :   {
     424         185 :                                                             if( !(seqValues[nProperty] >>= m_nToolboxStyle) )
     425             :                                                             {
     426             :                                                                 OSL_FAIL("Wrong type of \"Misc\\ToolboxStyle\"!" );
     427             :                                                             }
     428             :                                                         }
     429         185 :                                                     break;
     430             :             case PROPERTYHANDLE_USESYSTEMFILEDIALOG      :   {
     431         185 :                                                             if( !(seqValues[nProperty] >>= m_bUseSystemFileDialog) )
     432             :                                                             {
     433             :                                                                 OSL_FAIL("Wrong type of \"Misc\\UseSystemFileDialog\"!" );
     434             :                                                             }
     435             :                                                         }
     436         185 :                                                     break;
     437             :             case PROPERTYHANDLE_USESYSTEMPRINTDIALOG     :   {
     438         185 :                                                             if( !(seqValues[nProperty] >>= m_bUseSystemPrintDialog) )
     439             :                                                             {
     440             :                                                                 OSL_FAIL("Wrong type of \"Misc\\UseSystemPrintDialog\"!" );
     441             :                                                             }
     442             :                                                         }
     443         185 :                                                     break;
     444             :             case PROPERTYHANDLE_SHOWLINKWARNINGDIALOG     :   {
     445         185 :                                                             if( !(seqValues[nProperty] >>= m_bShowLinkWarningDialog) )
     446             :                                                             {
     447             :                                                                 OSL_FAIL("Wrong type of \"Misc\\ShowLinkWarningDialog\"!" );
     448             :                                                             }
     449             :                                                         }
     450         185 :                                                     break;
     451             :             case PROPERTYHANDLE_SYMBOLSTYLE         :   {
     452         185 :                                                             OUString aIconTheme;
     453         185 :                                                             if (seqValues[nProperty] >>= aIconTheme)
     454         185 :                                                                 SetIconTheme(aIconTheme, DONT_SET_MODIFIED);
     455             :                                                             else
     456         185 :                                                                 OSL_FAIL("Wrong type of \"Misc\\SymbolStyle\"!" );
     457             :                                                         }
     458         185 :                                                     break;
     459             :             case PROPERTYHANDLE_DISABLEUICUSTOMIZATION      :   {
     460         185 :                                                             if( !(seqValues[nProperty] >>= m_bDisableUICustomization) )
     461             :                                                                 OSL_FAIL("Wrong type of \"Misc\\DisableUICustomization\"!" );
     462             :                                                         }
     463         185 :                                                     break;
     464             :             case PROPERTYHANDLE_ALWAYSALLOWSAVE:
     465             :             {
     466         185 :                 if( !(seqValues[nProperty] >>= m_bAlwaysAllowSave) )
     467             :                     OSL_FAIL("Wrong type of \"Misc\\AlwaysAllowSave\"!" );
     468             :             }
     469         185 :             break;
     470             :         }
     471         185 :     }
     472         185 : }
     473             : 
     474        9565 : void SvtMiscOptions_Impl::AddListenerLink( const Link<>& rLink )
     475             : {
     476        9565 :     aList.push_back( rLink );
     477        9565 : }
     478             : 
     479        9552 : void SvtMiscOptions_Impl::RemoveListenerLink( const Link<>& rLink )
     480             : {
     481       19921 :     for ( ::std::list<Link<>>::iterator iter = aList.begin(); iter != aList.end(); ++iter )
     482             :     {
     483       19921 :         if ( *iter == rLink )
     484             :         {
     485        9552 :             aList.erase(iter);
     486        9552 :             break;
     487             :         }
     488             :     }
     489        9552 : }
     490             : 
     491         370 : void SvtMiscOptions_Impl::CallListeners()
     492             : {
     493         370 :     for ( ::std::list<Link<>>::const_iterator iter = aList.begin(); iter != aList.end(); ++iter )
     494           0 :         iter->Call( this );
     495         370 : }
     496             : 
     497           0 : void SvtMiscOptions_Impl::SetToolboxStyle( sal_Int16 nStyle, bool _bSetModified )
     498             : {
     499           0 :     m_nToolboxStyle = nStyle ? 1 : 0;
     500           0 :     if ( _bSetModified )
     501           0 :         SetModified();
     502           0 :     CallListeners();
     503           0 : }
     504             : 
     505           0 : void SvtMiscOptions_Impl::SetSymbolsSize( sal_Int16 nSet )
     506             : {
     507           0 :     m_nSymbolsSize = nSet;
     508           0 :     SetModified();
     509           0 :     CallListeners();
     510           0 : }
     511             : 
     512      115848 : OUString SvtMiscOptions_Impl::GetIconTheme()
     513             : {
     514      115848 :     return Application::GetSettings().GetStyleSettings().DetermineIconTheme();
     515             : }
     516             : 
     517             : void
     518         370 : SvtMiscOptions_Impl::SetIconTheme(const OUString &rName, SetModifiedFlag setModified)
     519             : {
     520         370 :     OUString aTheme(rName);
     521         370 :     if (aTheme.isEmpty() || aTheme == "auto")
     522             :     {
     523         370 :         aTheme = Application::GetSettings().GetStyleSettings().GetAutomaticallyChosenIconTheme();
     524         370 :         m_bIconThemeWasSetAutomatically = true;
     525             :     }
     526             :     else
     527           0 :         m_bIconThemeWasSetAutomatically = false;
     528             : 
     529         740 :     AllSettings aAllSettings = Application::GetSettings();
     530         740 :     StyleSettings aStyleSettings = aAllSettings.GetStyleSettings();
     531         370 :     aStyleSettings.SetIconTheme(aTheme);
     532             : 
     533         370 :     aAllSettings.SetStyleSettings(aStyleSettings);
     534         370 :     Application::MergeSystemSettings( aAllSettings );
     535         370 :     Application::SetSettings(aAllSettings);
     536             : 
     537         370 :     if (setModified == SET_MODIFIED) {
     538           0 :         SetModified();
     539             :     }
     540         740 :     CallListeners();
     541         370 : }
     542             : 
     543             : 
     544             : //  public method
     545             : 
     546           0 : void SvtMiscOptions_Impl::Notify( const Sequence< OUString >& rPropertyNames )
     547             : {
     548           0 :     Load( rPropertyNames );
     549           0 :     CallListeners();
     550           0 : }
     551             : 
     552             : 
     553             : //  public method
     554             : 
     555         231 : void SvtMiscOptions_Impl::ImplCommit()
     556             : {
     557             :     // Get names of supported properties, create a list for values and copy current values to it.
     558         231 :     Sequence< OUString >    seqNames    = GetPropertyNames  ();
     559         231 :     sal_Int32               nCount      = seqNames.getLength();
     560         462 :     Sequence< Any >         seqValues   ( nCount );
     561        2772 :     for( sal_Int32 nProperty=0; nProperty<nCount; ++nProperty )
     562             :     {
     563        2541 :         switch( nProperty )
     564             :         {
     565             :             case PROPERTYHANDLE_PLUGINSENABLED :
     566             :             {
     567         231 :                 if ( !m_bIsPluginsEnabledRO )
     568         231 :                     seqValues[nProperty] <<= m_bPluginsEnabled;
     569         231 :                 break;
     570             :             }
     571             : 
     572             :             case PROPERTYHANDLE_SYMBOLSET :
     573             :             {
     574         231 :                 if ( !m_bIsSymbolsSizeRO )
     575         231 :                    seqValues[nProperty] <<= m_nSymbolsSize;
     576         231 :                 break;
     577             :             }
     578             : 
     579             :             case PROPERTYHANDLE_TOOLBOXSTYLE :
     580             :             {
     581         231 :                 if ( !m_bIsToolboxStyleRO )
     582         231 :                     seqValues[nProperty] <<= m_nToolboxStyle;
     583         231 :                 break;
     584             :             }
     585             : 
     586             :             case PROPERTYHANDLE_USESYSTEMFILEDIALOG :
     587             :             {
     588         231 :                 if ( !m_bIsUseSystemFileDialogRO )
     589         231 :                     seqValues[nProperty] <<= m_bUseSystemFileDialog;
     590         231 :                 break;
     591             :             }
     592             : 
     593             :             case PROPERTYHANDLE_SYMBOLSTYLE :
     594             :             {
     595         231 :                 if ( !m_bIsSymbolsStyleRO ) {
     596         231 :                     OUString value;
     597         231 :                     if (m_bIconThemeWasSetAutomatically) {
     598         231 :                         value = "auto";
     599             :                     }
     600             :                     else {
     601           0 :                         value = GetIconTheme();
     602             :                     }
     603         231 :                     seqValues[nProperty] <<= value;
     604             :                 }
     605         231 :                 break;
     606             :             }
     607             : 
     608             :             case PROPERTYHANDLE_USESYSTEMPRINTDIALOG :
     609             :             {
     610         231 :                 if ( !m_bIsUseSystemPrintDialogRO )
     611         231 :                     seqValues[nProperty] <<= m_bUseSystemPrintDialog;
     612         231 :                 break;
     613             :             }
     614             : 
     615             :             case PROPERTYHANDLE_SHOWLINKWARNINGDIALOG :
     616             :             {
     617         231 :                 if ( !m_bIsShowLinkWarningDialogRO )
     618         231 :                     seqValues[nProperty] <<= m_bShowLinkWarningDialog;
     619         231 :                 break;
     620             :             }
     621             : 
     622             :             case PROPERTYHANDLE_DISABLEUICUSTOMIZATION :
     623             :             {
     624         231 :                 seqValues[nProperty] <<= m_bDisableUICustomization;
     625         231 :                 break;
     626             :             }
     627             :             case PROPERTYHANDLE_ALWAYSALLOWSAVE :
     628             :             {
     629         231 :                 seqValues[nProperty] <<= m_bAlwaysAllowSave;
     630         231 :                 break;
     631             :             }
     632             :             case PROPERTYHANDLE_EXPERIMENTALMODE :
     633             :             {
     634         231 :                 seqValues[nProperty] <<= m_bExperimentalMode;
     635         231 :                 break;
     636             :             }
     637             :             case PROPERTYHANDLE_MACRORECORDERMODE :
     638             :             {
     639         231 :                 seqValues[nProperty] <<= m_bMacroRecorderMode;
     640         231 :                 break;
     641             :             }
     642             :         }
     643             :     }
     644             :     // Set properties in configuration.
     645         462 :     PutProperties( seqNames, seqValues );
     646         231 : }
     647             : 
     648             : 
     649             : //  private method
     650             : 
     651         601 : Sequence< OUString > SvtMiscOptions_Impl::GetPropertyNames()
     652             : {
     653             :     // Build list of configuration key names.
     654             :     const OUString pProperties[] =
     655             :     {
     656             :         OUString(PROPERTYNAME_PLUGINSENABLED),
     657             :         OUString(PROPERTYNAME_SYMBOLSET),
     658             :         OUString(PROPERTYNAME_TOOLBOXSTYLE),
     659             :         OUString(PROPERTYNAME_USESYSTEMFILEDIALOG),
     660             :         OUString(PROPERTYNAME_ICONTHEME),
     661             :         OUString(PROPERTYNAME_USESYSTEMPRINTDIALOG),
     662             :         OUString(PROPERTYNAME_SHOWLINKWARNINGDIALOG),
     663             :         OUString(PROPERTYNAME_DISABLEUICUSTOMIZATION),
     664             :         OUString(PROPERTYNAME_ALWAYSALLOWSAVE),
     665             :         OUString(PROPERTYNAME_EXPERIMENTALMODE),
     666             :         OUString(PROPERTYNAME_MACRORECORDERMODE)
     667        7212 :     };
     668             : 
     669             :     // Initialize return sequence with these list ...
     670         601 :     const Sequence< OUString > seqPropertyNames( pProperties, SAL_N_ELEMENTS( pProperties ) );
     671             :     // ... and return it.
     672        7212 :     return seqPropertyNames;
     673             : }
     674             : 
     675             : 
     676             : //  initialize static member
     677             : //  DON'T DO IT IN YOUR HEADER!
     678             : //  see definition for further information
     679             : 
     680             : SvtMiscOptions_Impl*    SvtMiscOptions::m_pDataContainer    = NULL  ;
     681             : sal_Int32               SvtMiscOptions::m_nRefCount = 0     ;
     682             : 
     683             : 
     684             : //  constructor
     685             : 
     686      162165 : SvtMiscOptions::SvtMiscOptions()
     687             : {
     688             :     // SvtMiscOptions_Impl ctor indirectly calls code that requires locked
     689             :     // SolarMutex; lock it first:
     690      162165 :     SolarMutexGuard g;
     691             :     // Global access, must be guarded (multithreading!).
     692      324330 :     MutexGuard aGuard( GetInitMutex() );
     693             :     // Increase our refcount ...
     694      162165 :     ++m_nRefCount;
     695             :     // ... and initialize our data container only if it not already exist!
     696      162165 :     if( m_pDataContainer == NULL )
     697             :     {
     698         185 :        m_pDataContainer = new SvtMiscOptions_Impl;
     699         185 :        svtools::ItemHolder2::holdConfigItem(E_MISCOPTIONS);
     700      162165 :     }
     701      162165 : }
     702             : 
     703             : 
     704             : //  destructor
     705             : 
     706      324509 : SvtMiscOptions::~SvtMiscOptions()
     707             : {
     708             :     // Global access, must be guarded (multithreading!)
     709      162163 :     MutexGuard aGuard( GetInitMutex() );
     710             :     // Decrease our refcount.
     711      162163 :     --m_nRefCount;
     712             :     // If last instance was deleted ...
     713             :     // we must destroy our static data container!
     714      162163 :     if( m_nRefCount <= 0 )
     715             :     {
     716         183 :         delete m_pDataContainer;
     717         183 :         m_pDataContainer = NULL;
     718      162163 :     }
     719      162346 : }
     720             : 
     721         118 : bool SvtMiscOptions::UseSystemFileDialog() const
     722             : {
     723         118 :     return m_pDataContainer->UseSystemFileDialog();
     724             : }
     725             : 
     726         232 : void SvtMiscOptions::SetUseSystemFileDialog( bool bEnable )
     727             : {
     728         232 :     m_pDataContainer->SetUseSystemFileDialog( bEnable );
     729         232 : }
     730             : 
     731           0 : bool SvtMiscOptions::IsUseSystemFileDialogReadOnly() const
     732             : {
     733           0 :     return m_pDataContainer->IsUseSystemFileDialogReadOnly();
     734             : }
     735             : 
     736           0 : bool SvtMiscOptions::IsPluginsEnabled() const
     737             : {
     738           0 :     return m_pDataContainer->IsPluginsEnabled();
     739             : }
     740             : 
     741           0 : sal_Int16 SvtMiscOptions::GetSymbolsSize() const
     742             : {
     743           0 :     return m_pDataContainer->GetSymbolsSize();
     744             : }
     745             : 
     746           0 : void SvtMiscOptions::SetSymbolsSize( sal_Int16 nSet )
     747             : {
     748           0 :     m_pDataContainer->SetSymbolsSize( nSet );
     749           0 : }
     750             : 
     751       14051 : sal_Int16 SvtMiscOptions::GetCurrentSymbolsSize() const
     752             : {
     753       14051 :     sal_Int16 eOptSymbolsSize = m_pDataContainer->GetSymbolsSize();
     754             : 
     755       14051 :     if ( eOptSymbolsSize == SFX_SYMBOLS_SIZE_AUTO )
     756             :     {
     757             :         // Use system settings, we have to retrieve the toolbar icon size from the
     758             :         // Application class
     759       14051 :         ToolbarIconSize nStyleIconSize = Application::GetSettings().GetStyleSettings().GetToolbarIconSize();
     760       14051 :         if ( nStyleIconSize == ToolbarIconSize::Large )
     761          14 :             eOptSymbolsSize = SFX_SYMBOLS_SIZE_LARGE;
     762             :         else
     763       14037 :             eOptSymbolsSize = SFX_SYMBOLS_SIZE_SMALL;
     764             :     }
     765             : 
     766       14051 :     return eOptSymbolsSize;
     767             : }
     768             : 
     769       14008 : bool SvtMiscOptions::AreCurrentSymbolsLarge() const
     770             : {
     771       14008 :     return ( GetCurrentSymbolsSize() == SFX_SYMBOLS_SIZE_LARGE );
     772             : }
     773             : 
     774      115848 : OUString SvtMiscOptions::GetIconTheme() const
     775             : {
     776      115848 :     return SvtMiscOptions_Impl::GetIconTheme();
     777             : }
     778             : 
     779           0 : void SvtMiscOptions::SetIconTheme(const OUString& iconTheme)
     780             : {
     781           0 :     m_pDataContainer->SetIconTheme(iconTheme);
     782           0 : }
     783             : 
     784        1346 : bool SvtMiscOptions::DisableUICustomization() const
     785             : {
     786        1346 :     return m_pDataContainer->DisableUICustomization();
     787             : }
     788             : 
     789        9522 : sal_Int16 SvtMiscOptions::GetToolboxStyle() const
     790             : {
     791        9522 :     return m_pDataContainer->GetToolboxStyle();
     792             : }
     793             : 
     794           0 : void SvtMiscOptions::SetToolboxStyle( sal_Int16 nStyle )
     795             : {
     796           0 :     m_pDataContainer->SetToolboxStyle( nStyle, true );
     797           0 : }
     798             : 
     799           0 : bool SvtMiscOptions::UseSystemPrintDialog() const
     800             : {
     801           0 :     return m_pDataContainer->UseSystemPrintDialog();
     802             : }
     803             : 
     804           0 : void SvtMiscOptions::SetUseSystemPrintDialog( bool bEnable )
     805             : {
     806           0 :     m_pDataContainer->SetUseSystemPrintDialog( bEnable );
     807           0 : }
     808             : 
     809           0 : bool SvtMiscOptions::ShowLinkWarningDialog() const
     810             : {
     811           0 :     return m_pDataContainer->ShowLinkWarningDialog();
     812             : }
     813             : 
     814           0 : void SvtMiscOptions::SetShowLinkWarningDialog( bool bSet )
     815             : {
     816           0 :     m_pDataContainer->SetShowLinkWarningDialog( bSet );
     817           0 : }
     818             : 
     819           0 : bool SvtMiscOptions::IsShowLinkWarningDialogReadOnly() const
     820             : {
     821           0 :     return m_pDataContainer->IsShowLinkWarningDialogReadOnly();
     822             : }
     823             : 
     824           0 : void SvtMiscOptions::SetSaveAlwaysAllowed( bool bSet )
     825             : {
     826           0 :     m_pDataContainer->SetSaveAlwaysAllowed( bSet );
     827           0 : }
     828             : 
     829        1723 : bool SvtMiscOptions::IsSaveAlwaysAllowed() const
     830             : {
     831        1723 :     return m_pDataContainer->IsSaveAlwaysAllowed();
     832             : }
     833             : 
     834           0 : void SvtMiscOptions::SetExperimentalMode( bool bSet )
     835             : {
     836           0 :     m_pDataContainer->SetExperimentalMode( bSet );
     837           0 : }
     838             : 
     839       29247 : bool SvtMiscOptions::IsExperimentalMode() const
     840             : {
     841       29247 :     return m_pDataContainer->IsExperimentalMode();
     842             : }
     843             : 
     844           0 : void SvtMiscOptions::SetMacroRecorderMode( bool bSet )
     845             : {
     846           0 :     m_pDataContainer->SetMacroRecorderMode( bSet );
     847           0 : }
     848             : 
     849           0 : bool SvtMiscOptions::IsMacroRecorderMode() const
     850             : {
     851           0 :     return m_pDataContainer->IsMacroRecorderMode();
     852             : }
     853             : 
     854             : namespace
     855             : {
     856             :     class theSvtMiscOptionsMutex :
     857             :         public rtl::Static< osl::Mutex, theSvtMiscOptionsMutex > {};
     858             : }
     859             : 
     860      324328 : Mutex & SvtMiscOptions::GetInitMutex()
     861             : {
     862      324328 :     return theSvtMiscOptionsMutex::get();
     863             : }
     864             : 
     865        9565 : void SvtMiscOptions::AddListenerLink( const Link<>& rLink )
     866             : {
     867        9565 :     m_pDataContainer->AddListenerLink( rLink );
     868        9565 : }
     869             : 
     870        9552 : void SvtMiscOptions::RemoveListenerLink( const Link<>& rLink )
     871             : {
     872        9552 :     m_pDataContainer->RemoveListenerLink( rLink );
     873        9552 : }
     874             : 
     875             : bool
     876           0 : SvtMiscOptions::IconThemeWasSetAutomatically()
     877             : {
     878           0 :     return m_pDataContainer->IconThemeWasSetAutomatically();
     879             : }
     880             : 
     881             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.11