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

Generated by: LCOV version 1.11