LCOV - code coverage report
Current view: top level - svtools/source/config - miscopt.cxx (source / functions) Hit Total Coverage
Test: commit 10e77ab3ff6f4314137acd6e2702a6e5c1ce1fae Lines: 225 312 72.1 %
Date: 2014-11-03 Functions: 39 69 56.5 %
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             :     public:
      94             : 
      95             :          SvtMiscOptions_Impl();
      96             :         virtual ~SvtMiscOptions_Impl();
      97             : 
      98             :         /*-****************************************************************************************************
      99             :             @short      called for notify of configmanager
     100             :             @descr      These method is called from the ConfigManager before application ends or from the
     101             :                          PropertyChangeListener if the sub tree broadcasts changes. You must update your
     102             :                         internal values.
     103             : 
     104             :             @seealso    baseclass ConfigItem
     105             : 
     106             :             @param      "seqPropertyNames" is the list of properties which should be updated.
     107             :         *//*-*****************************************************************************************************/
     108             : 
     109             :         virtual void Notify( const Sequence< OUString >& seqPropertyNames ) SAL_OVERRIDE;
     110             : 
     111             :         /** loads required data from the configuration. It's called in the constructor to
     112             :          read all entries and form ::Notify to re-read changed settings
     113             : 
     114             :          */
     115             :         void Load( const Sequence< OUString >& rPropertyNames );
     116             : 
     117             :         /*-****************************************************************************************************
     118             :             @short      write changes to configuration
     119             :             @descr      These method writes the changed values into the sub tree
     120             :                         and should always called in our destructor to guarantee consistency of config data.
     121             : 
     122             :             @seealso    baseclass ConfigItem
     123             :         *//*-*****************************************************************************************************/
     124             : 
     125             :         virtual void Commit() SAL_OVERRIDE;
     126             : 
     127             : 
     128             :         //  public interface
     129             : 
     130             : 
     131         164 :         inline bool UseSystemFileDialog() const
     132         164 :         { return m_bUseSystemFileDialog; }
     133             : 
     134         320 :         inline void SetUseSystemFileDialog( bool bSet )
     135         320 :         {  m_bUseSystemFileDialog = bSet; SetModified(); }
     136             : 
     137           0 :         inline bool IsUseSystemFileDialogReadOnly() const
     138           0 :         { return m_bIsUseSystemFileDialogRO; }
     139             : 
     140        2411 :         inline bool DisableUICustomization() const
     141        2411 :         { return m_bDisableUICustomization; }
     142             : 
     143           0 :         inline void SetSaveAlwaysAllowed( bool bSet )
     144           0 :         { m_bAlwaysAllowSave = bSet; SetModified(); }
     145             : 
     146        1532 :         inline bool IsSaveAlwaysAllowed() const
     147        1532 :         { return m_bAlwaysAllowSave; }
     148             : 
     149           4 :         inline void SetExperimentalMode( bool bSet )
     150           4 :         { m_bExperimentalMode = bSet; SetModified(); }
     151             : 
     152        1396 :         inline bool IsExperimentalMode() const
     153        1396 :         { return m_bExperimentalMode; }
     154             : 
     155           0 :         inline void SetMacroRecorderMode( bool bSet )
     156           0 :         { m_bMacroRecorderMode = bSet; SetModified(); }
     157             : 
     158           0 :         inline bool IsMacroRecorderMode() const
     159           0 :         { return m_bMacroRecorderMode; }
     160             : 
     161           0 :         inline bool IsPluginsEnabled() const
     162           0 :         { return m_bPluginsEnabled; }
     163             : 
     164       25557 :         inline sal_Int16 GetSymbolsSize()
     165       25557 :         { return m_nSymbolsSize; }
     166             : 
     167             :         void SetSymbolsSize( sal_Int16 nSet );
     168             : 
     169             :         OUString GetIconTheme() const;
     170             : 
     171             :         enum SetModifiedFlag { SET_MODIFIED, DONT_SET_MODIFIED };
     172             : 
     173             :         /** Set the icon theme
     174             :          *
     175             :          * @param theme
     176             :          * The name of the icon theme to use.
     177             :          *
     178             :          * @param setModified
     179             :          * Whether to call SetModified() and CallListeners().
     180             :          *
     181             :          * @internal
     182             :          * The @p setModified flag was introduced because the unittests fail if we call SetModified()
     183             :          * during initialization in the constructor.
     184             :          */
     185             :         void
     186             :         SetIconTheme(const OUString &theme, SetModifiedFlag setModified = SET_MODIFIED );
     187             : 
     188           0 :         bool IconThemeWasSetAutomatically()
     189           0 :         {return m_bIconThemeWasSetAutomatically;}
     190             : 
     191             :         /** Set the icon theme automatically by detecting the best theme for the desktop environment.
     192             :          * The parameter setModified controls whether SetModified() will be called.
     193             :          */
     194             :         void SetIconThemeAutomatically(SetModifiedFlag = SET_MODIFIED);
     195             : 
     196             :         // translate to VCL settings ( "0" = 3D, "1" = FLAT )
     197       16268 :         inline sal_Int16 GetToolboxStyle()
     198       16268 :         { return m_nToolboxStyle ? VCL_TOOLBOX_STYLE_FLAT : 0; }
     199             : 
     200             :         // translate from VCL settings
     201             :         void SetToolboxStyle( sal_Int16 nStyle, bool _bSetModified );
     202             : 
     203           0 :         inline bool UseSystemPrintDialog() const
     204           0 :         { return m_bUseSystemPrintDialog; }
     205             : 
     206           0 :         inline void SetUseSystemPrintDialog( bool bSet )
     207           0 :         {  m_bUseSystemPrintDialog = bSet; SetModified(); }
     208             : 
     209           0 :         inline bool ShowLinkWarningDialog() const
     210           0 :         { return m_bShowLinkWarningDialog; }
     211             : 
     212           0 :         void SetShowLinkWarningDialog( bool bSet )
     213           0 :         {  m_bShowLinkWarningDialog = bSet; SetModified(); }
     214             : 
     215           0 :         bool IsShowLinkWarningDialogReadOnly() const
     216           0 :         { return m_bIsShowLinkWarningDialogRO; }
     217             : 
     218             :         void AddListenerLink( const Link& rLink );
     219             :         void RemoveListenerLink( const Link& rLink );
     220             :         void CallListeners();
     221             : 
     222             : 
     223             :     //  private methods
     224             : 
     225             : 
     226             :     private:
     227             : 
     228             :         /*-****************************************************************************************************
     229             :             @short      return list of key names of our configuration management which represent oue module tree
     230             :             @descr      These methods return a static const list of key names. We need it to get needed values from our
     231             :                         configuration management.
     232             :             @return     A list of needed configuration keys is returned.
     233             :         *//*-*****************************************************************************************************/
     234             : 
     235             :         static Sequence< OUString > GetPropertyNames();
     236             : };
     237             : 
     238             : 
     239             : //  constructor
     240             : 
     241         272 : SvtMiscOptions_Impl::SvtMiscOptions_Impl()
     242             :     // Init baseclasses first
     243             :     : ConfigItem( ROOTNODE_MISC )
     244             : 
     245             :     , m_bUseSystemFileDialog( false )
     246             :     , m_bIsUseSystemFileDialogRO( false )
     247             :     , m_bPluginsEnabled( false )
     248             :     , m_bIsPluginsEnabledRO( false )
     249             :     , m_nSymbolsSize( 0 )
     250             :     , m_bIsSymbolsSizeRO( false )
     251             :     , m_bIsSymbolsStyleRO( false )
     252             :     , m_nToolboxStyle( 1 )
     253             :     , m_bIsToolboxStyleRO( false )
     254             :     , m_bUseSystemPrintDialog( false )
     255             :     , m_bIsUseSystemPrintDialogRO( false )
     256             :     , m_bShowLinkWarningDialog( true )
     257             :     , m_bIsShowLinkWarningDialogRO( false )
     258             :     , m_bAlwaysAllowSave( false )
     259             :     , m_bExperimentalMode( false )
     260             :     , m_bMacroRecorderMode( false )
     261         272 :     , m_bIconThemeWasSetAutomatically( false )
     262             : {
     263             :     // Use our static list of configuration keys to get his values.
     264         272 :     Sequence< OUString >    seqNames    = GetPropertyNames  (           );
     265         272 :     Load( seqNames );
     266         544 :     Sequence< Any >         seqValues   = GetProperties     ( seqNames  );
     267         544 :     Sequence< sal_Bool >    seqRO       = GetReadOnlyStates ( seqNames  );
     268             : 
     269             :     // Safe impossible cases.
     270             :     // We need values from ALL configuration keys.
     271             :     // Follow assignment use order of values in relation to our list of key names!
     272             :     DBG_ASSERT( !(seqNames.getLength()!=seqValues.getLength()), "SvtMiscOptions_Impl::SvtMiscOptions_Impl()\nI miss some values of configuration keys!\n" );
     273             : 
     274             :     // Copy values from list in right order to our internal member.
     275         272 :     sal_Int32 nPropertyCount = seqValues.getLength();
     276        3264 :     for( sal_Int32 nProperty=0; nProperty<nPropertyCount; ++nProperty )
     277             :     {
     278        2992 :         if (!seqValues[nProperty].hasValue())
     279           0 :             continue;
     280        2992 :         switch( nProperty )
     281             :         {
     282             :             case PROPERTYHANDLE_PLUGINSENABLED :
     283             :             {
     284         272 :                 if( !(seqValues[nProperty] >>= m_bPluginsEnabled) )
     285             :                 {
     286             :                     OSL_FAIL("Wrong type of \"Misc\\PluginsEnabled\"!" );
     287             :                 }
     288         272 :                 m_bIsPluginsEnabledRO = seqRO[nProperty];
     289         272 :                 break;
     290             :             }
     291             : 
     292             :             case PROPERTYHANDLE_SYMBOLSET :
     293             :             {
     294         272 :                 if( !(seqValues[nProperty] >>= m_nSymbolsSize) )
     295             :                 {
     296             :                     OSL_FAIL("Wrong type of \"Misc\\SymbolSet\"!" );
     297             :                 }
     298         272 :                 m_bIsSymbolsSizeRO = seqRO[nProperty];
     299         272 :                 break;
     300             :             }
     301             : 
     302             :             case PROPERTYHANDLE_TOOLBOXSTYLE :
     303             :             {
     304         272 :                 if( !(seqValues[nProperty] >>= m_nToolboxStyle) )
     305             :                 {
     306             :                     OSL_FAIL("Wrong type of \"Misc\\ToolboxStyle\"!" );
     307             :                 }
     308         272 :                 m_bIsToolboxStyleRO = seqRO[nProperty];
     309         272 :                 break;
     310             :             }
     311             : 
     312             :             case PROPERTYHANDLE_USESYSTEMFILEDIALOG :
     313             :             {
     314         272 :                 if( !(seqValues[nProperty] >>= m_bUseSystemFileDialog) )
     315             :                 {
     316             :                     OSL_FAIL("Wrong type of \"Misc\\UseSystemFileDialog\"!" );
     317             :                 }
     318         272 :                 m_bIsUseSystemFileDialogRO = seqRO[nProperty];
     319         272 :                 break;
     320             :             }
     321             : 
     322             :             case PROPERTYHANDLE_USESYSTEMPRINTDIALOG :
     323             :             {
     324         272 :                 if( !(seqValues[nProperty] >>= m_bUseSystemPrintDialog) )
     325             :                 {
     326             :                     OSL_FAIL("Wrong type of \"Misc\\UseSystemPrintDialog\"!" );
     327             :                 }
     328         272 :                 m_bIsUseSystemPrintDialogRO = seqRO[nProperty];
     329         272 :                 break;
     330             :             }
     331             : 
     332             :             case PROPERTYHANDLE_SHOWLINKWARNINGDIALOG :
     333             :             {
     334         272 :                 if( !(seqValues[nProperty] >>= m_bShowLinkWarningDialog) )
     335             :                 {
     336             :                     OSL_FAIL("Wrong type of \"Misc\\ShowLinkWarningDialog\"!" );
     337             :                 }
     338         272 :                 m_bIsShowLinkWarningDialogRO = seqRO[nProperty];
     339         272 :                 break;
     340             :             }
     341             : 
     342             :             case PROPERTYHANDLE_SYMBOLSTYLE :
     343             :             {
     344         272 :                 OUString aIconTheme;
     345         272 :                 if( seqValues[nProperty] >>= aIconTheme ) {
     346         272 :                     if (aIconTheme == "auto") {
     347         272 :                         SetIconThemeAutomatically(DONT_SET_MODIFIED);
     348             :                     }
     349             :                     else {
     350           0 :                         SetIconTheme(aIconTheme, DONT_SET_MODIFIED);
     351             :                     }
     352             :                 }
     353             :                 else
     354             :                 {
     355             :                     OSL_FAIL("Wrong type of \"Misc\\SymbolStyle\"!" );
     356             :                 }
     357         272 :                 m_bIsSymbolsStyleRO = seqRO[nProperty];
     358         272 :                 break;
     359             :             }
     360             : 
     361             :             case PROPERTYHANDLE_DISABLEUICUSTOMIZATION :
     362             :             {
     363         272 :                 if( !(seqValues[nProperty] >>= m_bDisableUICustomization) )
     364             :                     OSL_FAIL("Wrong type of \"Misc\\DisableUICustomization\"!" );
     365         272 :                 break;
     366             :             }
     367             :             case PROPERTYHANDLE_ALWAYSALLOWSAVE :
     368             :             {
     369         272 :                 if( !(seqValues[nProperty] >>= m_bAlwaysAllowSave) )
     370             :                     OSL_FAIL("Wrong type of \"Misc\\AlwaysAllowSave\"!" );
     371         272 :                 break;
     372             :             }
     373             :             case PROPERTYHANDLE_EXPERIMENTALMODE :
     374             :             {
     375         272 :                 if( !(seqValues[nProperty] >>= m_bExperimentalMode) )
     376             :                     OSL_FAIL("Wrong type of \"Misc\\ExperimentalMode\"!" );
     377         272 :                 break;
     378             :             }
     379             :             case PROPERTYHANDLE_MACRORECORDERMODE :
     380             :             {
     381         272 :                 if( !(seqValues[nProperty] >>= m_bMacroRecorderMode) )
     382             :                     OSL_FAIL("Wrong type of \"Misc\\MacroRecorderMode\"!" );
     383         272 :                 break;
     384             :             }
     385             :         }
     386             :     }
     387             : 
     388             :     // Enable notification mechanism of our baseclass.
     389             :     // We need it to get information about changes outside these class on our used configuration keys!
     390         544 :     EnableNotification( seqNames );
     391         272 : }
     392             : 
     393             : 
     394             : //  destructor
     395             : 
     396         804 : SvtMiscOptions_Impl::~SvtMiscOptions_Impl()
     397             : {
     398             :     // We must save our current values .. if user forgets it!
     399         268 :     if( IsModified() )
     400             :     {
     401           0 :         Commit();
     402             :     }
     403         536 : }
     404             : 
     405        2992 : static int lcl_MapPropertyName( const OUString& rCompare,
     406             :                 const uno::Sequence< OUString>& aInternalPropertyNames)
     407             : {
     408       17952 :     for(int nProp = 0; nProp < aInternalPropertyNames.getLength(); ++nProp)
     409             :     {
     410       17952 :         if( aInternalPropertyNames[nProp] == rCompare )
     411        2992 :             return nProp;
     412             :     }
     413           0 :     return -1;
     414             : }
     415             : 
     416         272 : void SvtMiscOptions_Impl::Load( const Sequence< OUString >& rPropertyNames )
     417             : {
     418         272 :     const uno::Sequence< OUString> aInternalPropertyNames( GetPropertyNames());
     419         544 :     Sequence< Any > seqValues = GetProperties( rPropertyNames  );
     420             : 
     421             :     // Safe impossible cases.
     422             :     // We need values from ALL configuration keys.
     423             :     // Follow assignment use order of values in relation to our list of key names!
     424             :     DBG_ASSERT( !(rPropertyNames.getLength()!=seqValues.getLength()), "SvtSecurityOptions_Impl::SvtSecurityOptions_Impl()\nI miss some values of configuration keys!\n" );
     425             : 
     426             :     // Copy values from list in right order to our internal member.
     427         272 :     sal_Int32 nPropertyCount = seqValues.getLength();
     428        3264 :     for( sal_Int32 nProperty=0; nProperty<nPropertyCount; ++nProperty )
     429             :     {
     430        2992 :         if (!seqValues[nProperty].hasValue())
     431           0 :             continue;
     432        2992 :         switch( lcl_MapPropertyName(rPropertyNames[nProperty], aInternalPropertyNames) )
     433             :         {
     434             :             case PROPERTYHANDLE_PLUGINSENABLED      :   {
     435         272 :                                                             if( !(seqValues[nProperty] >>= m_bPluginsEnabled) )
     436             :                                                             {
     437             :                                                                 OSL_FAIL("Wrong type of \"Misc\\PluginsEnabled\"!" );
     438             :                                                             }
     439             :                                                         }
     440         272 :                                                     break;
     441             :             case PROPERTYHANDLE_SYMBOLSET           :   {
     442         272 :                                                             if( !(seqValues[nProperty] >>= m_nSymbolsSize) )
     443             :                                                             {
     444             :                                                                 OSL_FAIL("Wrong type of \"Misc\\SymbolSet\"!" );
     445             :                                                             }
     446             :                                                         }
     447         272 :                                                     break;
     448             :             case PROPERTYHANDLE_TOOLBOXSTYLE        :   {
     449         272 :                                                             if( !(seqValues[nProperty] >>= m_nToolboxStyle) )
     450             :                                                             {
     451             :                                                                 OSL_FAIL("Wrong type of \"Misc\\ToolboxStyle\"!" );
     452             :                                                             }
     453             :                                                         }
     454         272 :                                                     break;
     455             :             case PROPERTYHANDLE_USESYSTEMFILEDIALOG      :   {
     456         272 :                                                             if( !(seqValues[nProperty] >>= m_bUseSystemFileDialog) )
     457             :                                                             {
     458             :                                                                 OSL_FAIL("Wrong type of \"Misc\\UseSystemFileDialog\"!" );
     459             :                                                             }
     460             :                                                         }
     461         272 :                                                     break;
     462             :             case PROPERTYHANDLE_USESYSTEMPRINTDIALOG     :   {
     463         272 :                                                             if( !(seqValues[nProperty] >>= m_bUseSystemPrintDialog) )
     464             :                                                             {
     465             :                                                                 OSL_FAIL("Wrong type of \"Misc\\UseSystemPrintDialog\"!" );
     466             :                                                             }
     467             :                                                         }
     468         272 :                                                     break;
     469             :             case PROPERTYHANDLE_SHOWLINKWARNINGDIALOG     :   {
     470         272 :                                                             if( !(seqValues[nProperty] >>= m_bShowLinkWarningDialog) )
     471             :                                                             {
     472             :                                                                 OSL_FAIL("Wrong type of \"Misc\\ShowLinkWarningDialog\"!" );
     473             :                                                             }
     474             :                                                         }
     475         272 :                                                     break;
     476             :             case PROPERTYHANDLE_SYMBOLSTYLE         :   {
     477         272 :                                                             OUString aIconTheme;
     478         272 :                                                             if( seqValues[nProperty] >>= aIconTheme ) {
     479         272 :                                                                 if (aIconTheme == "auto") {
     480         272 :                                                                     SetIconThemeAutomatically(DONT_SET_MODIFIED);
     481             :                                                                 }
     482             :                                                                 else {
     483           0 :                                                                     SetIconTheme(aIconTheme, DONT_SET_MODIFIED);
     484             :                                                                 }
     485             :                                                             }
     486             :                                                             else {
     487             :                                                                 OSL_FAIL("Wrong type of \"Misc\\SymbolStyle\"!" );
     488         272 :                                                             }
     489             :                                                         }
     490         272 :                                                     break;
     491             :             case PROPERTYHANDLE_DISABLEUICUSTOMIZATION      :   {
     492         272 :                                                             if( !(seqValues[nProperty] >>= m_bDisableUICustomization) )
     493             :                                                                 OSL_FAIL("Wrong type of \"Misc\\DisableUICustomization\"!" );
     494             :                                                         }
     495         272 :                                                     break;
     496             :             case PROPERTYHANDLE_ALWAYSALLOWSAVE:
     497             :             {
     498         272 :                 if( !(seqValues[nProperty] >>= m_bAlwaysAllowSave) )
     499             :                     OSL_FAIL("Wrong type of \"Misc\\AlwaysAllowSave\"!" );
     500             :             }
     501         272 :             break;
     502             :         }
     503         272 :     }
     504         272 : }
     505             : 
     506       16330 : void SvtMiscOptions_Impl::AddListenerLink( const Link& rLink )
     507             : {
     508       16330 :     aList.push_back( rLink );
     509       16330 : }
     510             : 
     511       16324 : void SvtMiscOptions_Impl::RemoveListenerLink( const Link& rLink )
     512             : {
     513       29391 :     for ( ::std::list<Link>::iterator iter = aList.begin(); iter != aList.end(); ++iter )
     514             :     {
     515       29391 :         if ( *iter == rLink )
     516             :         {
     517       16324 :             aList.erase(iter);
     518       16324 :             break;
     519             :         }
     520             :     }
     521       16324 : }
     522             : 
     523         544 : void SvtMiscOptions_Impl::CallListeners()
     524             : {
     525         544 :     for ( ::std::list<Link>::const_iterator iter = aList.begin(); iter != aList.end(); ++iter )
     526           0 :         iter->Call( this );
     527         544 : }
     528             : 
     529           0 : void SvtMiscOptions_Impl::SetToolboxStyle( sal_Int16 nStyle, bool _bSetModified )
     530             : {
     531           0 :     m_nToolboxStyle = nStyle ? 1 : 0;
     532           0 :     if ( _bSetModified )
     533           0 :         SetModified();
     534           0 :     CallListeners();
     535           0 : }
     536             : 
     537           0 : void SvtMiscOptions_Impl::SetSymbolsSize( sal_Int16 nSet )
     538             : {
     539           0 :     m_nSymbolsSize = nSet;
     540           0 :     SetModified();
     541           0 :     CallListeners();
     542           0 : }
     543             : 
     544      205130 : OUString SvtMiscOptions_Impl::GetIconTheme() const
     545             : {
     546      205130 :     return Application::GetSettings().GetStyleSettings().DetermineIconTheme();
     547             : }
     548             : 
     549             : void
     550         544 : SvtMiscOptions_Impl::SetIconTheme(const OUString &rName, SetModifiedFlag setModified)
     551             : {
     552         544 :     AllSettings aAllSettings = Application::GetSettings();
     553        1088 :     StyleSettings aStyleSettings = aAllSettings.GetStyleSettings();
     554         544 :     aStyleSettings.SetIconTheme( rName );
     555         544 :     m_bIconThemeWasSetAutomatically = false;
     556             : 
     557         544 :     aAllSettings.SetStyleSettings(aStyleSettings);
     558         544 :     Application::MergeSystemSettings( aAllSettings );
     559         544 :     Application::SetSettings(aAllSettings);
     560             : 
     561         544 :     if (setModified == SET_MODIFIED) {
     562           0 :         SetModified();
     563             :     }
     564        1088 :     CallListeners();
     565         544 : }
     566             : 
     567             : 
     568             : //  public method
     569             : 
     570           0 : void SvtMiscOptions_Impl::Notify( const Sequence< OUString >& rPropertyNames )
     571             : {
     572           0 :     Load( rPropertyNames );
     573           0 :     CallListeners();
     574           0 : }
     575             : 
     576             : 
     577             : //  public method
     578             : 
     579         322 : void SvtMiscOptions_Impl::Commit()
     580             : {
     581             :     // Get names of supported properties, create a list for values and copy current values to it.
     582         322 :     Sequence< OUString >    seqNames    = GetPropertyNames  ();
     583         322 :     sal_Int32               nCount      = seqNames.getLength();
     584         644 :     Sequence< Any >         seqValues   ( nCount );
     585        3864 :     for( sal_Int32 nProperty=0; nProperty<nCount; ++nProperty )
     586             :     {
     587        3542 :         switch( nProperty )
     588             :         {
     589             :             case PROPERTYHANDLE_PLUGINSENABLED :
     590             :             {
     591         322 :                 if ( !m_bIsPluginsEnabledRO )
     592         322 :                     seqValues[nProperty] <<= m_bPluginsEnabled;
     593         322 :                 break;
     594             :             }
     595             : 
     596             :             case PROPERTYHANDLE_SYMBOLSET :
     597             :             {
     598         322 :                 if ( !m_bIsSymbolsSizeRO )
     599         322 :                    seqValues[nProperty] <<= m_nSymbolsSize;
     600         322 :                 break;
     601             :             }
     602             : 
     603             :             case PROPERTYHANDLE_TOOLBOXSTYLE :
     604             :             {
     605         322 :                 if ( !m_bIsToolboxStyleRO )
     606         322 :                     seqValues[nProperty] <<= m_nToolboxStyle;
     607         322 :                 break;
     608             :             }
     609             : 
     610             :             case PROPERTYHANDLE_USESYSTEMFILEDIALOG :
     611             :             {
     612         322 :                 if ( !m_bIsUseSystemFileDialogRO )
     613         322 :                     seqValues[nProperty] <<= m_bUseSystemFileDialog;
     614         322 :                 break;
     615             :             }
     616             : 
     617             :             case PROPERTYHANDLE_SYMBOLSTYLE :
     618             :             {
     619         322 :                 if ( !m_bIsSymbolsStyleRO ) {
     620         322 :                     OUString value;
     621         322 :                     if (m_bIconThemeWasSetAutomatically) {
     622         322 :                         value = "auto";
     623             :                     }
     624             :                     else {
     625           0 :                         value = GetIconTheme();
     626             :                     }
     627         322 :                     seqValues[nProperty] <<= value;
     628             :                 }
     629         322 :                 break;
     630             :             }
     631             : 
     632             :             case PROPERTYHANDLE_USESYSTEMPRINTDIALOG :
     633             :             {
     634         322 :                 if ( !m_bIsUseSystemPrintDialogRO )
     635         322 :                     seqValues[nProperty] <<= m_bUseSystemPrintDialog;
     636         322 :                 break;
     637             :             }
     638             : 
     639             :             case PROPERTYHANDLE_SHOWLINKWARNINGDIALOG :
     640             :             {
     641         322 :                 if ( !m_bIsShowLinkWarningDialogRO )
     642         322 :                     seqValues[nProperty] <<= m_bShowLinkWarningDialog;
     643         322 :                 break;
     644             :             }
     645             : 
     646             :             case PROPERTYHANDLE_DISABLEUICUSTOMIZATION :
     647             :             {
     648         322 :                 seqValues[nProperty] <<= m_bDisableUICustomization;
     649         322 :                 break;
     650             :             }
     651             :             case PROPERTYHANDLE_ALWAYSALLOWSAVE :
     652             :             {
     653         322 :                 seqValues[nProperty] <<= m_bAlwaysAllowSave;
     654         322 :                 break;
     655             :             }
     656             :             case PROPERTYHANDLE_EXPERIMENTALMODE :
     657             :             {
     658         322 :                 seqValues[nProperty] <<= m_bExperimentalMode;
     659         322 :                 break;
     660             :             }
     661             :             case PROPERTYHANDLE_MACRORECORDERMODE :
     662             :             {
     663         322 :                 seqValues[nProperty] <<= m_bMacroRecorderMode;
     664         322 :                 break;
     665             :             }
     666             :         }
     667             :     }
     668             :     // Set properties in configuration.
     669         644 :     PutProperties( seqNames, seqValues );
     670         322 : }
     671             : 
     672             : 
     673             : //  private method
     674             : 
     675         866 : Sequence< OUString > SvtMiscOptions_Impl::GetPropertyNames()
     676             : {
     677             :     // Build list of configuration key names.
     678             :     const OUString pProperties[] =
     679             :     {
     680             :         OUString(PROPERTYNAME_PLUGINSENABLED),
     681             :         OUString(PROPERTYNAME_SYMBOLSET),
     682             :         OUString(PROPERTYNAME_TOOLBOXSTYLE),
     683             :         OUString(PROPERTYNAME_USESYSTEMFILEDIALOG),
     684             :         OUString(PROPERTYNAME_ICONTHEME),
     685             :         OUString(PROPERTYNAME_USESYSTEMPRINTDIALOG),
     686             :         OUString(PROPERTYNAME_SHOWLINKWARNINGDIALOG),
     687             :         OUString(PROPERTYNAME_DISABLEUICUSTOMIZATION),
     688             :         OUString(PROPERTYNAME_ALWAYSALLOWSAVE),
     689             :         OUString(PROPERTYNAME_EXPERIMENTALMODE),
     690             :         OUString(PROPERTYNAME_MACRORECORDERMODE)
     691       10392 :     };
     692             : 
     693             :     // Initialize return sequence with these list ...
     694         866 :     const Sequence< OUString > seqPropertyNames( pProperties, SAL_N_ELEMENTS( pProperties ) );
     695             :     // ... and return it.
     696       10392 :     return seqPropertyNames;
     697             : }
     698             : 
     699             : 
     700             : //  initialize static member
     701             : //  DON'T DO IT IN YOUR HEADER!
     702             : //  see definition for further information
     703             : 
     704             : SvtMiscOptions_Impl*    SvtMiscOptions::m_pDataContainer    = NULL  ;
     705             : sal_Int32               SvtMiscOptions::m_nRefCount = 0     ;
     706             : 
     707             : 
     708             : //  constructor
     709             : 
     710      284216 : SvtMiscOptions::SvtMiscOptions()
     711             : {
     712             :     // SvtMiscOptions_Impl ctor indirectly calls code that requires locked
     713             :     // SolarMutex; lock it first:
     714      284216 :     SolarMutexGuard g;
     715             :     // Global access, must be guarded (multithreading!).
     716      568432 :     MutexGuard aGuard( GetInitMutex() );
     717             :     // Increase our refcount ...
     718      284216 :     ++m_nRefCount;
     719             :     // ... and initialize our data container only if it not already exist!
     720      284216 :     if( m_pDataContainer == NULL )
     721             :     {
     722         272 :        m_pDataContainer = new SvtMiscOptions_Impl;
     723         272 :        svtools::ItemHolder2::holdConfigItem(E_MISCOPTIONS);
     724      284216 :     }
     725      284216 : }
     726             : 
     727             : 
     728             : //  destructor
     729             : 
     730      568692 : SvtMiscOptions::~SvtMiscOptions()
     731             : {
     732             :     // Global access, must be guarded (multithreading!)
     733      284212 :     MutexGuard aGuard( GetInitMutex() );
     734             :     // Decrease our refcount.
     735      284212 :     --m_nRefCount;
     736             :     // If last instance was deleted ...
     737             :     // we must destroy our static data container!
     738      284212 :     if( m_nRefCount <= 0 )
     739             :     {
     740         268 :         delete m_pDataContainer;
     741         268 :         m_pDataContainer = NULL;
     742      284212 :     }
     743      284480 : }
     744             : 
     745         164 : bool SvtMiscOptions::UseSystemFileDialog() const
     746             : {
     747         164 :     return m_pDataContainer->UseSystemFileDialog();
     748             : }
     749             : 
     750         320 : void SvtMiscOptions::SetUseSystemFileDialog( bool bEnable )
     751             : {
     752         320 :     m_pDataContainer->SetUseSystemFileDialog( bEnable );
     753         320 : }
     754             : 
     755           0 : bool SvtMiscOptions::IsUseSystemFileDialogReadOnly() const
     756             : {
     757           0 :     return m_pDataContainer->IsUseSystemFileDialogReadOnly();
     758             : }
     759             : 
     760           0 : bool SvtMiscOptions::IsPluginsEnabled() const
     761             : {
     762           0 :     return m_pDataContainer->IsPluginsEnabled();
     763             : }
     764             : 
     765           0 : sal_Int16 SvtMiscOptions::GetSymbolsSize() const
     766             : {
     767           0 :     return m_pDataContainer->GetSymbolsSize();
     768             : }
     769             : 
     770           0 : void SvtMiscOptions::SetSymbolsSize( sal_Int16 nSet )
     771             : {
     772           0 :     m_pDataContainer->SetSymbolsSize( nSet );
     773           0 : }
     774             : 
     775       25557 : sal_Int16 SvtMiscOptions::GetCurrentSymbolsSize() const
     776             : {
     777       25557 :     sal_Int16 eOptSymbolsSize = m_pDataContainer->GetSymbolsSize();
     778             : 
     779       25557 :     if ( eOptSymbolsSize == SFX_SYMBOLS_SIZE_AUTO )
     780             :     {
     781             :         // Use system settings, we have to retrieve the toolbar icon size from the
     782             :         // Application class
     783       25557 :         sal_uLong nStyleIconSize = Application::GetSettings().GetStyleSettings().GetToolbarIconSize();
     784       25557 :         if ( nStyleIconSize == STYLE_TOOLBAR_ICONSIZE_LARGE )
     785           0 :             eOptSymbolsSize = SFX_SYMBOLS_SIZE_LARGE;
     786             :         else
     787       25557 :             eOptSymbolsSize = SFX_SYMBOLS_SIZE_SMALL;
     788             :     }
     789             : 
     790       25557 :     return eOptSymbolsSize;
     791             : }
     792             : 
     793       25495 : bool SvtMiscOptions::AreCurrentSymbolsLarge() const
     794             : {
     795       25495 :     return ( GetCurrentSymbolsSize() == SFX_SYMBOLS_SIZE_LARGE );
     796             : }
     797             : 
     798      205130 : OUString SvtMiscOptions::GetIconTheme() const
     799             : {
     800      205130 :     return m_pDataContainer->GetIconTheme();
     801             : }
     802             : 
     803           0 : void SvtMiscOptions::SetIconTheme(const OUString& iconTheme)
     804             : {
     805           0 :     m_pDataContainer->SetIconTheme(iconTheme);
     806           0 : }
     807             : 
     808        2411 : bool SvtMiscOptions::DisableUICustomization() const
     809             : {
     810        2411 :     return m_pDataContainer->DisableUICustomization();
     811             : }
     812             : 
     813       16268 : sal_Int16 SvtMiscOptions::GetToolboxStyle() const
     814             : {
     815       16268 :     return m_pDataContainer->GetToolboxStyle();
     816             : }
     817             : 
     818           0 : void SvtMiscOptions::SetToolboxStyle( sal_Int16 nStyle )
     819             : {
     820           0 :     m_pDataContainer->SetToolboxStyle( nStyle, true );
     821           0 : }
     822             : 
     823           0 : bool SvtMiscOptions::UseSystemPrintDialog() const
     824             : {
     825           0 :     return m_pDataContainer->UseSystemPrintDialog();
     826             : }
     827             : 
     828           0 : void SvtMiscOptions::SetUseSystemPrintDialog( bool bEnable )
     829             : {
     830           0 :     m_pDataContainer->SetUseSystemPrintDialog( bEnable );
     831           0 : }
     832             : 
     833           0 : bool SvtMiscOptions::ShowLinkWarningDialog() const
     834             : {
     835           0 :     return m_pDataContainer->ShowLinkWarningDialog();
     836             : }
     837             : 
     838           0 : void SvtMiscOptions::SetShowLinkWarningDialog( bool bSet )
     839             : {
     840           0 :     m_pDataContainer->SetShowLinkWarningDialog( bSet );
     841           0 : }
     842             : 
     843           0 : bool SvtMiscOptions::IsShowLinkWarningDialogReadOnly() const
     844             : {
     845           0 :     return m_pDataContainer->IsShowLinkWarningDialogReadOnly();
     846             : }
     847             : 
     848           0 : void SvtMiscOptions::SetSaveAlwaysAllowed( bool bSet )
     849             : {
     850           0 :     m_pDataContainer->SetSaveAlwaysAllowed( bSet );
     851           0 : }
     852             : 
     853        1532 : bool SvtMiscOptions::IsSaveAlwaysAllowed() const
     854             : {
     855        1532 :     return m_pDataContainer->IsSaveAlwaysAllowed();
     856             : }
     857             : 
     858           4 : void SvtMiscOptions::SetExperimentalMode( bool bSet )
     859             : {
     860           4 :     m_pDataContainer->SetExperimentalMode( bSet );
     861           4 : }
     862             : 
     863        1396 : bool SvtMiscOptions::IsExperimentalMode() const
     864             : {
     865        1396 :     return m_pDataContainer->IsExperimentalMode();
     866             : }
     867             : 
     868           0 : void SvtMiscOptions::SetMacroRecorderMode( bool bSet )
     869             : {
     870           0 :     m_pDataContainer->SetMacroRecorderMode( bSet );
     871           0 : }
     872             : 
     873           0 : bool SvtMiscOptions::IsMacroRecorderMode() const
     874             : {
     875           0 :     return m_pDataContainer->IsMacroRecorderMode();
     876             : }
     877             : 
     878             : namespace
     879             : {
     880             :     class theSvtMiscOptionsMutex :
     881             :         public rtl::Static< osl::Mutex, theSvtMiscOptionsMutex > {};
     882             : }
     883             : 
     884      568428 : Mutex & SvtMiscOptions::GetInitMutex()
     885             : {
     886      568428 :     return theSvtMiscOptionsMutex::get();
     887             : }
     888             : 
     889       16330 : void SvtMiscOptions::AddListenerLink( const Link& rLink )
     890             : {
     891       16330 :     m_pDataContainer->AddListenerLink( rLink );
     892       16330 : }
     893             : 
     894       16324 : void SvtMiscOptions::RemoveListenerLink( const Link& rLink )
     895             : {
     896       16324 :     m_pDataContainer->RemoveListenerLink( rLink );
     897       16324 : }
     898             : 
     899             : void
     900         544 : SvtMiscOptions_Impl::SetIconThemeAutomatically(enum SetModifiedFlag setModified)
     901             : {
     902         544 :     OUString theme = Application::GetSettings().GetStyleSettings().GetAutomaticallyChosenIconTheme();
     903         544 :     SetIconTheme(theme, setModified);
     904         544 :     m_bIconThemeWasSetAutomatically = true;
     905         544 : }
     906             : 
     907             : void
     908           0 : SvtMiscOptions::SetIconThemeAutomatically()
     909             : {
     910           0 :     m_pDataContainer->SetIconThemeAutomatically();
     911           0 : }
     912             : 
     913             : bool
     914           0 : SvtMiscOptions::IconThemeWasSetAutomatically()
     915             : {
     916           0 :     return m_pDataContainer->IconThemeWasSetAutomatically();
     917        1227 : }
     918             : 
     919             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10