LCOV - code coverage report
Current view: top level - sc/source/core/tool - docoptio.cxx (source / functions) Hit Total Coverage
Test: commit 10e77ab3ff6f4314137acd6e2702a6e5c1ce1fae Lines: 97 161 60.2 %
Date: 2014-11-03 Functions: 10 27 37.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             : #include <svl/zforlist.hxx>
      22             : 
      23             : #include <com/sun/star/uno/Any.hxx>
      24             : #include <com/sun/star/uno/Sequence.hxx>
      25             : 
      26             : #include "cfgids.hxx"
      27             : #include "docoptio.hxx"
      28             : #include "rechead.hxx"
      29             : #include "scresid.hxx"
      30             : #include "sc.hrc"
      31             : #include "miscuno.hxx"
      32             : #include "global.hxx"
      33             : #include "globstr.hrc"
      34             : 
      35             : using namespace utl;
      36             : using namespace com::sun::star::uno;
      37             : 
      38           0 : TYPEINIT1(ScTpCalcItem, SfxPoolItem);
      39             : 
      40             : using sc::HMMToTwips;
      41             : using sc::TwipsToHMM;
      42             : using sc::TwipsToEvenHMM;
      43             : 
      44        6570 : static sal_uInt16 lcl_GetDefaultTabDist()
      45             : {
      46        6570 :     if ( ScOptionsUtil::IsMetricSystem() )
      47           0 :         return 709;                 // 1,25 cm
      48             :     else
      49        6570 :         return 720;                 // 1/2"
      50             : }
      51             : 
      52             : //      ScDocOptions - Dokument-Optionen
      53             : 
      54        6570 : ScDocOptions::ScDocOptions()
      55             : {
      56        6570 :     ResetDocOptions();
      57        6570 : }
      58             : 
      59        8300 : ScDocOptions::ScDocOptions( const ScDocOptions& rCpy )
      60             :         :   fIterEps( rCpy.fIterEps ),
      61             :             nIterCount( rCpy.nIterCount ),
      62             :             nPrecStandardFormat( rCpy.nPrecStandardFormat ),
      63             :             nDay( rCpy.nDay ),
      64             :             nMonth( rCpy.nMonth ),
      65             :             nYear( rCpy.nYear ),
      66             :             nYear2000( rCpy.nYear2000 ),
      67             :             nTabDistance( rCpy.nTabDistance ),
      68             :             bIsIgnoreCase( rCpy.bIsIgnoreCase ),
      69             :             bIsIter( rCpy.bIsIter ),
      70             :             bCalcAsShown( rCpy.bCalcAsShown ),
      71             :             bMatchWholeCell( rCpy.bMatchWholeCell ),
      72             :             bDoAutoSpell( rCpy.bDoAutoSpell ),
      73             :             bLookUpColRowNames( rCpy.bLookUpColRowNames ),
      74        8300 :             bFormulaRegexEnabled( rCpy.bFormulaRegexEnabled )
      75             : {
      76        8300 : }
      77             : 
      78       14720 : ScDocOptions::~ScDocOptions()
      79             : {
      80       14720 : }
      81             : 
      82        6570 : void ScDocOptions::ResetDocOptions()
      83             : {
      84        6570 :     bIsIgnoreCase       = false;
      85        6570 :     bIsIter             = false;
      86        6570 :     nIterCount          = 100;
      87        6570 :     fIterEps            = 1.0E-3;
      88        6570 :     nPrecStandardFormat = SvNumberFormatter::UNLIMITED_PRECISION;
      89        6570 :     nDay                = 30;
      90        6570 :     nMonth              = 12;
      91        6570 :     nYear               = 1899;
      92        6570 :     nYear2000           = SvNumberFormatter::GetYear2000Default();
      93        6570 :     nTabDistance        = lcl_GetDefaultTabDist();
      94        6570 :     bCalcAsShown        = false;
      95        6570 :     bMatchWholeCell     = true;
      96        6570 :     bDoAutoSpell        = false;
      97        6570 :     bLookUpColRowNames  = true;
      98        6570 :     bFormulaRegexEnabled= true;
      99        6570 : }
     100             : 
     101             : //      ScTpCalcItem - Daten fuer die CalcOptions-TabPage
     102             : 
     103           0 : ScTpCalcItem::ScTpCalcItem( sal_uInt16 nWhichP, const ScDocOptions& rOpt )
     104             :     :   SfxPoolItem ( nWhichP ),
     105           0 :         theOptions  ( rOpt )
     106             : {
     107           0 : }
     108             : 
     109           0 : ScTpCalcItem::ScTpCalcItem( const ScTpCalcItem& rItem )
     110             :     :   SfxPoolItem ( rItem ),
     111           0 :         theOptions  ( rItem.theOptions )
     112             : {
     113           0 : }
     114             : 
     115           0 : ScTpCalcItem::~ScTpCalcItem()
     116             : {
     117           0 : }
     118             : 
     119           0 : OUString ScTpCalcItem::GetValueText() const
     120             : {
     121           0 :     return OUString("ScTpCalcItem");
     122             : }
     123             : 
     124           0 : bool ScTpCalcItem::operator==( const SfxPoolItem& rItem ) const
     125             : {
     126             :     assert(SfxPoolItem::operator==(rItem));
     127             : 
     128           0 :     const ScTpCalcItem& rPItem = static_cast<const ScTpCalcItem&>(rItem);
     129             : 
     130           0 :     return ( theOptions == rPItem.theOptions );
     131             : }
     132             : 
     133           0 : SfxPoolItem* ScTpCalcItem::Clone( SfxItemPool * ) const
     134             : {
     135           0 :     return new ScTpCalcItem( *this );
     136             : }
     137             : 
     138             : //  Config Item containing document options
     139             : 
     140             : #define CFGPATH_CALC        "Office.Calc/Calculate"
     141             : 
     142             : #define SCCALCOPT_ITER_ITER         0
     143             : #define SCCALCOPT_ITER_STEPS        1
     144             : #define SCCALCOPT_ITER_MINCHG       2
     145             : #define SCCALCOPT_DATE_DAY          3
     146             : #define SCCALCOPT_DATE_MONTH        4
     147             : #define SCCALCOPT_DATE_YEAR         5
     148             : #define SCCALCOPT_DECIMALS          6
     149             : #define SCCALCOPT_CASESENSITIVE     7
     150             : #define SCCALCOPT_PRECISION         8
     151             : #define SCCALCOPT_SEARCHCRIT        9
     152             : #define SCCALCOPT_FINDLABEL         10
     153             : #define SCCALCOPT_REGEX             11
     154             : #define SCCALCOPT_COUNT             12
     155             : 
     156             : #define CFGPATH_DOCLAYOUT   "Office.Calc/Layout/Other"
     157             : 
     158             : #define SCDOCLAYOUTOPT_TABSTOP      0
     159             : #define SCDOCLAYOUTOPT_COUNT        1
     160             : 
     161          70 : Sequence<OUString> ScDocCfg::GetCalcPropertyNames()
     162             : {
     163             :     static const char* aPropNames[] =
     164             :     {
     165             :         "IterativeReference/Iteration",     // SCCALCOPT_ITER_ITER
     166             :         "IterativeReference/Steps",         // SCCALCOPT_ITER_STEPS
     167             :         "IterativeReference/MinimumChange", // SCCALCOPT_ITER_MINCHG
     168             :         "Other/Date/DD",                    // SCCALCOPT_DATE_DAY
     169             :         "Other/Date/MM",                    // SCCALCOPT_DATE_MONTH
     170             :         "Other/Date/YY",                    // SCCALCOPT_DATE_YEAR
     171             :         "Other/DecimalPlaces",              // SCCALCOPT_DECIMALS
     172             :         "Other/CaseSensitive",              // SCCALCOPT_CASESENSITIVE
     173             :         "Other/Precision",                  // SCCALCOPT_PRECISION
     174             :         "Other/SearchCriteria",             // SCCALCOPT_SEARCHCRIT
     175             :         "Other/FindLabel",                  // SCCALCOPT_FINDLABEL
     176             :         "Other/RegularExpressions",         // SCCALCOPT_REGEX
     177             :     };
     178          70 :     Sequence<OUString> aNames(SCCALCOPT_COUNT);
     179          70 :     OUString* pNames = aNames.getArray();
     180         910 :     for(int i = 0; i < SCCALCOPT_COUNT; i++)
     181         840 :         pNames[i] = OUString::createFromAscii(aPropNames[i]);
     182             : 
     183          70 :     return aNames;
     184             : }
     185             : 
     186          70 : Sequence<OUString> ScDocCfg::GetLayoutPropertyNames()
     187             : {
     188             :     static const char* aPropNames[] =
     189             :     {
     190             :         "TabStop/NonMetric"         // SCDOCLAYOUTOPT_TABSTOP
     191             :     };
     192          70 :     Sequence<OUString> aNames(SCDOCLAYOUTOPT_COUNT);
     193          70 :     OUString* pNames = aNames.getArray();
     194         140 :     for(int i = 0; i < SCDOCLAYOUTOPT_COUNT; i++)
     195          70 :         pNames[i] = OUString::createFromAscii(aPropNames[i]);
     196             : 
     197             :     //  adjust for metric system
     198          70 :     if (ScOptionsUtil::IsMetricSystem())
     199           0 :         pNames[SCDOCLAYOUTOPT_TABSTOP] = "TabStop/Metric";
     200             : 
     201          70 :     return aNames;
     202             : }
     203             : 
     204          70 : ScDocCfg::ScDocCfg() :
     205             :     aCalcItem( OUString( CFGPATH_CALC ) ),
     206          70 :     aLayoutItem(OUString(CFGPATH_DOCLAYOUT))
     207             : {
     208          70 :     sal_Int32 nIntVal = 0;
     209             : 
     210          70 :     Sequence<OUString> aNames;
     211         140 :     Sequence<Any> aValues;
     212          70 :     const Any* pValues = NULL;
     213             : 
     214             :     sal_uInt16 nDateDay, nDateMonth, nDateYear;
     215          70 :     GetDate( nDateDay, nDateMonth, nDateYear );
     216             : 
     217          70 :     aNames = GetCalcPropertyNames();
     218          70 :     aValues = aCalcItem.GetProperties(aNames);
     219          70 :     aCalcItem.EnableNotification(aNames);
     220          70 :     pValues = aValues.getConstArray();
     221             :     OSL_ENSURE(aValues.getLength() == aNames.getLength(), "GetProperties failed");
     222          70 :     if(aValues.getLength() == aNames.getLength())
     223             :     {
     224          70 :         double fDoubleVal = 0;
     225         910 :         for(int nProp = 0; nProp < aNames.getLength(); nProp++)
     226             :         {
     227             :             OSL_ENSURE(pValues[nProp].hasValue(), "property value missing");
     228         840 :             if(pValues[nProp].hasValue())
     229             :             {
     230         840 :                 switch(nProp)
     231             :                 {
     232             :                     case SCCALCOPT_ITER_ITER:
     233          70 :                         SetIter( ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) );
     234          70 :                         break;
     235             :                     case SCCALCOPT_ITER_STEPS:
     236          70 :                         if (pValues[nProp] >>= nIntVal) SetIterCount( (sal_uInt16) nIntVal );
     237          70 :                         break;
     238             :                     case SCCALCOPT_ITER_MINCHG:
     239          70 :                         if (pValues[nProp] >>= fDoubleVal) SetIterEps( fDoubleVal );
     240          70 :                         break;
     241             :                     case SCCALCOPT_DATE_DAY:
     242          70 :                         if (pValues[nProp] >>= nIntVal) nDateDay = (sal_uInt16) nIntVal;
     243          70 :                         break;
     244             :                     case SCCALCOPT_DATE_MONTH:
     245          70 :                         if (pValues[nProp] >>= nIntVal) nDateMonth = (sal_uInt16) nIntVal;
     246          70 :                         break;
     247             :                     case SCCALCOPT_DATE_YEAR:
     248          70 :                         if (pValues[nProp] >>= nIntVal) nDateYear = (sal_uInt16) nIntVal;
     249          70 :                         break;
     250             :                     case SCCALCOPT_DECIMALS:
     251          70 :                         if (pValues[nProp] >>= nIntVal) SetStdPrecision( (sal_uInt16) nIntVal );
     252          70 :                         break;
     253             :                     case SCCALCOPT_CASESENSITIVE:
     254             :                         // content is reversed
     255          70 :                         SetIgnoreCase( !ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) );
     256          70 :                         break;
     257             :                     case SCCALCOPT_PRECISION:
     258          70 :                         SetCalcAsShown( ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) );
     259          70 :                         break;
     260             :                     case SCCALCOPT_SEARCHCRIT:
     261          70 :                         SetMatchWholeCell( ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) );
     262          70 :                         break;
     263             :                     case SCCALCOPT_FINDLABEL:
     264          70 :                         SetLookUpColRowNames( ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) );
     265          70 :                         break;
     266             :                     case SCCALCOPT_REGEX :
     267          70 :                         SetFormulaRegexEnabled( ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) );
     268          70 :                         break;
     269             :                 }
     270             :             }
     271             :         }
     272             :     }
     273          70 :     aCalcItem.SetCommitLink( LINK( this, ScDocCfg, CalcCommitHdl ) );
     274             : 
     275          70 :     SetDate( nDateDay, nDateMonth, nDateYear );
     276             : 
     277          70 :     aNames = GetLayoutPropertyNames();
     278          70 :     aValues = aLayoutItem.GetProperties(aNames);
     279          70 :     aLayoutItem.EnableNotification(aNames);
     280          70 :     pValues = aValues.getConstArray();
     281             :     OSL_ENSURE(aValues.getLength() == aNames.getLength(), "GetProperties failed");
     282          70 :     if(aValues.getLength() == aNames.getLength())
     283             :     {
     284         140 :         for(int nProp = 0; nProp < aNames.getLength(); nProp++)
     285             :         {
     286             :             OSL_ENSURE(pValues[nProp].hasValue(), "property value missing");
     287          70 :             if(pValues[nProp].hasValue())
     288             :             {
     289          70 :                 switch(nProp)
     290             :                 {
     291             :                     case SCDOCLAYOUTOPT_TABSTOP:
     292             :                         // TabDistance in ScDocOptions is in twips
     293          70 :                         if (pValues[nProp] >>= nIntVal)
     294          70 :                             SetTabDistance( (sal_uInt16) HMMToTwips( nIntVal ) );
     295          70 :                         break;
     296             :                 }
     297             :             }
     298             :         }
     299             :     }
     300         140 :     aLayoutItem.SetCommitLink( LINK( this, ScDocCfg, LayoutCommitHdl ) );
     301          70 : }
     302             : 
     303           0 : IMPL_LINK_NOARG(ScDocCfg, CalcCommitHdl)
     304             : {
     305           0 :     Sequence<OUString> aNames = GetCalcPropertyNames();
     306           0 :     Sequence<Any> aValues(aNames.getLength());
     307           0 :     Any* pValues = aValues.getArray();
     308             : 
     309             :     sal_uInt16 nDateDay, nDateMonth, nDateYear;
     310           0 :     GetDate( nDateDay, nDateMonth, nDateYear );
     311             : 
     312           0 :     for(int nProp = 0; nProp < aNames.getLength(); nProp++)
     313             :     {
     314           0 :         switch(nProp)
     315             :         {
     316             :             case SCCALCOPT_ITER_ITER:
     317           0 :                 ScUnoHelpFunctions::SetBoolInAny( pValues[nProp], IsIter() );
     318           0 :                 break;
     319             :             case SCCALCOPT_ITER_STEPS:
     320           0 :                 pValues[nProp] <<= (sal_Int32) GetIterCount();
     321           0 :                 break;
     322             :             case SCCALCOPT_ITER_MINCHG:
     323           0 :                 pValues[nProp] <<= (double) GetIterEps();
     324           0 :                 break;
     325             :             case SCCALCOPT_DATE_DAY:
     326           0 :                 pValues[nProp] <<= (sal_Int32) nDateDay;
     327           0 :                 break;
     328             :             case SCCALCOPT_DATE_MONTH:
     329           0 :                 pValues[nProp] <<= (sal_Int32) nDateMonth;
     330           0 :                 break;
     331             :             case SCCALCOPT_DATE_YEAR:
     332           0 :                 pValues[nProp] <<= (sal_Int32) nDateYear;
     333           0 :                 break;
     334             :             case SCCALCOPT_DECIMALS:
     335           0 :                 pValues[nProp] <<= (sal_Int32) GetStdPrecision();
     336           0 :                 break;
     337             :             case SCCALCOPT_CASESENSITIVE:
     338             :                 // content is reversed
     339           0 :                 ScUnoHelpFunctions::SetBoolInAny( pValues[nProp], !IsIgnoreCase() );
     340           0 :                 break;
     341             :             case SCCALCOPT_PRECISION:
     342           0 :                 ScUnoHelpFunctions::SetBoolInAny( pValues[nProp], IsCalcAsShown() );
     343           0 :                 break;
     344             :             case SCCALCOPT_SEARCHCRIT:
     345           0 :                 ScUnoHelpFunctions::SetBoolInAny( pValues[nProp], IsMatchWholeCell() );
     346           0 :                 break;
     347             :             case SCCALCOPT_FINDLABEL:
     348           0 :                 ScUnoHelpFunctions::SetBoolInAny( pValues[nProp], IsLookUpColRowNames() );
     349           0 :                 break;
     350             :             case SCCALCOPT_REGEX :
     351           0 :                 ScUnoHelpFunctions::SetBoolInAny( pValues[nProp], IsFormulaRegexEnabled() );
     352             :         }
     353             :     }
     354           0 :     aCalcItem.PutProperties(aNames, aValues);
     355             : 
     356           0 :     return 0;
     357             : }
     358             : 
     359           0 : IMPL_LINK_NOARG(ScDocCfg, LayoutCommitHdl)
     360             : {
     361           0 :     Sequence<OUString> aNames = GetLayoutPropertyNames();
     362           0 :     Sequence<Any> aValues(aNames.getLength());
     363           0 :     Any* pValues = aValues.getArray();
     364             : 
     365           0 :     for(int nProp = 0; nProp < aNames.getLength(); nProp++)
     366             :     {
     367           0 :         switch(nProp)
     368             :         {
     369             :             case SCDOCLAYOUTOPT_TABSTOP:
     370             :                 //  TabDistance in ScDocOptions is in twips
     371             :                 //  use only even numbers, so defaults don't get changed
     372             :                 //  by modifying other settings in the same config item
     373           0 :                 pValues[nProp] <<= (sal_Int32) TwipsToEvenHMM( GetTabDistance() );
     374           0 :                 break;
     375             :         }
     376             :     }
     377           0 :     aLayoutItem.PutProperties(aNames, aValues);
     378             : 
     379           0 :     return 0;
     380             : }
     381             : 
     382           0 : void ScDocCfg::SetOptions( const ScDocOptions& rNew )
     383             : {
     384           0 :     *(ScDocOptions*)this = rNew;
     385             : 
     386           0 :     aCalcItem.SetModified();
     387           0 :     aLayoutItem.SetModified();
     388         228 : }
     389             : 
     390             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10