LCOV - code coverage report
Current view: top level - sc/source/core/tool - appoptio.cxx (source / functions) Hit Total Coverage
Test: commit c8344322a7af75b84dd3ca8f78b05543a976dfd5 Lines: 361 370 97.6 %
Date: 2015-06-13 12:38:46 Functions: 36 36 100.0 %
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 <vcl/svapp.hxx>
      21             : 
      22             : #include <com/sun/star/uno/Any.hxx>
      23             : #include <com/sun/star/uno/Sequence.hxx>
      24             : #include "cfgids.hxx"
      25             : #include "appoptio.hxx"
      26             : #include "rechead.hxx"
      27             : #include "scresid.hxx"
      28             : #include "global.hxx"
      29             : #include "userlist.hxx"
      30             : #include "sc.hrc"
      31             : #include <formula/compiler.hrc>
      32             : #include "miscuno.hxx"
      33             : #include <boost/scoped_array.hpp>
      34             : 
      35             : using namespace utl;
      36             : using namespace com::sun::star::uno;
      37             : 
      38             : //      ScAppOptions - Applikations-Optionen
      39             : 
      40          52 : ScAppOptions::ScAppOptions() : pLRUList( NULL )
      41             : {
      42          52 :     SetDefaults();
      43          52 : }
      44             : 
      45         325 : ScAppOptions::ScAppOptions( const ScAppOptions& rCpy ) : pLRUList( NULL )
      46             : {
      47         325 :     *this = rCpy;
      48         325 : }
      49             : 
      50         341 : ScAppOptions::~ScAppOptions()
      51             : {
      52         341 :     delete [] pLRUList;
      53         341 : }
      54             : 
      55          52 : void ScAppOptions::SetDefaults()
      56             : {
      57          52 :     if ( ScOptionsUtil::IsMetricSystem() )
      58           0 :         eMetric     = FUNIT_CM;             // default for countries with metric system
      59             :     else
      60          52 :         eMetric     = FUNIT_INCH;           // default for others
      61             : 
      62          52 :     nZoom           = 100;
      63          52 :     eZoomType       = SvxZoomType::PERCENT;
      64          52 :     bSynchronizeZoom = true;
      65          52 :     nStatusFunc     = SUBTOTAL_FUNC_SUM;
      66          52 :     bAutoComplete   = true;
      67          52 :     bDetectiveAuto  = true;
      68             : 
      69          52 :     delete [] pLRUList;
      70          52 :     pLRUList = new sal_uInt16[5];               // sinnvoll vorbelegen
      71          52 :     pLRUList[0] = SC_OPCODE_SUM;
      72          52 :     pLRUList[1] = SC_OPCODE_AVERAGE;
      73          52 :     pLRUList[2] = SC_OPCODE_MIN;
      74          52 :     pLRUList[3] = SC_OPCODE_MAX;
      75          52 :     pLRUList[4] = SC_OPCODE_IF;
      76          52 :     nLRUFuncCount = 5;
      77             : 
      78          52 :     nTrackContentColor = COL_TRANSPARENT;
      79          52 :     nTrackInsertColor  = COL_TRANSPARENT;
      80          52 :     nTrackDeleteColor  = COL_TRANSPARENT;
      81          52 :     nTrackMoveColor    = COL_TRANSPARENT;
      82          52 :     eLinkMode          = LM_ON_DEMAND;
      83             : 
      84          52 :     nDefaultObjectSizeWidth = 8000;
      85          52 :     nDefaultObjectSizeHeight = 5000;
      86             : 
      87          52 :     mbShowSharedDocumentWarning = true;
      88             : 
      89          52 :     meKeyBindingType     = ScOptionsUtil::KEY_DEFAULT;
      90          52 : }
      91             : 
      92         345 : const ScAppOptions& ScAppOptions::operator=( const ScAppOptions& rCpy )
      93             : {
      94         345 :     eMetric         = rCpy.eMetric;
      95         345 :     eZoomType       = rCpy.eZoomType;
      96         345 :     bSynchronizeZoom = rCpy.bSynchronizeZoom;
      97         345 :     nZoom           = rCpy.nZoom;
      98         345 :     SetLRUFuncList( rCpy.pLRUList, rCpy.nLRUFuncCount );
      99         345 :     nStatusFunc     = rCpy.nStatusFunc;
     100         345 :     bAutoComplete   = rCpy.bAutoComplete;
     101         345 :     bDetectiveAuto  = rCpy.bDetectiveAuto;
     102         345 :     nTrackContentColor = rCpy.nTrackContentColor;
     103         345 :     nTrackInsertColor  = rCpy.nTrackInsertColor;
     104         345 :     nTrackDeleteColor  = rCpy.nTrackDeleteColor;
     105         345 :     nTrackMoveColor    = rCpy.nTrackMoveColor;
     106         345 :     eLinkMode       = rCpy.eLinkMode;
     107         345 :     nDefaultObjectSizeWidth = rCpy.nDefaultObjectSizeWidth;
     108         345 :     nDefaultObjectSizeHeight = rCpy.nDefaultObjectSizeHeight;
     109         345 :     mbShowSharedDocumentWarning = rCpy.mbShowSharedDocumentWarning;
     110         345 :     meKeyBindingType  = rCpy.meKeyBindingType;
     111         345 :      return *this;
     112             : }
     113             : 
     114         397 : void ScAppOptions::SetLRUFuncList( const sal_uInt16* pList, const sal_uInt16 nCount )
     115             : {
     116         397 :     delete [] pLRUList;
     117             : 
     118         397 :     nLRUFuncCount = nCount;
     119             : 
     120         397 :     if ( nLRUFuncCount > 0 )
     121             :     {
     122         397 :         pLRUList = new sal_uInt16[nLRUFuncCount];
     123             : 
     124        2382 :         for ( sal_uInt16 i=0; i<nLRUFuncCount; i++ )
     125        1985 :             pLRUList[i] = pList[i];
     126             :     }
     127             :     else
     128           0 :         pLRUList = NULL;
     129         397 : }
     130             : 
     131             : //  Config Item containing app options
     132             : 
     133          52 : static void lcl_SetLastFunctions( ScAppOptions& rOpt, const Any& rValue )
     134             : {
     135          52 :     Sequence<sal_Int32> aSeq;
     136          52 :     if ( rValue >>= aSeq )
     137             :     {
     138          52 :         long nCount = aSeq.getLength();
     139          52 :         if ( nCount < USHRT_MAX )
     140             :         {
     141          52 :             const sal_Int32* pArray = aSeq.getConstArray();
     142          52 :             boost::scoped_array<sal_uInt16> pUShorts(new sal_uInt16[nCount]);
     143         312 :             for (long i=0; i<nCount; i++)
     144         260 :                 pUShorts[i] = (sal_uInt16) pArray[i];
     145             : 
     146          52 :             rOpt.SetLRUFuncList( pUShorts.get(), sal::static_int_cast<sal_uInt16>(nCount) );
     147             :         }
     148          52 :     }
     149          52 : }
     150             : 
     151           1 : static void lcl_GetLastFunctions( Any& rDest, const ScAppOptions& rOpt )
     152             : {
     153           1 :     long nCount = rOpt.GetLRUFuncListCount();
     154           1 :     sal_uInt16* pUShorts = rOpt.GetLRUFuncList();
     155           1 :     if ( nCount && pUShorts )
     156             :     {
     157           1 :         Sequence<sal_Int32> aSeq( nCount );
     158           1 :         sal_Int32* pArray = aSeq.getArray();
     159           6 :         for (long i=0; i<nCount; i++)
     160           5 :             pArray[i] = pUShorts[i];
     161           1 :         rDest <<= aSeq;
     162             :     }
     163             :     else
     164           0 :         rDest <<= Sequence<sal_Int32>(0);   // empty
     165           1 : }
     166             : 
     167          52 : static void lcl_SetSortList( const Any& rValue )
     168             : {
     169          52 :     Sequence<OUString> aSeq;
     170          52 :     if ( rValue >>= aSeq )
     171             :     {
     172          52 :         long nCount = aSeq.getLength();
     173          52 :         const OUString* pArray = aSeq.getConstArray();
     174          52 :         ScUserList aList;
     175             : 
     176             :         //  if setting is "default", keep default values from ScUserList ctor
     177             :         //TODO: mark "default" in a safe way
     178          52 :         bool bDefault = ( nCount == 1 && pArray[0] == "NULL" );
     179             : 
     180          52 :         if (!bDefault)
     181             :         {
     182           0 :             aList.clear();
     183             : 
     184           0 :             for (long i=0; i<nCount; i++)
     185             :             {
     186           0 :                 ScUserListData* pNew = new ScUserListData( pArray[i] );
     187           0 :                 aList.push_back(pNew);
     188             :             }
     189             :         }
     190             : 
     191          52 :         ScGlobal::SetUserList( &aList );
     192          52 :     }
     193          52 : }
     194             : 
     195           1 : static void lcl_GetSortList( Any& rDest )
     196             : {
     197           1 :     const ScUserList* pUserList = ScGlobal::GetUserList();
     198           1 :     if (pUserList)
     199             :     {
     200           1 :         size_t nCount = pUserList->size();
     201           1 :         Sequence<OUString> aSeq( nCount );
     202           1 :         OUString* pArray = aSeq.getArray();
     203          10 :         for (size_t i=0; i<nCount; ++i)
     204           9 :             pArray[i] = (*pUserList)[sal::static_int_cast<sal_uInt16>(i)]->GetString();
     205           1 :         rDest <<= aSeq;
     206             :     }
     207             :     else
     208           0 :         rDest <<= Sequence<OUString>(0);    // empty
     209           1 : }
     210             : 
     211             : #define CFGPATH_LAYOUT      "Office.Calc/Layout"
     212             : 
     213             : #define SCLAYOUTOPT_MEASURE         0
     214             : #define SCLAYOUTOPT_STATUSBAR       1
     215             : #define SCLAYOUTOPT_ZOOMVAL         2
     216             : #define SCLAYOUTOPT_ZOOMTYPE        3
     217             : #define SCLAYOUTOPT_SYNCZOOM        4
     218             : #define SCLAYOUTOPT_COUNT           5
     219             : 
     220             : #define CFGPATH_INPUT       "Office.Calc/Input"
     221             : 
     222             : #define SCINPUTOPT_LASTFUNCS        0
     223             : #define SCINPUTOPT_AUTOINPUT        1
     224             : #define SCINPUTOPT_DET_AUTO         2
     225             : #define SCINPUTOPT_COUNT            3
     226             : 
     227             : #define CFGPATH_REVISION    "Office.Calc/Revision/Color"
     228             : 
     229             : #define SCREVISOPT_CHANGE           0
     230             : #define SCREVISOPT_INSERTION        1
     231             : #define SCREVISOPT_DELETION         2
     232             : #define SCREVISOPT_MOVEDENTRY       3
     233             : #define SCREVISOPT_COUNT            4
     234             : 
     235             : #define CFGPATH_CONTENT     "Office.Calc/Content/Update"
     236             : 
     237             : #define SCCONTENTOPT_LINK           0
     238             : #define SCCONTENTOPT_COUNT          1
     239             : 
     240             : #define CFGPATH_SORTLIST    "Office.Calc/SortList"
     241             : 
     242             : #define SCSORTLISTOPT_LIST          0
     243             : #define SCSORTLISTOPT_COUNT         1
     244             : 
     245             : #define CFGPATH_MISC        "Office.Calc/Misc"
     246             : 
     247             : #define SCMISCOPT_DEFOBJWIDTH       0
     248             : #define SCMISCOPT_DEFOBJHEIGHT      1
     249             : #define SCMISCOPT_SHOWSHAREDDOCWARN 2
     250             : #define SCMISCOPT_COUNT             3
     251             : 
     252             : #define CFGPATH_COMPAT      "Office.Calc/Compatibility"
     253             : 
     254             : #define SCCOMPATOPT_KEY_BINDING     0
     255             : #define SCCOMPATOPT_COUNT           1
     256             : 
     257          53 : Sequence<OUString> ScAppCfg::GetLayoutPropertyNames()
     258             : {
     259             :     static const char* aPropNames[] =
     260             :     {
     261             :         "Other/MeasureUnit/NonMetric",  // SCLAYOUTOPT_MEASURE
     262             :         "Other/StatusbarFunction",      // SCLAYOUTOPT_STATUSBAR
     263             :         "Zoom/Value",                   // SCLAYOUTOPT_ZOOMVAL
     264             :         "Zoom/Type",                    // SCLAYOUTOPT_ZOOMTYPE
     265             :         "Zoom/Synchronize"              // SCLAYOUTOPT_SYNCZOOM
     266             :     };
     267          53 :     Sequence<OUString> aNames(SCLAYOUTOPT_COUNT);
     268          53 :     OUString* pNames = aNames.getArray();
     269         318 :     for(int i = 0; i < SCLAYOUTOPT_COUNT; i++)
     270         265 :         pNames[i] = OUString::createFromAscii(aPropNames[i]);
     271             : 
     272             :     //  adjust for metric system
     273          53 :     if (ScOptionsUtil::IsMetricSystem())
     274           0 :         pNames[SCLAYOUTOPT_MEASURE] = "Other/MeasureUnit/Metric";
     275             : 
     276          53 :     return aNames;
     277             : }
     278             : 
     279          53 : Sequence<OUString> ScAppCfg::GetInputPropertyNames()
     280             : {
     281             :     static const char* aPropNames[] =
     282             :     {
     283             :         "LastFunctions",            // SCINPUTOPT_LASTFUNCS
     284             :         "AutoInput",                // SCINPUTOPT_AUTOINPUT
     285             :         "DetectiveAuto"             // SCINPUTOPT_DET_AUTO
     286             :     };
     287          53 :     Sequence<OUString> aNames(SCINPUTOPT_COUNT);
     288          53 :     OUString* pNames = aNames.getArray();
     289         212 :     for(int i = 0; i < SCINPUTOPT_COUNT; i++)
     290         159 :         pNames[i] = OUString::createFromAscii(aPropNames[i]);
     291             : 
     292          53 :     return aNames;
     293             : }
     294             : 
     295          53 : Sequence<OUString> ScAppCfg::GetRevisionPropertyNames()
     296             : {
     297             :     static const char* aPropNames[] =
     298             :     {
     299             :         "Change",                   // SCREVISOPT_CHANGE
     300             :         "Insertion",                // SCREVISOPT_INSERTION
     301             :         "Deletion",                 // SCREVISOPT_DELETION
     302             :         "MovedEntry"                // SCREVISOPT_MOVEDENTRY
     303             :     };
     304          53 :     Sequence<OUString> aNames(SCREVISOPT_COUNT);
     305          53 :     OUString* pNames = aNames.getArray();
     306         265 :     for(int i = 0; i < SCREVISOPT_COUNT; i++)
     307         212 :         pNames[i] = OUString::createFromAscii(aPropNames[i]);
     308             : 
     309          53 :     return aNames;
     310             : }
     311             : 
     312          53 : Sequence<OUString> ScAppCfg::GetContentPropertyNames()
     313             : {
     314             :     static const char* aPropNames[] =
     315             :     {
     316             :         "Link"                      // SCCONTENTOPT_LINK
     317             :     };
     318          53 :     Sequence<OUString> aNames(SCCONTENTOPT_COUNT);
     319          53 :     OUString* pNames = aNames.getArray();
     320         106 :     for(int i = 0; i < SCCONTENTOPT_COUNT; i++)
     321          53 :         pNames[i] = OUString::createFromAscii(aPropNames[i]);
     322             : 
     323          53 :     return aNames;
     324             : }
     325             : 
     326          53 : Sequence<OUString> ScAppCfg::GetSortListPropertyNames()
     327             : {
     328             :     static const char* aPropNames[] =
     329             :     {
     330             :         "List"                      // SCSORTLISTOPT_LIST
     331             :     };
     332          53 :     Sequence<OUString> aNames(SCSORTLISTOPT_COUNT);
     333          53 :     OUString* pNames = aNames.getArray();
     334         106 :     for(int i = 0; i < SCSORTLISTOPT_COUNT; i++)
     335          53 :         pNames[i] = OUString::createFromAscii(aPropNames[i]);
     336             : 
     337          53 :     return aNames;
     338             : }
     339             : 
     340          53 : Sequence<OUString> ScAppCfg::GetMiscPropertyNames()
     341             : {
     342             :     static const char* aPropNames[] =
     343             :     {
     344             :         "DefaultObjectSize/Width",      // SCMISCOPT_DEFOBJWIDTH
     345             :         "DefaultObjectSize/Height",     // SCMISCOPT_DEFOBJHEIGHT
     346             :         "SharedDocument/ShowWarning"    // SCMISCOPT_SHOWSHAREDDOCWARN
     347             :     };
     348          53 :     Sequence<OUString> aNames(SCMISCOPT_COUNT);
     349          53 :     OUString* pNames = aNames.getArray();
     350         212 :     for(int i = 0; i < SCMISCOPT_COUNT; i++)
     351         159 :         pNames[i] = OUString::createFromAscii(aPropNames[i]);
     352             : 
     353          53 :     return aNames;
     354             : }
     355             : 
     356          53 : Sequence<OUString> ScAppCfg::GetCompatPropertyNames()
     357             : {
     358             :     static const char* aPropNames[] =
     359             :     {
     360             :         "KeyBindings/BaseGroup"         // SCCOMPATOPT_KEY_BINDING
     361             :     };
     362          53 :     Sequence<OUString> aNames(SCCOMPATOPT_COUNT);
     363          53 :     OUString* pNames = aNames.getArray();
     364         106 :     for (int i = 0; i < SCCOMPATOPT_COUNT; ++i)
     365          53 :         pNames[i] = OUString::createFromAscii(aPropNames[i]);
     366             : 
     367          53 :     return aNames;
     368             : }
     369             : 
     370          52 : ScAppCfg::ScAppCfg() :
     371             :     aLayoutItem( OUString( CFGPATH_LAYOUT ) ),
     372             :     aInputItem( OUString( CFGPATH_INPUT ) ),
     373             :     aRevisionItem( OUString( CFGPATH_REVISION ) ),
     374             :     aContentItem( OUString( CFGPATH_CONTENT ) ),
     375             :     aSortListItem( OUString( CFGPATH_SORTLIST ) ),
     376             :     aMiscItem( OUString( CFGPATH_MISC ) ),
     377          52 :     aCompatItem( OUString(CFGPATH_COMPAT ) )
     378             : {
     379          52 :     sal_Int32 nIntVal = 0;
     380             : 
     381          52 :     Sequence<OUString> aNames;
     382         104 :     Sequence<Any> aValues;
     383          52 :     const Any* pValues = NULL;
     384             : 
     385          52 :     aNames = GetLayoutPropertyNames();
     386          52 :     aValues = aLayoutItem.GetProperties(aNames);
     387          52 :     aLayoutItem.EnableNotification(aNames);
     388          52 :     pValues = aValues.getConstArray();
     389             :     OSL_ENSURE(aValues.getLength() == aNames.getLength(), "GetProperties failed");
     390          52 :     if(aValues.getLength() == aNames.getLength())
     391             :     {
     392         312 :         for(int nProp = 0; nProp < aNames.getLength(); nProp++)
     393             :         {
     394             :             OSL_ENSURE(pValues[nProp].hasValue(), "property value missing");
     395         260 :             if(pValues[nProp].hasValue())
     396             :             {
     397         260 :                 switch(nProp)
     398             :                 {
     399             :                     case SCLAYOUTOPT_MEASURE:
     400          52 :                         if (pValues[nProp] >>= nIntVal) SetAppMetric( (FieldUnit) nIntVal );
     401          52 :                         break;
     402             :                     case SCLAYOUTOPT_STATUSBAR:
     403          52 :                         if (pValues[nProp] >>= nIntVal) SetStatusFunc( (sal_uInt16) nIntVal );
     404          52 :                         break;
     405             :                     case SCLAYOUTOPT_ZOOMVAL:
     406          52 :                         if (pValues[nProp] >>= nIntVal) SetZoom( (sal_uInt16) nIntVal );
     407          52 :                         break;
     408             :                     case SCLAYOUTOPT_ZOOMTYPE:
     409          52 :                         if (pValues[nProp] >>= nIntVal) SetZoomType( (SvxZoomType) nIntVal );
     410          52 :                         break;
     411             :                     case SCLAYOUTOPT_SYNCZOOM:
     412          52 :                         SetSynchronizeZoom( ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) );
     413          52 :                         break;
     414             :                 }
     415             :             }
     416             :         }
     417             :     }
     418          52 :     aLayoutItem.SetCommitLink( LINK( this, ScAppCfg, LayoutCommitHdl ) );
     419             : 
     420          52 :     aNames = GetInputPropertyNames();
     421          52 :     aValues = aInputItem.GetProperties(aNames);
     422          52 :     aInputItem.EnableNotification(aNames);
     423          52 :     pValues = aValues.getConstArray();
     424             :     OSL_ENSURE(aValues.getLength() == aNames.getLength(), "GetProperties failed");
     425          52 :     if(aValues.getLength() == aNames.getLength())
     426             :     {
     427         208 :         for(int nProp = 0; nProp < aNames.getLength(); nProp++)
     428             :         {
     429             :             OSL_ENSURE(pValues[nProp].hasValue(), "property value missing");
     430         156 :             if(pValues[nProp].hasValue())
     431             :             {
     432         156 :                 switch(nProp)
     433             :                 {
     434             :                     case SCINPUTOPT_LASTFUNCS:
     435          52 :                         lcl_SetLastFunctions( *this, pValues[nProp] );
     436          52 :                         break;
     437             :                     case SCINPUTOPT_AUTOINPUT:
     438          52 :                         SetAutoComplete( ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) );
     439          52 :                         break;
     440             :                     case SCINPUTOPT_DET_AUTO:
     441          52 :                         SetDetectiveAuto( ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) );
     442          52 :                         break;
     443             :                 }
     444             :             }
     445             :         }
     446             :     }
     447          52 :     aInputItem.SetCommitLink( LINK( this, ScAppCfg, InputCommitHdl ) );
     448             : 
     449          52 :     aNames = GetRevisionPropertyNames();
     450          52 :     aValues = aRevisionItem.GetProperties(aNames);
     451          52 :     aRevisionItem.EnableNotification(aNames);
     452          52 :     pValues = aValues.getConstArray();
     453             :     OSL_ENSURE(aValues.getLength() == aNames.getLength(), "GetProperties failed");
     454          52 :     if(aValues.getLength() == aNames.getLength())
     455             :     {
     456         260 :         for(int nProp = 0; nProp < aNames.getLength(); nProp++)
     457             :         {
     458             :             OSL_ENSURE(pValues[nProp].hasValue(), "property value missing");
     459         208 :             if(pValues[nProp].hasValue())
     460             :             {
     461         208 :                 switch(nProp)
     462             :                 {
     463             :                     case SCREVISOPT_CHANGE:
     464          52 :                         if (pValues[nProp] >>= nIntVal) SetTrackContentColor( (sal_uInt32) nIntVal );
     465          52 :                         break;
     466             :                     case SCREVISOPT_INSERTION:
     467          52 :                         if (pValues[nProp] >>= nIntVal) SetTrackInsertColor( (sal_uInt32) nIntVal );
     468          52 :                         break;
     469             :                     case SCREVISOPT_DELETION:
     470          52 :                         if (pValues[nProp] >>= nIntVal) SetTrackDeleteColor( (sal_uInt32) nIntVal );
     471          52 :                         break;
     472             :                     case SCREVISOPT_MOVEDENTRY:
     473          52 :                         if (pValues[nProp] >>= nIntVal) SetTrackMoveColor( (sal_uInt32) nIntVal );
     474          52 :                         break;
     475             :                 }
     476             :             }
     477             :         }
     478             :     }
     479          52 :     aRevisionItem.SetCommitLink( LINK( this, ScAppCfg, RevisionCommitHdl ) );
     480             : 
     481          52 :     aNames = GetContentPropertyNames();
     482          52 :     aValues = aContentItem.GetProperties(aNames);
     483          52 :     aContentItem.EnableNotification(aNames);
     484          52 :     pValues = aValues.getConstArray();
     485             :     OSL_ENSURE(aValues.getLength() == aNames.getLength(), "GetProperties failed");
     486          52 :     if(aValues.getLength() == aNames.getLength())
     487             :     {
     488         104 :         for(int nProp = 0; nProp < aNames.getLength(); nProp++)
     489             :         {
     490             :             OSL_ENSURE(pValues[nProp].hasValue(), "property value missing");
     491          52 :             if(pValues[nProp].hasValue())
     492             :             {
     493          52 :                 switch(nProp)
     494             :                 {
     495             :                     case SCCONTENTOPT_LINK:
     496          52 :                         if (pValues[nProp] >>= nIntVal) SetLinkMode( (ScLkUpdMode) nIntVal );
     497          52 :                         break;
     498             :                 }
     499             :             }
     500             :         }
     501             :     }
     502          52 :     aContentItem.SetCommitLink( LINK( this, ScAppCfg, ContentCommitHdl ) );
     503             : 
     504          52 :     aNames = GetSortListPropertyNames();
     505          52 :     aValues = aSortListItem.GetProperties(aNames);
     506          52 :     aSortListItem.EnableNotification(aNames);
     507          52 :     pValues = aValues.getConstArray();
     508             :     OSL_ENSURE(aValues.getLength() == aNames.getLength(), "GetProperties failed");
     509          52 :     if(aValues.getLength() == aNames.getLength())
     510             :     {
     511         104 :         for(int nProp = 0; nProp < aNames.getLength(); nProp++)
     512             :         {
     513             :             OSL_ENSURE(pValues[nProp].hasValue(), "property value missing");
     514          52 :             if(pValues[nProp].hasValue())
     515             :             {
     516          52 :                 switch(nProp)
     517             :                 {
     518             :                     case SCSORTLISTOPT_LIST:
     519          52 :                         lcl_SetSortList( pValues[nProp] );
     520          52 :                         break;
     521             :                 }
     522             :             }
     523             :         }
     524             :     }
     525          52 :     aSortListItem.SetCommitLink( LINK( this, ScAppCfg, SortListCommitHdl ) );
     526             : 
     527          52 :     aNames = GetMiscPropertyNames();
     528          52 :     aValues = aMiscItem.GetProperties(aNames);
     529          52 :     aMiscItem.EnableNotification(aNames);
     530          52 :     pValues = aValues.getConstArray();
     531             :     OSL_ENSURE(aValues.getLength() == aNames.getLength(), "GetProperties failed");
     532          52 :     if(aValues.getLength() == aNames.getLength())
     533             :     {
     534         208 :         for(int nProp = 0; nProp < aNames.getLength(); nProp++)
     535             :         {
     536             :             OSL_ENSURE(pValues[nProp].hasValue(), "property value missing");
     537         156 :             if(pValues[nProp].hasValue())
     538             :             {
     539         156 :                 switch(nProp)
     540             :                 {
     541             :                     case SCMISCOPT_DEFOBJWIDTH:
     542          52 :                         if (pValues[nProp] >>= nIntVal) SetDefaultObjectSizeWidth( nIntVal );
     543          52 :                         break;
     544             :                     case SCMISCOPT_DEFOBJHEIGHT:
     545          52 :                         if (pValues[nProp] >>= nIntVal) SetDefaultObjectSizeHeight( nIntVal );
     546          52 :                         break;
     547             :                     case SCMISCOPT_SHOWSHAREDDOCWARN:
     548          52 :                         SetShowSharedDocumentWarning( ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) );
     549          52 :                         break;
     550             :                 }
     551             :             }
     552             :         }
     553             :     }
     554          52 :     aMiscItem.SetCommitLink( LINK( this, ScAppCfg, MiscCommitHdl ) );
     555             : 
     556          52 :     aNames = GetCompatPropertyNames();
     557          52 :     aValues = aCompatItem.GetProperties(aNames);
     558          52 :     aCompatItem.EnableNotification(aNames);
     559          52 :     pValues = aValues.getConstArray();
     560          52 :     if (aValues.getLength() == aNames.getLength())
     561             :     {
     562         104 :         for (int nProp = 0; nProp < aNames.getLength(); ++nProp)
     563             :         {
     564          52 :             switch (nProp)
     565             :             {
     566             :                 case SCCOMPATOPT_KEY_BINDING:
     567             :                 {
     568          52 :                     nIntVal = 0; // 0 = 'Default'
     569          52 :                     pValues[nProp] >>= nIntVal;
     570          52 :                     SetKeyBindingType(static_cast<ScOptionsUtil::KeyBindingType>(nIntVal));
     571             :                 }
     572          52 :                 break;
     573             :             }
     574             :         }
     575             :     }
     576         104 :     aCompatItem.SetCommitLink( LINK(this, ScAppCfg, CompatCommitHdl) );
     577          52 : }
     578           2 :  IMPL_LINK_NOARG(ScAppCfg, LayoutCommitHdl)
     579             : {
     580           1 :     Sequence<OUString> aNames = GetLayoutPropertyNames();
     581           2 :     Sequence<Any> aValues(aNames.getLength());
     582           1 :     Any* pValues = aValues.getArray();
     583             : 
     584           6 :     for(int nProp = 0; nProp < aNames.getLength(); nProp++)
     585             :     {
     586           5 :         switch(nProp)
     587             :         {
     588             :             case SCLAYOUTOPT_MEASURE:
     589           1 :                 pValues[nProp] <<= (sal_Int32) GetAppMetric();
     590           1 :                 break;
     591             :             case SCLAYOUTOPT_STATUSBAR:
     592           1 :                 pValues[nProp] <<= (sal_Int32) GetStatusFunc();
     593           1 :                 break;
     594             :             case SCLAYOUTOPT_ZOOMVAL:
     595           1 :                 pValues[nProp] <<= (sal_Int32) GetZoom();
     596           1 :                 break;
     597             :             case SCLAYOUTOPT_ZOOMTYPE:
     598           1 :                 pValues[nProp] <<= (sal_Int32) GetZoomType();
     599           1 :                 break;
     600             :             case SCLAYOUTOPT_SYNCZOOM:
     601           1 :                 ScUnoHelpFunctions::SetBoolInAny( pValues[nProp], GetSynchronizeZoom() );
     602           1 :                 break;
     603             :         }
     604             :     }
     605           1 :     aLayoutItem.PutProperties(aNames, aValues);
     606             : 
     607           2 :     return 0;
     608             : }
     609             : 
     610           2 : IMPL_LINK_NOARG(ScAppCfg, InputCommitHdl)
     611             : {
     612           1 :     Sequence<OUString> aNames = GetInputPropertyNames();
     613           2 :     Sequence<Any> aValues(aNames.getLength());
     614           1 :     Any* pValues = aValues.getArray();
     615             : 
     616           4 :     for(int nProp = 0; nProp < aNames.getLength(); nProp++)
     617             :     {
     618           3 :         switch(nProp)
     619             :         {
     620             :             case SCINPUTOPT_LASTFUNCS:
     621           1 :                 lcl_GetLastFunctions( pValues[nProp], *this );
     622           1 :                 break;
     623             :             case SCINPUTOPT_AUTOINPUT:
     624           1 :                 ScUnoHelpFunctions::SetBoolInAny( pValues[nProp], GetAutoComplete() );
     625           1 :                 break;
     626             :             case SCINPUTOPT_DET_AUTO:
     627           1 :                 ScUnoHelpFunctions::SetBoolInAny( pValues[nProp], GetDetectiveAuto() );
     628           1 :                 break;
     629             :         }
     630             :     }
     631           1 :     aInputItem.PutProperties(aNames, aValues);
     632             : 
     633           2 :     return 0;
     634             : }
     635             : 
     636           2 : IMPL_LINK_NOARG(ScAppCfg, RevisionCommitHdl)
     637             : {
     638           1 :     Sequence<OUString> aNames = GetRevisionPropertyNames();
     639           2 :     Sequence<Any> aValues(aNames.getLength());
     640           1 :     Any* pValues = aValues.getArray();
     641             : 
     642           5 :     for(int nProp = 0; nProp < aNames.getLength(); nProp++)
     643             :     {
     644           4 :         switch(nProp)
     645             :         {
     646             :             case SCREVISOPT_CHANGE:
     647           1 :                 pValues[nProp] <<= (sal_Int32) GetTrackContentColor();
     648           1 :                 break;
     649             :             case SCREVISOPT_INSERTION:
     650           1 :                 pValues[nProp] <<= (sal_Int32) GetTrackInsertColor();
     651           1 :                 break;
     652             :             case SCREVISOPT_DELETION:
     653           1 :                 pValues[nProp] <<= (sal_Int32) GetTrackDeleteColor();
     654           1 :                 break;
     655             :             case SCREVISOPT_MOVEDENTRY:
     656           1 :                 pValues[nProp] <<= (sal_Int32) GetTrackMoveColor();
     657           1 :                 break;
     658             :         }
     659             :     }
     660           1 :     aRevisionItem.PutProperties(aNames, aValues);
     661             : 
     662           2 :     return 0;
     663             : }
     664             : 
     665           2 : IMPL_LINK_NOARG(ScAppCfg, ContentCommitHdl)
     666             : {
     667           1 :     Sequence<OUString> aNames = GetContentPropertyNames();
     668           2 :     Sequence<Any> aValues(aNames.getLength());
     669           1 :     Any* pValues = aValues.getArray();
     670             : 
     671           2 :     for(int nProp = 0; nProp < aNames.getLength(); nProp++)
     672             :     {
     673           1 :         switch(nProp)
     674             :         {
     675             :             case SCCONTENTOPT_LINK:
     676           1 :                 pValues[nProp] <<= (sal_Int32) GetLinkMode();
     677           1 :                 break;
     678             :         }
     679             :     }
     680           1 :     aContentItem.PutProperties(aNames, aValues);
     681             : 
     682           2 :     return 0;
     683             : }
     684             : 
     685           2 : IMPL_LINK_NOARG(ScAppCfg, SortListCommitHdl)
     686             : {
     687           1 :     Sequence<OUString> aNames = GetSortListPropertyNames();
     688           2 :     Sequence<Any> aValues(aNames.getLength());
     689           1 :     Any* pValues = aValues.getArray();
     690             : 
     691           2 :     for(int nProp = 0; nProp < aNames.getLength(); nProp++)
     692             :     {
     693           1 :         switch(nProp)
     694             :         {
     695             :             case SCSORTLISTOPT_LIST:
     696           1 :                 lcl_GetSortList( pValues[nProp] );
     697           1 :                 break;
     698             :         }
     699             :     }
     700           1 :     aSortListItem.PutProperties(aNames, aValues);
     701             : 
     702           2 :     return 0;
     703             : }
     704             : 
     705           2 : IMPL_LINK_NOARG(ScAppCfg, MiscCommitHdl)
     706             : {
     707           1 :     Sequence<OUString> aNames = GetMiscPropertyNames();
     708           2 :     Sequence<Any> aValues(aNames.getLength());
     709           1 :     Any* pValues = aValues.getArray();
     710             : 
     711           4 :     for(int nProp = 0; nProp < aNames.getLength(); nProp++)
     712             :     {
     713           3 :         switch(nProp)
     714             :         {
     715             :             case SCMISCOPT_DEFOBJWIDTH:
     716           1 :                 pValues[nProp] <<= (sal_Int32) GetDefaultObjectSizeWidth();
     717           1 :                 break;
     718             :             case SCMISCOPT_DEFOBJHEIGHT:
     719           1 :                 pValues[nProp] <<= (sal_Int32) GetDefaultObjectSizeHeight();
     720           1 :                 break;
     721             :             case SCMISCOPT_SHOWSHAREDDOCWARN:
     722           1 :                 ScUnoHelpFunctions::SetBoolInAny( pValues[nProp], GetShowSharedDocumentWarning() );
     723           1 :                 break;
     724             :         }
     725             :     }
     726           1 :     aMiscItem.PutProperties(aNames, aValues);
     727             : 
     728           2 :     return 0;
     729             : }
     730             : 
     731           2 : IMPL_LINK_NOARG(ScAppCfg, CompatCommitHdl)
     732             : {
     733           1 :     Sequence<OUString> aNames = GetCompatPropertyNames();
     734           2 :     Sequence<Any> aValues(aNames.getLength());
     735           1 :     Any* pValues = aValues.getArray();
     736             : 
     737           2 :     for (int nProp = 0; nProp < aNames.getLength(); ++nProp)
     738             :     {
     739           1 :         switch(nProp)
     740             :         {
     741             :             case SCCOMPATOPT_KEY_BINDING:
     742           1 :                 pValues[nProp] <<= static_cast<sal_Int32>(GetKeyBindingType());
     743           1 :             break;
     744             :         }
     745             :     }
     746           1 :     aCompatItem.PutProperties(aNames, aValues);
     747           2 :     return 0;
     748             : }
     749             : 
     750          20 : void ScAppCfg::SetOptions( const ScAppOptions& rNew )
     751             : {
     752          20 :     *static_cast<ScAppOptions*>(this) = rNew;
     753          20 :     OptionsChanged();
     754          20 : }
     755             : 
     756          20 : void ScAppCfg::OptionsChanged()
     757             : {
     758          20 :     aLayoutItem.SetModified();
     759          20 :     aInputItem.SetModified();
     760          20 :     aRevisionItem.SetModified();
     761          20 :     aContentItem.SetModified();
     762          20 :     aSortListItem.SetModified();
     763          20 :     aMiscItem.SetModified();
     764          20 :     aCompatItem.SetModified();
     765         176 : }
     766             : 
     767             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.11