LCOV - code coverage report
Current view: top level - sc/source/core/tool - formulaopt.cxx (source / functions) Hit Total Coverage
Test: commit c8344322a7af75b84dd3ca8f78b05543a976dfd5 Lines: 125 305 41.0 %
Date: 2015-06-13 12:38:46 Functions: 13 30 43.3 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /*
       3             :  * This file is part of the LibreOffice project.
       4             :  *
       5             :  * This Source Code Form is subject to the terms of the Mozilla Public
       6             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       7             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       8             :  */
       9             : 
      10             : #include <ctype.h>
      11             : 
      12             : #include <com/sun/star/uno/Any.hxx>
      13             : #include <com/sun/star/uno/Sequence.hxx>
      14             : #include <com/sun/star/lang/Locale.hpp>
      15             : #include <com/sun/star/i18n/LocaleDataItem.hpp>
      16             : #include <osl/diagnose.h>
      17             : 
      18             : #include "formulaopt.hxx"
      19             : #include "miscuno.hxx"
      20             : #include "global.hxx"
      21             : #include "formulagroup.hxx"
      22             : 
      23             : using namespace utl;
      24             : using namespace com::sun::star::uno;
      25             : namespace lang = ::com::sun::star::lang;
      26             : using ::com::sun::star::i18n::LocaleDataItem;
      27             : 
      28           0 : TYPEINIT1(ScTpFormulaItem, SfxPoolItem);
      29             : 
      30          54 : ScFormulaOptions::ScFormulaOptions()
      31             : {
      32          54 :     SetDefaults();
      33          54 : }
      34             : 
      35         609 : ScFormulaOptions::ScFormulaOptions( const ScFormulaOptions& rCpy ) :
      36             :     bUseEnglishFuncName ( rCpy.bUseEnglishFuncName ),
      37             :     eFormulaGrammar     ( rCpy.eFormulaGrammar ),
      38             :     aCalcConfig(rCpy.aCalcConfig),
      39             :     aFormulaSepArg      ( rCpy.aFormulaSepArg ),
      40             :     aFormulaSepArrayRow ( rCpy.aFormulaSepArrayRow ),
      41             :     aFormulaSepArrayCol ( rCpy.aFormulaSepArrayCol ),
      42             :     meOOXMLRecalc       ( rCpy.meOOXMLRecalc ),
      43         609 :     meODFRecalc         ( rCpy.meODFRecalc )
      44             : {
      45         609 : }
      46             : 
      47         630 : ScFormulaOptions::~ScFormulaOptions()
      48             : {
      49         630 : }
      50             : 
      51          54 : void ScFormulaOptions::SetDefaults()
      52             : {
      53          54 :     bUseEnglishFuncName = false;
      54          54 :     eFormulaGrammar     = ::formula::FormulaGrammar::GRAM_NATIVE;
      55          54 :     meOOXMLRecalc = RECALC_ASK;
      56          54 :     meODFRecalc = RECALC_ASK;
      57             : 
      58             :     // unspecified means use the current formula syntax.
      59          54 :     aCalcConfig.reset();
      60             : 
      61          54 :     ResetFormulaSeparators();
      62          54 : }
      63             : 
      64          54 : void ScFormulaOptions::ResetFormulaSeparators()
      65             : {
      66          54 :     GetDefaultFormulaSeparators(aFormulaSepArg, aFormulaSepArrayCol, aFormulaSepArrayRow);
      67          54 : }
      68             : 
      69          54 : void ScFormulaOptions::GetDefaultFormulaSeparators(
      70             :     OUString& rSepArg, OUString& rSepArrayCol, OUString& rSepArrayRow)
      71             : {
      72             :     // Defaults to the old separator values.
      73          54 :     rSepArg = ";";
      74          54 :     rSepArrayCol = ";";
      75          54 :     rSepArrayRow = "|";
      76             : 
      77          54 :     const lang::Locale& rLocale = *ScGlobal::GetLocale();
      78          54 :     const OUString& rLang = rLocale.Language;
      79          54 :     if (rLang == "ru")
      80             :         // Don't do automatic guess for these languages, and fall back to
      81             :         // the old separator set.
      82           0 :         return;
      83             : 
      84          54 :     const LocaleDataWrapper& rLocaleData = GetLocaleDataWrapper();
      85          54 :     const OUString& rDecSep  = rLocaleData.getNumDecimalSep();
      86          54 :     const OUString& rListSep = rLocaleData.getListSep();
      87             : 
      88          54 :     if (rDecSep.isEmpty() || rListSep.isEmpty())
      89             :         // Something is wrong.  Stick with the default separators.
      90           0 :         return;
      91             : 
      92          54 :     sal_Unicode cDecSep  = rDecSep[0];
      93          54 :     sal_Unicode cListSep = rListSep[0];
      94             : 
      95             :     // Excel by default uses system's list separator as the parameter
      96             :     // separator, which in English locales is a comma.  However, OOo's list
      97             :     // separator value is set to ';' for all English locales.  Because of this
      98             :     // discrepancy, we will hardcode the separator value here, for now.
      99          54 :     if (cDecSep == '.')
     100          54 :         cListSep = ',';
     101             : 
     102             :     // Special case for de_CH locale.
     103          54 :     if (rLocale.Language == "de" && rLocale.Country == "CH")
     104           0 :         cListSep = ';';
     105             : 
     106             :     // by default, the parameter separator equals the locale-specific
     107             :     // list separator.
     108          54 :     rSepArg = OUString(cListSep);
     109             : 
     110          54 :     if (cDecSep == cListSep && cDecSep != ';')
     111             :         // if the decimal and list separators are equal, set the
     112             :         // parameter separator to be ';', unless they are both
     113             :         // semicolon in which case don't change the decimal separator.
     114           0 :         rSepArg = ";";
     115             : 
     116          54 :     rSepArrayCol = ",";
     117          54 :     if (cDecSep == ',')
     118           0 :         rSepArrayCol = ".";
     119          54 :     rSepArrayRow = ";";
     120             : }
     121             : 
     122          54 : const LocaleDataWrapper& ScFormulaOptions::GetLocaleDataWrapper()
     123             : {
     124          54 :     return *ScGlobal::pLocaleData;
     125             : }
     126             : 
     127           0 : ScFormulaOptions& ScFormulaOptions::operator=( const ScFormulaOptions& rCpy )
     128             : {
     129           0 :     bUseEnglishFuncName = rCpy.bUseEnglishFuncName;
     130           0 :     eFormulaGrammar     = rCpy.eFormulaGrammar;
     131           0 :     aCalcConfig = rCpy.aCalcConfig;
     132           0 :     aFormulaSepArg      = rCpy.aFormulaSepArg;
     133           0 :     aFormulaSepArrayRow = rCpy.aFormulaSepArrayRow;
     134           0 :     aFormulaSepArrayCol = rCpy.aFormulaSepArrayCol;
     135           0 :     meOOXMLRecalc       = rCpy.meOOXMLRecalc;
     136           0 :     meODFRecalc         = rCpy.meODFRecalc;
     137           0 :     return *this;
     138             : }
     139             : 
     140           0 : bool ScFormulaOptions::operator==( const ScFormulaOptions& rOpt ) const
     141             : {
     142           0 :     return bUseEnglishFuncName == rOpt.bUseEnglishFuncName
     143           0 :         && eFormulaGrammar     == rOpt.eFormulaGrammar
     144           0 :         && aCalcConfig == rOpt.aCalcConfig
     145           0 :         && aFormulaSepArg      == rOpt.aFormulaSepArg
     146           0 :         && aFormulaSepArrayRow == rOpt.aFormulaSepArrayRow
     147           0 :         && aFormulaSepArrayCol == rOpt.aFormulaSepArrayCol
     148           0 :         && meOOXMLRecalc       == rOpt.meOOXMLRecalc
     149           0 :         && meODFRecalc         == rOpt.meODFRecalc;
     150             : }
     151             : 
     152           0 : bool ScFormulaOptions::operator!=( const ScFormulaOptions& rOpt ) const
     153             : {
     154           0 :     return !(operator==(rOpt));
     155             : }
     156             : 
     157           0 : ScTpFormulaItem::ScTpFormulaItem( sal_uInt16 nWhichP, const ScFormulaOptions& rOpt ) :
     158             :     SfxPoolItem ( nWhichP ),
     159           0 :     theOptions  ( rOpt )
     160             : {
     161           0 : }
     162             : 
     163           0 : ScTpFormulaItem::ScTpFormulaItem( const ScTpFormulaItem& rItem ) :
     164             :     SfxPoolItem ( rItem ),
     165           0 :     theOptions  ( rItem.theOptions )
     166             : {
     167           0 : }
     168             : 
     169           0 : ScTpFormulaItem::~ScTpFormulaItem()
     170             : {
     171           0 : }
     172             : 
     173           0 : bool ScTpFormulaItem::operator==( const SfxPoolItem& rItem ) const
     174             : {
     175             :     assert(SfxPoolItem::operator==(rItem));
     176             : 
     177           0 :     const ScTpFormulaItem& rPItem = static_cast<const ScTpFormulaItem&>(rItem);
     178           0 :     return ( theOptions == rPItem.theOptions );
     179             : }
     180             : 
     181           0 : SfxPoolItem* ScTpFormulaItem::Clone( SfxItemPool * ) const
     182             : {
     183           0 :     return new ScTpFormulaItem( *this );
     184             : }
     185             : 
     186             : #define CFGPATH_FORMULA           "Office.Calc/Formula"
     187             : 
     188             : #define SCFORMULAOPT_GRAMMAR              0
     189             : #define SCFORMULAOPT_ENGLISH_FUNCNAME     1
     190             : #define SCFORMULAOPT_SEP_ARG              2
     191             : #define SCFORMULAOPT_SEP_ARRAY_ROW        3
     192             : #define SCFORMULAOPT_SEP_ARRAY_COL        4
     193             : #define SCFORMULAOPT_STRING_REF_SYNTAX    5
     194             : #define SCFORMULAOPT_STRING_CONVERSION    6
     195             : #define SCFORMULAOPT_EMPTY_OUSTRING_AS_ZERO 7
     196             : #define SCFORMULAOPT_OOXML_RECALC         8
     197             : #define SCFORMULAOPT_ODF_RECALC           9
     198             : #define SCFORMULAOPT_OPENCL_AUTOSELECT   10
     199             : #define SCFORMULAOPT_OPENCL_DEVICE       11
     200             : #define SCFORMULAOPT_OPENCL_SUBSET_ONLY  12
     201             : #define SCFORMULAOPT_OPENCL_MIN_SIZE     13
     202             : #define SCFORMULAOPT_OPENCL_SUBSET_OPS   14
     203             : #define SCFORMULAOPT_COUNT               15
     204             : 
     205          98 : Sequence<OUString> ScFormulaCfg::GetPropertyNames()
     206             : {
     207             :     static const char* aPropNames[] =
     208             :     {
     209             :         "Syntax/Grammar",                // SCFORMULAOPT_GRAMMAR
     210             :         "Syntax/EnglishFunctionName",    // SCFORMULAOPT_ENGLISH_FUNCNAME
     211             :         "Syntax/SeparatorArg",           // SCFORMULAOPT_SEP_ARG
     212             :         "Syntax/SeparatorArrayRow",      // SCFORMULAOPT_SEP_ARRAY_ROW
     213             :         "Syntax/SeparatorArrayCol",      // SCFORMULAOPT_SEP_ARRAY_COL
     214             :         "Syntax/StringRefAddressSyntax", // SCFORMULAOPT_STRING_REF_SYNTAX
     215             :         "Syntax/StringConversion",       // SCFORMULAOPT_STRING_CONVERSION
     216             :         "Syntax/EmptyStringAsZero",      // SCFORMULAOPT_EMPTY_OUSTRING_AS_ZERO
     217             :         "Load/OOXMLRecalcMode",          // SCFORMULAOPT_OOXML_RECALC
     218             :         "Load/ODFRecalcMode",            // SCFORMULAOPT_ODF_RECALC
     219             :         "Calculation/OpenCLAutoSelect",  // SCFORMULAOPT_OPENCL_AUTOSELECT
     220             :         "Calculation/OpenCLDevice",      // SCFORMULAOPT_OPENCL_DEVICE
     221             :         "Calculation/OpenCLSubsetOnly",  // SCFORMULAOPT_OPENCL_SUBSET_ONLY
     222             :         "Calculation/OpenCLMinimumDataSize",  // SCFORMULAOPT_OPENCL_MIN_SIZE
     223             :         "Calculation/OpenCLSubsetOpCodes",    // SCFORMULAOPT_OPENCL_SUBSET_OPS
     224             :     };
     225          98 :     Sequence<OUString> aNames(SCFORMULAOPT_COUNT);
     226          98 :     OUString* pNames = aNames.getArray();
     227        1568 :     for (int i = 0; i < SCFORMULAOPT_COUNT; ++i)
     228        1470 :         pNames[i] = OUString::createFromAscii(aPropNames[i]);
     229             : 
     230          98 :     return aNames;
     231             : }
     232             : 
     233          49 : ScFormulaCfg::PropsToIds ScFormulaCfg::GetPropNamesToId()
     234             : {
     235          49 :     Sequence<OUString> aPropNames = GetPropertyNames();
     236             :     static sal_uInt16 aVals[] = {
     237             :         SCFORMULAOPT_GRAMMAR,
     238             :         SCFORMULAOPT_ENGLISH_FUNCNAME,
     239             :         SCFORMULAOPT_SEP_ARG,
     240             :         SCFORMULAOPT_SEP_ARRAY_ROW,
     241             :         SCFORMULAOPT_SEP_ARRAY_COL,
     242             :         SCFORMULAOPT_STRING_REF_SYNTAX,
     243             :         SCFORMULAOPT_STRING_CONVERSION,
     244             :         SCFORMULAOPT_EMPTY_OUSTRING_AS_ZERO,
     245             :         SCFORMULAOPT_OOXML_RECALC,
     246             :         SCFORMULAOPT_ODF_RECALC,
     247             :         SCFORMULAOPT_OPENCL_AUTOSELECT,
     248             :         SCFORMULAOPT_OPENCL_DEVICE,
     249             :         SCFORMULAOPT_OPENCL_SUBSET_ONLY,
     250             :         SCFORMULAOPT_OPENCL_MIN_SIZE,
     251             :         SCFORMULAOPT_OPENCL_SUBSET_OPS,
     252             :     };
     253             :     OSL_ENSURE( SAL_N_ELEMENTS(aVals) == aPropNames.getLength(), "Properties and ids are out of Sync");
     254          49 :     PropsToIds aPropIdMap;
     255         784 :     for ( sal_Int32 i=0; i<aPropNames.getLength(); ++i )
     256         735 :         aPropIdMap[aPropNames[i]] = aVals[ i ];
     257          49 :     return aPropIdMap;
     258             : }
     259             : 
     260          49 : ScFormulaCfg::ScFormulaCfg() :
     261          49 :     ConfigItem( OUString( CFGPATH_FORMULA ) )
     262             : {
     263          49 :     Sequence<OUString> aNames = GetPropertyNames();
     264          49 :     UpdateFromProperties( aNames );
     265          49 :     EnableNotification( aNames );
     266          49 : }
     267             : 
     268          49 : void ScFormulaCfg::UpdateFromProperties( const Sequence<OUString>& aNames )
     269             : {
     270          49 :     Sequence<Any> aValues = GetProperties(aNames);
     271          49 :     const Any* pValues = aValues.getConstArray();
     272             :     OSL_ENSURE(aValues.getLength() == aNames.getLength(), "GetProperties failed");
     273          98 :     PropsToIds aPropMap = GetPropNamesToId();
     274          49 :     if(aValues.getLength() == aNames.getLength())
     275             :     {
     276          49 :         sal_Int32 nIntVal = 0;
     277         784 :         for(int nProp = 0; nProp < aNames.getLength(); nProp++)
     278             :         {
     279         735 :             PropsToIds::iterator it_end = aPropMap.end();
     280         735 :             PropsToIds::iterator it = aPropMap.find( aNames[nProp] );
     281         735 :             if(pValues[nProp].hasValue() && it != it_end )
     282             :             {
     283         588 :                 switch(it->second)
     284             :                 {
     285             :                 case SCFORMULAOPT_GRAMMAR:
     286             :                 {
     287             :                     // Get default value in case this option is not set.
     288           0 :                     ::formula::FormulaGrammar::Grammar eGram = GetFormulaSyntax();
     289             : 
     290             :                     do
     291             :                     {
     292           0 :                         if (!(pValues[nProp] >>= nIntVal))
     293             :                             // extractino failed.
     294           0 :                             break;
     295             : 
     296           0 :                         switch (nIntVal)
     297             :                         {
     298             :                             case 0: // Calc A1
     299           0 :                                 eGram = ::formula::FormulaGrammar::GRAM_NATIVE;
     300           0 :                             break;
     301             :                             case 1: // Excel A1
     302           0 :                                 eGram = ::formula::FormulaGrammar::GRAM_NATIVE_XL_A1;
     303           0 :                             break;
     304             :                             case 2: // Excel R1C1
     305           0 :                                 eGram = ::formula::FormulaGrammar::GRAM_NATIVE_XL_R1C1;
     306           0 :                             break;
     307             :                             default:
     308             :                                 ;
     309             :                         }
     310             :                     }
     311             :                     while (false);
     312           0 :                     SetFormulaSyntax(eGram);
     313             :                 }
     314           0 :                 break;
     315             :                 case SCFORMULAOPT_ENGLISH_FUNCNAME:
     316             :                 {
     317          49 :                     bool bEnglish = false;
     318          49 :                     if (pValues[nProp] >>= bEnglish)
     319          49 :                         SetUseEnglishFuncName(bEnglish);
     320             :                 }
     321          49 :                 break;
     322             :                 case SCFORMULAOPT_SEP_ARG:
     323             :                 {
     324          49 :                     OUString aSep;
     325          49 :                     if ((pValues[nProp] >>= aSep) && !aSep.isEmpty())
     326           0 :                         SetFormulaSepArg(aSep);
     327             :                 }
     328          49 :                 break;
     329             :                 case SCFORMULAOPT_SEP_ARRAY_ROW:
     330             :                 {
     331          49 :                     OUString aSep;
     332          49 :                     if ((pValues[nProp] >>= aSep) && !aSep.isEmpty())
     333           0 :                         SetFormulaSepArrayRow(aSep);
     334             :                 }
     335          49 :                 break;
     336             :                 case SCFORMULAOPT_SEP_ARRAY_COL:
     337             :                 {
     338          49 :                     OUString aSep;
     339          49 :                     if ((pValues[nProp] >>= aSep) && !aSep.isEmpty())
     340           0 :                         SetFormulaSepArrayCol(aSep);
     341             :                 }
     342          49 :                 break;
     343             :                 case SCFORMULAOPT_STRING_REF_SYNTAX:
     344             :                 {
     345             :                     // Get default value in case this option is not set.
     346           0 :                     ::formula::FormulaGrammar::AddressConvention eConv = GetCalcConfig().meStringRefAddressSyntax;
     347             : 
     348             :                     do
     349             :                     {
     350           0 :                         if (!(pValues[nProp] >>= nIntVal))
     351             :                             // extraction failed.
     352           0 :                             break;
     353             : 
     354           0 :                         switch (nIntVal)
     355             :                         {
     356             :                             case -1: // Same as the formula grammar.
     357           0 :                                 eConv = formula::FormulaGrammar::CONV_UNSPECIFIED;
     358           0 :                             break;
     359             :                             case 0: // Calc A1
     360           0 :                                 eConv = formula::FormulaGrammar::CONV_OOO;
     361           0 :                             break;
     362             :                             case 1: // Excel A1
     363           0 :                                 eConv = formula::FormulaGrammar::CONV_XL_A1;
     364           0 :                             break;
     365             :                             case 2: // Excel R1C1
     366           0 :                                 eConv = formula::FormulaGrammar::CONV_XL_R1C1;
     367           0 :                             break;
     368             :                             default:
     369             :                                 ;
     370             :                         }
     371             :                     }
     372             :                     while (false);
     373           0 :                     GetCalcConfig().meStringRefAddressSyntax = eConv;
     374             :                 }
     375           0 :                 break;
     376             :                 case SCFORMULAOPT_STRING_CONVERSION:
     377             :                 {
     378             :                     // Get default value in case this option is not set.
     379           0 :                     ScCalcConfig::StringConversion eConv = GetCalcConfig().meStringConversion;
     380             : 
     381             :                     do
     382             :                     {
     383           0 :                         if (!(pValues[nProp] >>= nIntVal))
     384             :                             // extraction failed.
     385           0 :                             break;
     386             : 
     387           0 :                         switch (nIntVal)
     388             :                         {
     389             :                             case 0:
     390           0 :                                 eConv = ScCalcConfig::StringConversion::ILLEGAL;
     391           0 :                             break;
     392             :                             case 1:
     393           0 :                                 eConv = ScCalcConfig::StringConversion::ZERO;
     394           0 :                             break;
     395             :                             case 2:
     396           0 :                                 eConv = ScCalcConfig::StringConversion::UNAMBIGUOUS;
     397           0 :                             break;
     398             :                             case 3:
     399           0 :                                 eConv = ScCalcConfig::StringConversion::LOCALE;
     400           0 :                             break;
     401             :                             default:
     402             :                                 SAL_WARN("sc", "unknown string conversion option!");
     403             :                         }
     404             :                     }
     405             :                     while (false);
     406           0 :                     GetCalcConfig().meStringConversion = eConv;
     407             :                 }
     408           0 :                 break;
     409             :                 case SCFORMULAOPT_EMPTY_OUSTRING_AS_ZERO:
     410             :                 {
     411          49 :                     bool bVal = GetCalcConfig().mbEmptyStringAsZero;
     412          49 :                     pValues[nProp] >>= bVal;
     413          49 :                     GetCalcConfig().mbEmptyStringAsZero = bVal;
     414             :                 }
     415          49 :                 break;
     416             :                 case SCFORMULAOPT_OOXML_RECALC:
     417             :                 {
     418          49 :                     ScRecalcOptions eOpt = RECALC_ASK;
     419          49 :                     if (pValues[nProp] >>= nIntVal)
     420             :                     {
     421          49 :                         switch (nIntVal)
     422             :                         {
     423             :                             case 0:
     424           0 :                                 eOpt = RECALC_ALWAYS;
     425           0 :                                 break;
     426             :                             case 1:
     427          49 :                                 eOpt = RECALC_NEVER;
     428          49 :                                 break;
     429             :                             case 2:
     430           0 :                                 eOpt = RECALC_ASK;
     431           0 :                                 break;
     432             :                             default:
     433             :                                 SAL_WARN("sc", "unknown ooxml recalc option!");
     434             :                         }
     435             :                     }
     436             : 
     437          49 :                     SetOOXMLRecalcOptions(eOpt);
     438             :                 }
     439          49 :                 break;
     440             :                 case SCFORMULAOPT_ODF_RECALC:
     441             :                 {
     442          49 :                     ScRecalcOptions eOpt = RECALC_ASK;
     443          49 :                     if (pValues[nProp] >>= nIntVal)
     444             :                     {
     445          49 :                         switch (nIntVal)
     446             :                         {
     447             :                             case 0:
     448           0 :                                 eOpt = RECALC_ALWAYS;
     449           0 :                                 break;
     450             :                             case 1:
     451          49 :                                 eOpt = RECALC_NEVER;
     452          49 :                                 break;
     453             :                             case 2:
     454           0 :                                 eOpt = RECALC_ASK;
     455           0 :                                 break;
     456             :                             default:
     457             :                                 SAL_WARN("sc", "unknown odf recalc option!");
     458             :                         }
     459             :                     }
     460             : 
     461          49 :                     SetODFRecalcOptions(eOpt);
     462             :                 }
     463          49 :                 break;
     464             :                 case SCFORMULAOPT_OPENCL_AUTOSELECT:
     465             :                 {
     466          49 :                     bool bVal = GetCalcConfig().mbOpenCLAutoSelect;
     467          49 :                     pValues[nProp] >>= bVal;
     468          49 :                     GetCalcConfig().mbOpenCLAutoSelect = bVal;
     469             :                 }
     470          49 :                 break;
     471             :                 case SCFORMULAOPT_OPENCL_DEVICE:
     472             :                 {
     473          49 :                     OUString aOpenCLDevice = GetCalcConfig().maOpenCLDevice;
     474          49 :                     pValues[nProp] >>= aOpenCLDevice;
     475          49 :                     GetCalcConfig().maOpenCLDevice = aOpenCLDevice;
     476             :                 }
     477          49 :                 break;
     478             :                 case SCFORMULAOPT_OPENCL_SUBSET_ONLY:
     479             :                 {
     480          49 :                     bool bVal = GetCalcConfig().mbOpenCLSubsetOnly;
     481          49 :                     pValues[nProp] >>= bVal;
     482          49 :                     GetCalcConfig().mbOpenCLSubsetOnly = bVal;
     483             :                 }
     484          49 :                 break;
     485             :                 case SCFORMULAOPT_OPENCL_MIN_SIZE:
     486             :                 {
     487          49 :                     sal_Int32 nVal = GetCalcConfig().mnOpenCLMinimumFormulaGroupSize;
     488          49 :                     pValues[nProp] >>= nVal;
     489          49 :                     GetCalcConfig().mnOpenCLMinimumFormulaGroupSize = nVal;
     490             :                 }
     491          49 :                 break;
     492             :                 case SCFORMULAOPT_OPENCL_SUBSET_OPS:
     493             :                 {
     494          49 :                     OUString sVal = ScOpCodeSetToSymbolicString(GetCalcConfig().maOpenCLSubsetOpCodes);
     495          49 :                     pValues[nProp] >>= sVal;
     496          49 :                     GetCalcConfig().maOpenCLSubsetOpCodes = ScStringToOpCodeSet(sVal);
     497             :                 }
     498          49 :                 break;
     499             :                 }
     500             :             }
     501             :         }
     502          49 :     }
     503          49 : }
     504             : 
     505           0 : void ScFormulaCfg::ImplCommit()
     506             : {
     507           0 :     Sequence<OUString> aNames = GetPropertyNames();
     508           0 :     Sequence<Any> aValues(aNames.getLength());
     509           0 :     Any* pValues = aValues.getArray();
     510           0 :     bool bSetOpenCL = false;
     511             : 
     512           0 :     for (int nProp = 0; nProp < aNames.getLength(); ++nProp)
     513             :     {
     514           0 :         switch (nProp)
     515             :         {
     516             :             case SCFORMULAOPT_GRAMMAR :
     517             :             {
     518           0 :                 sal_Int32 nVal = 0;
     519           0 :                 switch (GetFormulaSyntax())
     520             :                 {
     521           0 :                     case ::formula::FormulaGrammar::GRAM_NATIVE_XL_A1:    nVal = 1; break;
     522           0 :                     case ::formula::FormulaGrammar::GRAM_NATIVE_XL_R1C1:  nVal = 2; break;
     523           0 :                     default: break;
     524             :                 }
     525           0 :                 pValues[nProp] <<= nVal;
     526             :             }
     527           0 :             break;
     528             :             case SCFORMULAOPT_ENGLISH_FUNCNAME:
     529             :             {
     530           0 :                 bool b = GetUseEnglishFuncName();
     531           0 :                 pValues[nProp] <<= b;
     532             :             }
     533           0 :             break;
     534             :             case SCFORMULAOPT_SEP_ARG:
     535           0 :                 pValues[nProp] <<= GetFormulaSepArg();
     536           0 :             break;
     537             :             case SCFORMULAOPT_SEP_ARRAY_ROW:
     538           0 :                 pValues[nProp] <<= GetFormulaSepArrayRow();
     539           0 :             break;
     540             :             case SCFORMULAOPT_SEP_ARRAY_COL:
     541           0 :                 pValues[nProp] <<= GetFormulaSepArrayCol();
     542           0 :             break;
     543             :             case SCFORMULAOPT_STRING_REF_SYNTAX:
     544             :             {
     545           0 :                 sal_Int32 nVal = -1;
     546           0 :                 switch (GetCalcConfig().meStringRefAddressSyntax)
     547             :                 {
     548           0 :                     case ::formula::FormulaGrammar::CONV_OOO:     nVal = 0; break;
     549           0 :                     case ::formula::FormulaGrammar::CONV_XL_A1:   nVal = 1; break;
     550           0 :                     case ::formula::FormulaGrammar::CONV_XL_R1C1: nVal = 2; break;
     551           0 :                     default: break;
     552             :                 }
     553           0 :                 pValues[nProp] <<= nVal;
     554             :             }
     555           0 :             break;
     556             :             case SCFORMULAOPT_STRING_CONVERSION:
     557             :             {
     558           0 :                 sal_Int32 nVal = 3;
     559           0 :                 switch (GetCalcConfig().meStringConversion)
     560             :                 {
     561           0 :                 case ScCalcConfig::StringConversion::ILLEGAL:     nVal = 0; break;
     562           0 :                 case ScCalcConfig::StringConversion::ZERO:        nVal = 1; break;
     563           0 :                 case ScCalcConfig::StringConversion::UNAMBIGUOUS: nVal = 2; break;
     564           0 :                 case ScCalcConfig::StringConversion::LOCALE:      nVal = 3; break;
     565             :                 }
     566           0 :                 pValues[nProp] <<= nVal;
     567             :             }
     568           0 :             break;
     569             :             case SCFORMULAOPT_EMPTY_OUSTRING_AS_ZERO:
     570             :             {
     571           0 :                 bool bVal = GetCalcConfig().mbEmptyStringAsZero;
     572           0 :                 pValues[nProp] <<= bVal;
     573             :             }
     574           0 :             break;
     575             :             case SCFORMULAOPT_OOXML_RECALC:
     576             :             {
     577           0 :                 sal_Int32 nVal = 2;
     578           0 :                 switch (GetOOXMLRecalcOptions())
     579             :                 {
     580             :                     case RECALC_ALWAYS:
     581           0 :                         nVal = 0;
     582           0 :                         break;
     583             :                     case RECALC_NEVER:
     584           0 :                         nVal = 1;
     585           0 :                         break;
     586             :                     case RECALC_ASK:
     587           0 :                         nVal = 2;
     588           0 :                         break;
     589             :                 }
     590             : 
     591           0 :                 pValues[nProp] <<= nVal;
     592             :             }
     593           0 :             break;
     594             :             case SCFORMULAOPT_ODF_RECALC:
     595             :             {
     596           0 :                 sal_Int32 nVal = 2;
     597           0 :                 switch (GetODFRecalcOptions())
     598             :                 {
     599             :                     case RECALC_ALWAYS:
     600           0 :                         nVal = 0;
     601           0 :                         break;
     602             :                     case RECALC_NEVER:
     603           0 :                         nVal = 1;
     604           0 :                         break;
     605             :                     case RECALC_ASK:
     606           0 :                         nVal = 2;
     607           0 :                         break;
     608             :                 }
     609             : 
     610           0 :                 pValues[nProp] <<= nVal;
     611             :             }
     612           0 :             break;
     613             :             case SCFORMULAOPT_OPENCL_AUTOSELECT:
     614             :             {
     615           0 :                 bool bVal = GetCalcConfig().mbOpenCLAutoSelect;
     616           0 :                 pValues[nProp] <<= bVal;
     617           0 :                 bSetOpenCL = true;
     618             :             }
     619           0 :             break;
     620             :             case SCFORMULAOPT_OPENCL_DEVICE:
     621             :             {
     622           0 :                 OUString aOpenCLDevice = GetCalcConfig().maOpenCLDevice;
     623           0 :                 pValues[nProp] <<= aOpenCLDevice;
     624           0 :                 bSetOpenCL = true;
     625             :             }
     626           0 :             break;
     627             :             case SCFORMULAOPT_OPENCL_SUBSET_ONLY:
     628             :             {
     629           0 :                 bool bVal = GetCalcConfig().mbOpenCLSubsetOnly;
     630           0 :                 pValues[nProp] <<= bVal;
     631             :             }
     632           0 :             break;
     633             :             case SCFORMULAOPT_OPENCL_MIN_SIZE:
     634             :             {
     635           0 :                 sal_Int32 nVal = GetCalcConfig().mnOpenCLMinimumFormulaGroupSize;
     636           0 :                 pValues[nProp] <<= nVal;
     637             :             }
     638           0 :             break;
     639             :             case SCFORMULAOPT_OPENCL_SUBSET_OPS:
     640             :             {
     641           0 :                 OUString sVal = ScOpCodeSetToSymbolicString(GetCalcConfig().maOpenCLSubsetOpCodes);
     642           0 :                 pValues[nProp] <<= sVal;
     643             :             }
     644           0 :             break;
     645             :         }
     646             :     }
     647             : #if !HAVE_FEATURE_OPENCL
     648             :     (void) bSetOpenCL;
     649             : #else
     650           0 :     if(bSetOpenCL)
     651             :         sc::FormulaGroupInterpreter::switchOpenCLDevice(
     652           0 :                 GetCalcConfig().maOpenCLDevice, GetCalcConfig().mbOpenCLAutoSelect);
     653             : #endif
     654           0 :     PutProperties(aNames, aValues);
     655           0 : }
     656             : 
     657           0 : void ScFormulaCfg::SetOptions( const ScFormulaOptions& rNew )
     658             : {
     659           0 :     *static_cast<ScFormulaOptions*>(this) = rNew;
     660           0 :     SetModified();
     661           0 : }
     662             : 
     663           0 : void ScFormulaCfg::Notify( const ::com::sun::star::uno::Sequence< OUString >& rNames)
     664             : {
     665           0 :     UpdateFromProperties( rNames );
     666         156 : }
     667             : 
     668             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.11