summaryrefslogtreecommitdiff
path: root/sc/source
diff options
context:
space:
mode:
authorAlbert Thuswaldner <albert.thuswaldner@gmail.com>2012-04-10 00:09:40 +0200
committerKohei Yoshida <kohei.yoshida@gmail.com>2012-04-10 12:19:15 -0400
commitbf0629e09d176555aaa10f60061b206103cc0295 (patch)
tree68ef7efc0b3c6faf895b46f2debf0c6259539b66 /sc/source
parente6d4795e52643a8e940f79c1ee6510cc14fdfb38 (diff)
Grouping ScFormulaOptions
Diffstat (limited to 'sc/source')
-rw-r--r--sc/source/core/tool/appoptio.cxx238
-rw-r--r--sc/source/core/tool/formulaopt.cxx361
-rw-r--r--sc/source/ui/app/scmod.cxx120
-rw-r--r--sc/source/ui/docshell/docsh3.cxx4
-rw-r--r--sc/source/ui/docshell/docsh6.cxx20
-rw-r--r--sc/source/ui/inc/docsh.hxx3
-rw-r--r--sc/source/ui/optdlg/tpformula.cxx153
7 files changed, 485 insertions, 414 deletions
diff --git a/sc/source/core/tool/appoptio.cxx b/sc/source/core/tool/appoptio.cxx
index 2d201d1371f4..9b352b8c8494 100644
--- a/sc/source/core/tool/appoptio.cxx
+++ b/sc/source/core/tool/appoptio.cxx
@@ -35,9 +35,6 @@
#include <com/sun/star/uno/Any.hxx>
#include <com/sun/star/uno/Sequence.hxx>
-#include <com/sun/star/lang/Locale.hpp>
-#include <com/sun/star/i18n/LocaleDataItem.hpp>
-
#include "cfgids.hxx"
#include "appoptio.hxx"
#include "rechead.hxx"
@@ -50,12 +47,8 @@
using namespace utl;
using namespace com::sun::star::uno;
-using ::com::sun::star::lang::Locale;
-using ::com::sun::star::i18n::LocaleDataItem;
using ::rtl::OUString;
-
-// STATIC DATA -----------------------------------------------------------
-
+ // STATIC DATA -----------------------------------------------------------
#define SC_VERSION ((sal_uInt16)304)
//========================================================================
@@ -121,77 +114,8 @@ void ScAppOptions::SetDefaults()
mbShowSharedDocumentWarning = true;
meKeyBindingType = ScOptionsUtil::KEY_DEFAULT;
-
- bUseEnglishFuncName = false;
- eFormulaGrammar = ::formula::FormulaGrammar::GRAM_NATIVE;
-
- ResetFormulaSeparators();
-}
-
-void ScAppOptions::ResetFormulaSeparators()
-{
- GetDefaultFormulaSeparators(aFormulaSepArg, aFormulaSepArrayCol, aFormulaSepArrayRow);
-}
-
-void ScAppOptions::GetDefaultFormulaSeparators(
- rtl::OUString& rSepArg, rtl::OUString& rSepArrayCol, rtl::OUString& rSepArrayRow)
-{
- // Defaults to the old separator values.
- rSepArg = OUString(RTL_CONSTASCII_USTRINGPARAM(";"));
- rSepArrayCol = OUString(RTL_CONSTASCII_USTRINGPARAM(";"));
- rSepArrayRow = OUString(RTL_CONSTASCII_USTRINGPARAM("|"));
-
- const Locale& rLocale = *ScGlobal::GetLocale();
- const OUString& rLang = rLocale.Language;
- if ( rLang == "ru" )
- // Don't do automatic guess for these languages, and fall back to
- // the old separator set.
- return;
-
- const LocaleDataWrapper& rLocaleData = GetLocaleDataWrapper();
- const OUString& rDecSep = rLocaleData.getNumDecimalSep();
- const OUString& rListSep = rLocaleData.getListSep();
-
- if (rDecSep.isEmpty() || rListSep.isEmpty())
- // Something is wrong. Stick with the default separators.
- return;
-
- sal_Unicode cDecSep = rDecSep.getStr()[0];
- sal_Unicode cListSep = rListSep.getStr()[0];
-
- // Excel by default uses system's list separator as the parameter
- // separator, which in English locales is a comma. However, OOo's list
- // separator value is set to ';' for all English locales. Because of this
- // discrepancy, we will hardcode the separator value here, for now.
- if (cDecSep == sal_Unicode('.'))
- cListSep = sal_Unicode(',');
-
- // Special case for de_CH locale.
- if (rLocale.Language.equalsAsciiL("de", 2) && rLocale.Country.equalsAsciiL("CH", 2))
- cListSep = sal_Unicode(';');
-
- // by default, the parameter separator equals the locale-specific
- // list separator.
- rSepArg = OUString(cListSep);
-
- if (cDecSep == cListSep && cDecSep != sal_Unicode(';'))
- // if the decimal and list separators are equal, set the
- // parameter separator to be ';', unless they are both
- // semicolon in which case don't change the decimal separator.
- rSepArg = OUString(RTL_CONSTASCII_USTRINGPARAM(";"));
-
- rSepArrayCol = OUString(RTL_CONSTASCII_USTRINGPARAM(","));
- if (cDecSep == sal_Unicode(','))
- rSepArrayCol = OUString(RTL_CONSTASCII_USTRINGPARAM("."));
- rSepArrayRow = OUString(RTL_CONSTASCII_USTRINGPARAM(";"));
}
-const LocaleDataWrapper& ScAppOptions::GetLocaleDataWrapper()
-{
- return *ScGlobal::pLocaleData;
-}
-
-
const ScAppOptions& ScAppOptions::operator=( const ScAppOptions& rCpy )
{
nTabCountInNewSpreadsheet = rCpy.nTabCountInNewSpreadsheet;
@@ -212,15 +136,8 @@ const ScAppOptions& ScAppOptions::operator=( const ScAppOptions& rCpy )
nDefaultObjectSizeHeight = rCpy.nDefaultObjectSizeHeight;
mbShowSharedDocumentWarning = rCpy.mbShowSharedDocumentWarning;
meKeyBindingType = rCpy.meKeyBindingType;
- bUseEnglishFuncName = rCpy.bUseEnglishFuncName;
- eFormulaGrammar = rCpy.eFormulaGrammar;
- aFormulaSepArg = rCpy.aFormulaSepArg;
- aFormulaSepArrayRow = rCpy.aFormulaSepArrayRow;
- aFormulaSepArrayCol = rCpy.aFormulaSepArrayCol;
-
- return *this;
+ return *this;
}
-
//------------------------------------------------------------------------
void ScAppOptions::SetLRUFuncList( const sal_uInt16* pList, const sal_uInt16 nCount )
@@ -373,14 +290,6 @@ void lcl_GetSortList( Any& rDest )
#define SCCOMPATOPT_KEY_BINDING 0
#define SCCOMPATOPT_COUNT 1
-#define CFGPATH_FORMULA "Office.Calc/Formula"
-#define SCFORMULAOPT_GRAMMAR 0
-#define SCFORMULAOPT_ENGLISH_FUNCNAME 1
-#define SCFORMULAOPT_SEP_ARG 2
-#define SCFORMULAOPT_SEP_ARRAY_ROW 3
-#define SCFORMULAOPT_SEP_ARRAY_COL 4
-#define SCFORMULAOPT_COUNT 5
-
Sequence<OUString> ScAppCfg::GetLayoutPropertyNames()
{
static const char* aPropNames[] =
@@ -494,24 +403,6 @@ Sequence<OUString> ScAppCfg::GetCompatPropertyNames()
return aNames;
}
-Sequence<OUString> ScAppCfg::GetFormulaPropertyNames()
-{
- static const char* aPropNames[] =
- {
- "Syntax/Grammar", // SCFORMULAOPT_GRAMMAR
- "Syntax/EnglishFunctionName", // SCFORMULAOPT_ENGLISH_FUNCNAME
- "Syntax/SeparatorArg", // SCFORMULAOPT_SEP_ARG
- "Syntax/SeparatorArrayRow", // SCFORMULAOPT_SEP_ARRAY_ROW
- "Syntax/SeparatorArrayCol", // SCFORMULAOPT_SEP_ARRAY_COL
- };
- Sequence<OUString> aNames(SCFORMULAOPT_COUNT);
- OUString* pNames = aNames.getArray();
- for (int i = 0; i < SCFORMULAOPT_COUNT; ++i)
- pNames[i] = OUString::createFromAscii(aPropNames[i]);
-
- return aNames;
-}
-
ScAppCfg::ScAppCfg() :
aLayoutItem( OUString(RTL_CONSTASCII_USTRINGPARAM( CFGPATH_LAYOUT )) ),
aInputItem( OUString(RTL_CONSTASCII_USTRINGPARAM( CFGPATH_INPUT )) ),
@@ -519,9 +410,7 @@ ScAppCfg::ScAppCfg() :
aContentItem( OUString(RTL_CONSTASCII_USTRINGPARAM( CFGPATH_CONTENT )) ),
aSortListItem( OUString(RTL_CONSTASCII_USTRINGPARAM( CFGPATH_SORTLIST )) ),
aMiscItem( OUString(RTL_CONSTASCII_USTRINGPARAM( CFGPATH_MISC )) ),
- aCompatItem( OUString(RTL_CONSTASCII_USTRINGPARAM(CFGPATH_COMPAT )) ),
- aFormulaItem( OUString(RTL_CONSTASCII_USTRINGPARAM(CFGPATH_FORMULA )) )
-
+ aCompatItem( OUString(RTL_CONSTASCII_USTRINGPARAM(CFGPATH_COMPAT )) )
{
sal_Int32 nIntVal = 0;
@@ -721,82 +610,8 @@ ScAppCfg::ScAppCfg() :
}
}
aCompatItem.SetCommitLink( LINK(this, ScAppCfg, CompatCommitHdl) );
-
- aNames = GetFormulaPropertyNames();
- aValues = aFormulaItem.GetProperties(aNames);
- aFormulaItem.EnableNotification(aNames);
- pValues = aValues.getConstArray();
- if (aValues.getLength() == aNames.getLength())
- {
- for (int nProp = 0; nProp < aNames.getLength(); ++nProp)
- {
- switch (nProp)
- {
- case SCFORMULAOPT_GRAMMAR:
- {
- // Get default value in case this option is not set.
- ::formula::FormulaGrammar::Grammar eGram = GetFormulaSyntax();
-
- do
- {
- if (!(pValues[nProp] >>= nIntVal))
- // extractino failed.
- break;
-
- switch (nIntVal)
- {
- case 0: // Calc A1
- eGram = ::formula::FormulaGrammar::GRAM_NATIVE;
- break;
- case 1: // Excel A1
- eGram = ::formula::FormulaGrammar::GRAM_NATIVE_XL_A1;
- break;
- case 2: // Excel R1C1
- eGram = ::formula::FormulaGrammar::GRAM_NATIVE_XL_R1C1;
- break;
- default:
- ;
- }
- }
- while (false);
- SetFormulaSyntax(eGram);
- }
- break;
- case SCFORMULAOPT_ENGLISH_FUNCNAME:
- {
- sal_Bool bEnglish = false;
- if (pValues[nProp] >>= bEnglish)
- SetUseEnglishFuncName(bEnglish);
- }
- break;
- case SCFORMULAOPT_SEP_ARG:
- {
- OUString aSep;
- if ((pValues[nProp] >>= aSep) && !aSep.isEmpty())
- SetFormulaSepArg(aSep);
- }
- break;
- case SCFORMULAOPT_SEP_ARRAY_ROW:
- {
- OUString aSep;
- if ((pValues[nProp] >>= aSep) && !aSep.isEmpty())
- SetFormulaSepArrayRow(aSep);
- }
- break;
- case SCFORMULAOPT_SEP_ARRAY_COL:
- {
- OUString aSep;
- if ((pValues[nProp] >>= aSep) && !aSep.isEmpty())
- SetFormulaSepArrayCol(aSep);
- }
- break;
- }
- }
- }
- aFormulaItem.SetCommitLink( LINK(this, ScAppCfg, FormulaCommitHdl) );
}
-
-IMPL_LINK_NOARG(ScAppCfg, LayoutCommitHdl)
+ IMPL_LINK_NOARG(ScAppCfg, LayoutCommitHdl)
{
Sequence<OUString> aNames = GetLayoutPropertyNames();
Sequence<Any> aValues(aNames.getLength());
@@ -968,50 +783,6 @@ IMPL_LINK_NOARG(ScAppCfg, CompatCommitHdl)
return 0;
}
-IMPL_LINK_NOARG(ScAppCfg, FormulaCommitHdl)
-{
- Sequence<OUString> aNames = GetFormulaPropertyNames();
- Sequence<Any> aValues(aNames.getLength());
- Any* pValues = aValues.getArray();
-
- for (int nProp = 0; nProp < aNames.getLength(); ++nProp)
- {
- switch (nProp)
- {
- case SCFORMULAOPT_GRAMMAR :
- {
- sal_Int32 nVal = 0;
- switch (GetFormulaSyntax())
- {
- case ::formula::FormulaGrammar::GRAM_NATIVE_XL_A1: nVal = 1; break;
- case ::formula::FormulaGrammar::GRAM_NATIVE_XL_R1C1: nVal = 2; break;
- default: break;
- }
- pValues[nProp] <<= nVal;
- }
- break;
- case SCFORMULAOPT_ENGLISH_FUNCNAME:
- {
- sal_Bool b = GetUseEnglishFuncName();
- pValues[nProp] <<= b;
- }
- break;
- case SCFORMULAOPT_SEP_ARG:
- pValues[nProp] <<= GetFormulaSepArg();
- break;
- case SCFORMULAOPT_SEP_ARRAY_ROW:
- pValues[nProp] <<= GetFormulaSepArrayRow();
- break;
- case SCFORMULAOPT_SEP_ARRAY_COL:
- pValues[nProp] <<= GetFormulaSepArrayCol();
- break;
- }
- }
- aFormulaItem.PutProperties(aNames, aValues);
-
- return 0;
-}
-
void ScAppCfg::SetOptions( const ScAppOptions& rNew )
{
*(ScAppOptions*)this = rNew;
@@ -1027,7 +798,6 @@ void ScAppCfg::OptionsChanged()
aSortListItem.SetModified();
aMiscItem.SetModified();
aCompatItem.SetModified();
- aFormulaItem.SetModified();
}
diff --git a/sc/source/core/tool/formulaopt.cxx b/sc/source/core/tool/formulaopt.cxx
new file mode 100644
index 000000000000..3d2e55d136e7
--- /dev/null
+++ b/sc/source/core/tool/formulaopt.cxx
@@ -0,0 +1,361 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * Version: MPL 1.1 / GPLv3+ / LGPLv3+
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Initial Developer of the Original Code is
+ * Albert Thuswaldner <albert.thuswaldner@gmail.com>
+ * Portions created by the Initial Developer are Copyright (C) 2012 the
+ * Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 3 or later (the "GPLv3+"), or
+ * the GNU Lesser General Public License Version 3 or later (the "LGPLv3+"),
+ * in which case the provisions of the GPLv3+ or the LGPLv3+ are applicable
+ * instead of those above.
+ */
+
+#include <com/sun/star/uno/Any.hxx>
+#include <com/sun/star/uno/Sequence.hxx>
+#include <com/sun/star/lang/Locale.hpp>
+#include <com/sun/star/i18n/LocaleDataItem.hpp>
+
+#include "formulaopt.hxx"
+#include "miscuno.hxx"
+#include "global.hxx"
+
+using namespace utl;
+using namespace com::sun::star::uno;
+using ::com::sun::star::lang::Locale;
+using ::com::sun::star::i18n::LocaleDataItem;
+using ::rtl::OUString;
+
+// -----------------------------------------------------------------------
+
+TYPEINIT1(ScTpFormulaItem, SfxPoolItem);
+
+// -----------------------------------------------------------------------
+
+ScFormulaOptions::ScFormulaOptions()
+{
+ SetDefaults();
+}
+
+ScFormulaOptions::ScFormulaOptions( const ScFormulaOptions& rCpy ) :
+ bUseEnglishFuncName ( rCpy.bUseEnglishFuncName ),
+ eFormulaGrammar ( rCpy.eFormulaGrammar ),
+ aFormulaSepArg ( rCpy.aFormulaSepArg ),
+ aFormulaSepArrayRow ( rCpy.aFormulaSepArrayRow ),
+ aFormulaSepArrayCol ( rCpy.aFormulaSepArrayCol )
+{
+}
+
+ScFormulaOptions::~ScFormulaOptions()
+{
+}
+
+void ScFormulaOptions::SetDefaults()
+{
+ bUseEnglishFuncName = false;
+ eFormulaGrammar = ::formula::FormulaGrammar::GRAM_NATIVE;
+
+ ResetFormulaSeparators();
+}
+
+void ScFormulaOptions::ResetFormulaSeparators()
+{
+ GetDefaultFormulaSeparators(aFormulaSepArg, aFormulaSepArrayCol, aFormulaSepArrayRow);
+}
+
+void ScFormulaOptions::GetDefaultFormulaSeparators(
+ rtl::OUString& rSepArg, rtl::OUString& rSepArrayCol, rtl::OUString& rSepArrayRow)
+{
+ // Defaults to the old separator values.
+ rSepArg = OUString(RTL_CONSTASCII_USTRINGPARAM(";"));
+ rSepArrayCol = OUString(RTL_CONSTASCII_USTRINGPARAM(";"));
+ rSepArrayRow = OUString(RTL_CONSTASCII_USTRINGPARAM("|"));
+
+ const Locale& rLocale = *ScGlobal::GetLocale();
+ const OUString& rLang = rLocale.Language;
+ if (rLang.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("ru")))
+ // Don't do automatic guess for these languages, and fall back to
+ // the old separator set.
+ return;
+
+ const LocaleDataWrapper& rLocaleData = GetLocaleDataWrapper();
+ const OUString& rDecSep = rLocaleData.getNumDecimalSep();
+ const OUString& rListSep = rLocaleData.getListSep();
+
+ if (rDecSep.isEmpty() || rListSep.isEmpty())
+ // Something is wrong. Stick with the default separators.
+ return;
+
+ sal_Unicode cDecSep = rDecSep.getStr()[0];
+ sal_Unicode cListSep = rListSep.getStr()[0];
+
+ // Excel by default uses system's list separator as the parameter
+ // separator, which in English locales is a comma. However, OOo's list
+ // separator value is set to ';' for all English locales. Because of this
+ // discrepancy, we will hardcode the separator value here, for now.
+ if (cDecSep == sal_Unicode('.'))
+ cListSep = sal_Unicode(',');
+
+ // Special case for de_CH locale.
+ if (rLocale.Language.equalsAsciiL("de", 2) && rLocale.Country.equalsAsciiL("CH", 2))
+ cListSep = sal_Unicode(';');
+
+ // by default, the parameter separator equals the locale-specific
+ // list separator.
+ rSepArg = OUString(cListSep);
+
+ if (cDecSep == cListSep && cDecSep != sal_Unicode(';'))
+ // if the decimal and list separators are equal, set the
+ // parameter separator to be ';', unless they are both
+ // semicolon in which case don't change the decimal separator.
+ rSepArg = OUString(RTL_CONSTASCII_USTRINGPARAM(";"));
+
+ rSepArrayCol = OUString(RTL_CONSTASCII_USTRINGPARAM(","));
+ if (cDecSep == sal_Unicode(','))
+ rSepArrayCol = OUString(RTL_CONSTASCII_USTRINGPARAM("."));
+ rSepArrayRow = OUString(RTL_CONSTASCII_USTRINGPARAM(";"));
+}
+
+const LocaleDataWrapper& ScFormulaOptions::GetLocaleDataWrapper()
+{
+ return *ScGlobal::pLocaleData;
+}
+
+ScFormulaOptions& ScFormulaOptions::operator=( const ScFormulaOptions& rCpy )
+{
+ bUseEnglishFuncName = rCpy.bUseEnglishFuncName;
+ eFormulaGrammar = rCpy.eFormulaGrammar;
+ aFormulaSepArg = rCpy.aFormulaSepArg;
+ aFormulaSepArrayRow = rCpy.aFormulaSepArrayRow;
+ aFormulaSepArrayCol = rCpy.aFormulaSepArrayCol;
+ return *this;
+}
+
+bool ScFormulaOptions::operator==( const ScFormulaOptions& rOpt ) const
+{
+ return bUseEnglishFuncName == rOpt.bUseEnglishFuncName
+ && eFormulaGrammar == rOpt.eFormulaGrammar
+ && aFormulaSepArg == rOpt.aFormulaSepArg
+ && aFormulaSepArrayRow == rOpt.aFormulaSepArrayRow
+ && aFormulaSepArrayCol == rOpt.aFormulaSepArrayCol;
+}
+
+bool ScFormulaOptions::operator!=( const ScFormulaOptions& rOpt ) const
+{
+ return !(operator==(rOpt));
+}
+
+// -----------------------------------------------------------------------
+
+
+ScTpFormulaItem::ScTpFormulaItem( sal_uInt16 nWhichP, const ScFormulaOptions& rOpt ) :
+ SfxPoolItem ( nWhichP ),
+ theOptions ( rOpt )
+{
+}
+
+ScTpFormulaItem::ScTpFormulaItem( const ScTpFormulaItem& rItem ) :
+ SfxPoolItem ( rItem ),
+ theOptions ( rItem.theOptions )
+{
+}
+
+ScTpFormulaItem::~ScTpFormulaItem()
+{
+}
+
+String ScTpFormulaItem::GetValueText() const
+{
+ return String::CreateFromAscii( "ScTpFormulaItem" );
+}
+
+int ScTpFormulaItem::operator==( const SfxPoolItem& rItem ) const
+{
+ OSL_ENSURE( SfxPoolItem::operator==( rItem ), "unequal Which or Type" );
+
+ const ScTpFormulaItem& rPItem = (const ScTpFormulaItem&)rItem;
+ return ( theOptions == rPItem.theOptions );
+}
+
+SfxPoolItem* ScTpFormulaItem::Clone( SfxItemPool * ) const
+{
+ return new ScTpFormulaItem( *this );
+}
+
+// -----------------------------------------------------------------------
+
+#define CFGPATH_FORMULA "Office.Calc/Formula"
+
+#define SCFORMULAOPT_GRAMMAR 0
+#define SCFORMULAOPT_ENGLISH_FUNCNAME 1
+#define SCFORMULAOPT_SEP_ARG 2
+#define SCFORMULAOPT_SEP_ARRAY_ROW 3
+#define SCFORMULAOPT_SEP_ARRAY_COL 4
+#define SCFORMULAOPT_COUNT 5
+
+Sequence<OUString> ScFormulaCfg::GetPropertyNames()
+{
+ static const char* aPropNames[] =
+ {
+ "Syntax/Grammar", // SCFORMULAOPT_GRAMMAR
+ "Syntax/EnglishFunctionName", // SCFORMULAOPT_ENGLISH_FUNCNAME
+ "Syntax/SeparatorArg", // SCFORMULAOPT_SEP_ARG
+ "Syntax/SeparatorArrayRow", // SCFORMULAOPT_SEP_ARRAY_ROW
+ "Syntax/SeparatorArrayCol", // SCFORMULAOPT_SEP_ARRAY_COL
+ };
+ Sequence<OUString> aNames(SCFORMULAOPT_COUNT);
+ OUString* pNames = aNames.getArray();
+ for (int i = 0; i < SCFORMULAOPT_COUNT; ++i)
+ pNames[i] = OUString::createFromAscii(aPropNames[i]);
+
+ return aNames;
+}
+
+ScFormulaCfg::ScFormulaCfg() :
+ ConfigItem( OUString(RTL_CONSTASCII_USTRINGPARAM( CFGPATH_FORMULA )) )
+{
+ sal_Int32 nIntVal = 0;
+
+ Sequence<OUString> aNames = GetPropertyNames();
+ Sequence<Any> aValues = GetProperties(aNames);
+ const Any* pValues = aValues.getConstArray();
+ OSL_ENSURE(aValues.getLength() == aNames.getLength(), "GetProperties failed");
+ if(aValues.getLength() == aNames.getLength())
+ {
+ for(int nProp = 0; nProp < aNames.getLength(); nProp++)
+ {
+ OSL_ENSURE(pValues[nProp].hasValue(), "property value missing");
+ if(pValues[nProp].hasValue())
+ {
+ switch(nProp)
+ {
+ case SCFORMULAOPT_GRAMMAR:
+ {
+ // Get default value in case this option is not set.
+ ::formula::FormulaGrammar::Grammar eGram = GetFormulaSyntax();
+
+ do
+ {
+ if (!(pValues[nProp] >>= nIntVal))
+ // extractino failed.
+ break;
+
+ switch (nIntVal)
+ {
+ case 0: // Calc A1
+ eGram = ::formula::FormulaGrammar::GRAM_NATIVE;
+ break;
+ case 1: // Excel A1
+ eGram = ::formula::FormulaGrammar::GRAM_NATIVE_XL_A1;
+ break;
+ case 2: // Excel R1C1
+ eGram = ::formula::FormulaGrammar::GRAM_NATIVE_XL_R1C1;
+ break;
+ default:
+ ;
+ }
+ }
+ while (false);
+ SetFormulaSyntax(eGram);
+ }
+ break;
+ case SCFORMULAOPT_ENGLISH_FUNCNAME:
+ {
+ sal_Bool bEnglish = false;
+ if (pValues[nProp] >>= bEnglish)
+ SetUseEnglishFuncName(bEnglish);
+ }
+ break;
+ case SCFORMULAOPT_SEP_ARG:
+ {
+ OUString aSep;
+ if ((pValues[nProp] >>= aSep) && !aSep.isEmpty())
+ SetFormulaSepArg(aSep);
+ }
+ break;
+ case SCFORMULAOPT_SEP_ARRAY_ROW:
+ {
+ OUString aSep;
+ if ((pValues[nProp] >>= aSep) && !aSep.isEmpty())
+ SetFormulaSepArrayRow(aSep);
+ }
+ break;
+ case SCFORMULAOPT_SEP_ARRAY_COL:
+ {
+ OUString aSep;
+ if ((pValues[nProp] >>= aSep) && !aSep.isEmpty())
+ SetFormulaSepArrayCol(aSep);
+ }
+ break;
+ }
+ }
+ }
+ }
+}
+
+void ScFormulaCfg::Commit()
+{
+ Sequence<OUString> aNames = GetPropertyNames();
+ Sequence<Any> aValues(aNames.getLength());
+ Any* pValues = aValues.getArray();
+
+ for (int nProp = 0; nProp < aNames.getLength(); ++nProp)
+ {
+ switch (nProp)
+ {
+ case SCFORMULAOPT_GRAMMAR :
+ {
+ sal_Int32 nVal = 0;
+ switch (GetFormulaSyntax())
+ {
+ case ::formula::FormulaGrammar::GRAM_NATIVE_XL_A1: nVal = 1; break;
+ case ::formula::FormulaGrammar::GRAM_NATIVE_XL_R1C1: nVal = 2; break;
+ default: break;
+ }
+ pValues[nProp] <<= nVal;
+ }
+ break;
+ case SCFORMULAOPT_ENGLISH_FUNCNAME:
+ {
+ sal_Bool b = GetUseEnglishFuncName();
+ pValues[nProp] <<= b;
+ }
+ break;
+ case SCFORMULAOPT_SEP_ARG:
+ pValues[nProp] <<= GetFormulaSepArg();
+ break;
+ case SCFORMULAOPT_SEP_ARRAY_ROW:
+ pValues[nProp] <<= GetFormulaSepArrayRow();
+ break;
+ case SCFORMULAOPT_SEP_ARRAY_COL:
+ pValues[nProp] <<= GetFormulaSepArrayCol();
+ break;
+ }
+ }
+ PutProperties(aNames, aValues);
+}
+
+void ScFormulaCfg::SetOptions( const ScFormulaOptions& rNew )
+{
+ *(ScFormulaOptions*)this = rNew;
+ SetModified();
+}
+
+void ScFormulaCfg::Notify( const ::com::sun::star::uno::Sequence< OUString >& ) {}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/source/ui/app/scmod.cxx b/sc/source/ui/app/scmod.cxx
index dbddbe023429..4dec73a976c7 100644
--- a/sc/source/ui/app/scmod.cxx
+++ b/sc/source/ui/app/scmod.cxx
@@ -79,6 +79,7 @@
#include "viewopti.hxx"
#include "docoptio.hxx"
#include "appoptio.hxx"
+#include "formulaopt.hxx"
#include "inputopt.hxx"
#include "printopt.hxx"
#include "navicfg.hxx"
@@ -141,6 +142,7 @@ ScModule::ScModule( SfxObjectFactory* pFact ) :
pViewCfg( NULL ),
pDocCfg( NULL ),
pAppCfg( NULL ),
+ pFormulaCfg( NULL ),
pInputCfg( NULL ),
pPrintCfg( NULL ),
pNavipiCfg( NULL ),
@@ -342,6 +344,7 @@ void ScModule::DeleteCfg()
DELETEZ( pViewCfg ); // Speichern passiert vor Exit() automatisch
DELETEZ( pDocCfg );
DELETEZ( pAppCfg );
+ DELETEZ( pFormulaCfg );
DELETEZ( pInputCfg );
DELETEZ( pPrintCfg );
DELETEZ( pNavipiCfg );
@@ -849,6 +852,22 @@ const ScAppOptions& ScModule::GetAppOptions()
return *pAppCfg;
}
+void ScModule::SetFormulaOptions( const ScFormulaOptions& rOpt )
+{
+ if ( !pFormulaCfg )
+ pFormulaCfg = new ScFormulaCfg;
+
+ pFormulaCfg->SetOptions( rOpt );
+}
+
+const ScFormulaOptions& ScModule::GetFormulaOptions()
+{
+ if ( !pFormulaCfg )
+ pFormulaCfg = new ScFormulaCfg;
+
+ return *pFormulaCfg;
+}
+
void ScModule::SetInputOptions( const ScInputOptions& rOpt )
{
if ( !pInputCfg )
@@ -987,7 +1006,6 @@ void ScModule::ModifyOptions( const SfxItemSet& rOptSet )
sal_Bool bCalcAll = false;
sal_Bool bSaveAppOptions = false;
sal_Bool bSaveInputOptions = false;
- sal_Bool bUpdateDocFormat = false;
//--------------------------------------------------------------------------
@@ -1031,71 +1049,18 @@ void ScModule::ModifyOptions( const SfxItemSet& rOptSet )
// FormulaOptions
//============================================
-
- if (rOptSet.HasItem(SID_SC_OPT_FORMULA_ENGLISH_FUNCNAME, &pItem))
- {
- pAppCfg->SetUseEnglishFuncName( static_cast<const SfxBoolItem*>(pItem)->GetValue() );
- bSaveAppOptions = true;
- bUpdateDocFormat = true;
- }
-
- if (rOptSet.HasItem(SID_SC_OPT_FORMULA_GRAMMAR, &pItem))
+ if (rOptSet.HasItem(SID_SCFORMULAOPTIONS, &pItem))
{
- sal_uInt16 nVal = static_cast<const SfxUInt16Item*>(pItem)->GetValue();
- ::formula::FormulaGrammar::Grammar eOld = pAppCfg->GetFormulaSyntax();
- ::formula::FormulaGrammar::Grammar eNew = ::formula::FormulaGrammar::GRAM_NATIVE;
+ const ScFormulaOptions& rOpt = ((const ScTpFormulaItem*)pItem)->GetFormulaOptions();
+ SetFormulaOptions( rOpt );
- switch (nVal)
- {
- case 0:
- eNew = ::formula::FormulaGrammar::GRAM_NATIVE;
- break;
- case 1:
- eNew = ::formula::FormulaGrammar::GRAM_NATIVE_XL_A1;
- break;
- case 2:
- eNew = ::formula::FormulaGrammar::GRAM_NATIVE_XL_R1C1;
- break;
- default:
- ;
- }
-
- if (eOld != eNew)
+ if ( pDocSh )
{
- pAppCfg->SetFormulaSyntax(eNew);
- bSaveAppOptions = true;
- bUpdateDocFormat = true;
+ pDocSh->SetFormulaOptions( rOpt );
+ pDocSh->SetDocumentModified();
}
}
- if (rOptSet.HasItem(SID_SC_OPT_FORMULA_SEP_ARG, &pItem))
- {
- pAppCfg->SetFormulaSepArg( static_cast<const SfxStringItem*>(pItem)->GetValue() );
- bSaveAppOptions = true;
- bUpdateDocFormat = true;
- }
-
- if (rOptSet.HasItem(SID_SC_OPT_FORMULA_SEP_ARRAY_ROW, &pItem))
- {
- pAppCfg->SetFormulaSepArrayRow( static_cast<const SfxStringItem*>(pItem)->GetValue() );
- bSaveAppOptions = true;
- bUpdateDocFormat = true;
- }
-
- if (rOptSet.HasItem(SID_SC_OPT_FORMULA_SEP_ARRAY_COL, &pItem))
- {
- pAppCfg->SetFormulaSepArrayCol( static_cast<const SfxStringItem*>(pItem)->GetValue() );
- bSaveAppOptions = true;
- bUpdateDocFormat = true;
- }
-
- // Do all the format updates on open documents in one go
- if ( bUpdateDocFormat && pDocSh )
- {
- pDocSh->SetFormulaOptions( *pAppCfg );
- pDocSh->SetDocumentModified();
- }
-
//============================================
// ViewOptions
//============================================
@@ -1995,11 +1960,7 @@ SfxItemSet* ScModule::CreateItemSet( sal_uInt16 nId )
// TP_COMPATIBILITY
SID_SC_OPT_KEY_BINDING_COMPAT, SID_SC_OPT_KEY_BINDING_COMPAT,
// TP_FORMULA
- SID_SC_OPT_FORMULA_ENGLISH_FUNCNAME, SID_SC_OPT_FORMULA_ENGLISH_FUNCNAME,
- SID_SC_OPT_FORMULA_GRAMMAR, SID_SC_OPT_FORMULA_GRAMMAR,
- SID_SC_OPT_FORMULA_SEP_ARG, SID_SC_OPT_FORMULA_SEP_ARG,
- SID_SC_OPT_FORMULA_SEP_ARRAY_COL, SID_SC_OPT_FORMULA_SEP_ARRAY_COL,
- SID_SC_OPT_FORMULA_SEP_ARRAY_ROW, SID_SC_OPT_FORMULA_SEP_ARRAY_ROW,
+ SID_SCFORMULAOPTIONS, SID_SCFORMULAOPTIONS,
0 );
const ScAppOptions& rAppOpt = GetAppOptions();
@@ -2071,34 +2032,7 @@ SfxItemSet* ScModule::CreateItemSet( sal_uInt16 nId )
rAppOpt.GetKeyBindingType() ) );
// TP_FORMULA
- pRet->Put( SfxBoolItem( SID_SC_OPT_FORMULA_ENGLISH_FUNCNAME,
- rAppOpt.GetUseEnglishFuncName() ) );
-
- sal_uInt16 nVal = 0;
- switch (rAppOpt.GetFormulaSyntax())
- {
- case formula::FormulaGrammar::GRAM_NATIVE:
- nVal = 0;
- break;
- case formula::FormulaGrammar::GRAM_NATIVE_XL_A1:
- nVal = 1;
- break;
- case formula::FormulaGrammar::GRAM_NATIVE_XL_R1C1:
- nVal = 2;
- break;
- default:
- ;
- }
- pRet->Put( SfxUInt16Item( SID_SC_OPT_FORMULA_GRAMMAR, nVal ) );
- pRet->Put( SfxStringItem( SID_SC_OPT_FORMULA_SEP_ARG,
- rAppOpt.GetFormulaSepArg() ) );
- pRet->Put( SfxStringItem( SID_SC_OPT_FORMULA_SEP_ARRAY_COL,
- rAppOpt.GetFormulaSepArrayCol() ) );
- pRet->Put( SfxStringItem( SID_SC_OPT_FORMULA_SEP_ARRAY_ROW,
- rAppOpt.GetFormulaSepArrayRow() ) );
-
- pRet->Put( aULItem );
-
+ pRet->Put( ScTpFormulaItem( SID_SCFORMULAOPTIONS, GetFormulaOptions() ) );
}
return pRet;
}
diff --git a/sc/source/ui/docshell/docsh3.cxx b/sc/source/ui/docshell/docsh3.cxx
index 522e9d78a121..a07226bd288c 100644
--- a/sc/source/ui/docshell/docsh3.cxx
+++ b/sc/source/ui/docshell/docsh3.cxx
@@ -432,7 +432,7 @@ void ScDocShell::InitOptions(bool bForLoading) // called from InitNew and L
ScModule* pScMod = SC_MOD();
ScDocOptions aDocOpt = pScMod->GetDocOptions();
- ScAppOptions aAppOpt = pScMod->GetAppOptions();
+ ScFormulaOptions aFormulaOpt = pScMod->GetFormulaOptions();
ScViewOptions aViewOpt = pScMod->GetViewOptions();
aDocOpt.SetAutoSpell( bAutoSpell );
@@ -449,7 +449,7 @@ void ScDocShell::InitOptions(bool bForLoading) // called from InitNew and L
aDocument.SetDocOptions( aDocOpt );
aDocument.SetViewOptions( aViewOpt );
- SetFormulaOptions( aAppOpt );
+ SetFormulaOptions( aFormulaOpt );
// Druck-Optionen werden jetzt direkt vor dem Drucken gesetzt
diff --git a/sc/source/ui/docshell/docsh6.cxx b/sc/source/ui/docshell/docsh6.cxx
index 372415e01a85..f6831dd1ab2d 100644
--- a/sc/source/ui/docshell/docsh6.cxx
+++ b/sc/source/ui/docshell/docsh6.cxx
@@ -481,13 +481,13 @@ sal_Bool ScDocShell::ReloadTabLinks()
return sal_True; //! Fehler erkennen
}
-void ScDocShell::SetFormulaOptions(const ScAppOptions& rAppOpt )
+void ScDocShell::SetFormulaOptions(const ScFormulaOptions& rOpt )
{
- aDocument.SetGrammar( rAppOpt.GetFormulaSyntax() );
+ aDocument.SetGrammar( rOpt.GetFormulaSyntax() );
// This needs to be called first since it may re-initialize the entire
// opcode map.
- if (rAppOpt.GetUseEnglishFuncName())
+ if (rOpt.GetUseEnglishFuncName())
{
// switch native symbols to English.
ScCompiler aComp(NULL, ScAddress());
@@ -503,7 +503,7 @@ void ScDocShell::SetFormulaOptions(const ScAppOptions& rAppOpt )
// Update the separators.
ScCompiler::UpdateSeparatorsNative(
- rAppOpt.GetFormulaSepArg(), rAppOpt.GetFormulaSepArrayCol(), rAppOpt.GetFormulaSepArrayRow());
+ rOpt.GetFormulaSepArg(), rOpt.GetFormulaSepArrayCol(), rOpt.GetFormulaSepArrayRow());
}
void ScDocShell::CheckConfigOptions()
@@ -515,19 +515,19 @@ void ScDocShell::CheckConfigOptions()
OUString aDecSep = ScGlobal::GetpLocaleData()->getNumDecimalSep();
ScModule* pScMod = SC_MOD();
- const ScAppOptions& rAppOpt=pScMod->GetAppOptions();
- OUString aSepArg = rAppOpt.GetFormulaSepArg();
- OUString aSepArrRow = rAppOpt.GetFormulaSepArrayRow();
- OUString aSepArrCol = rAppOpt.GetFormulaSepArrayCol();
+ const ScFormulaOptions& rOpt=pScMod->GetFormulaOptions();
+ OUString aSepArg = rOpt.GetFormulaSepArg();
+ OUString aSepArrRow = rOpt.GetFormulaSepArrayRow();
+ OUString aSepArrCol = rOpt.GetFormulaSepArrayCol();
if (aDecSep == aSepArg || aDecSep == aSepArrRow || aDecSep == aSepArrCol)
{
// One of arg separators conflicts with the current decimal
// separator. Reset them to default.
- ScAppOptions aNew = rAppOpt;
+ ScFormulaOptions aNew = rOpt;
aNew.ResetFormulaSeparators();
SetFormulaOptions(aNew);
- pScMod->SetAppOptions(aNew);
+ pScMod->SetFormulaOptions(aNew);
// Launch a nice warning dialog to let the users know of this change.
ScTabViewShell* pViewShell = GetBestViewShell();
diff --git a/sc/source/ui/inc/docsh.hxx b/sc/source/ui/inc/docsh.hxx
index 488c202de6cc..56f6c934b667 100644
--- a/sc/source/ui/inc/docsh.hxx
+++ b/sc/source/ui/inc/docsh.hxx
@@ -40,6 +40,7 @@
#include "scdll.hxx"
#include "document.hxx"
#include "appoptio.hxx"
+#include "formulaopt.hxx"
#include "shellids.hxx"
#include "refreshtimer.hxx"
#include "optutil.hxx"
@@ -321,7 +322,7 @@ public:
void UpdateLinks(); // Link-Eintraege aktuallisieren
sal_Bool ReloadTabLinks(); // Links ausfuehren (Inhalt aktualisieren)
- void SetFormulaOptions(const ScAppOptions& rAppOpt );
+ void SetFormulaOptions(const ScFormulaOptions& rOpt );
virtual void CheckConfigOptions();
void PostEditView( ScEditEngineDefaulter* pEditEngine, const ScAddress& rCursorPos );
diff --git a/sc/source/ui/optdlg/tpformula.cxx b/sc/source/ui/optdlg/tpformula.cxx
index ccda938fa1ac..c029c81b5d55 100644
--- a/sc/source/ui/optdlg/tpformula.cxx
+++ b/sc/source/ui/optdlg/tpformula.cxx
@@ -36,13 +36,11 @@
#include <scmod.hxx>
#include <svl/eitem.hxx>
#include <svl/stritem.hxx>
-
#include "tpformula.hxx"
+#include "formulaopt.hxx"
#include "optdlg.hrc"
#include "scresid.hxx"
#include "formula/grammar.hxx"
-#include "appoptio.hxx"
-#include "global.hxx"
#include <unotools/localedatawrapper.hxx>
@@ -87,7 +85,13 @@ ScTpFormulaOptions::ScTpFormulaOptions(Window* pParent, const SfxItemSet& rCoreA
maEdSepArrayRow.SetGetFocusHdl(aLink);
// Get the decimal separator for current locale.
- rtl::OUString aSep = SC_MOD()->GetAppOptions().GetLocaleDataWrapper().getNumDecimalSep();
+ ScFormulaOptions aOpt;
+ const SfxPoolItem* pItem = NULL;
+
+ if(SFX_ITEM_SET == rCoreAttrs.GetItemState(SID_SCFORMULAOPTIONS, false , &pItem))
+ aOpt = ((const ScTpFormulaItem*)pItem)->GetFormulaOptions();
+
+ rtl::OUString aSep = aOpt.GetLocaleDataWrapper().getNumDecimalSep();
mnDecSep = aSep.isEmpty() ? sal_Unicode('.') : aSep[0];
}
@@ -98,7 +102,7 @@ ScTpFormulaOptions::~ScTpFormulaOptions()
void ScTpFormulaOptions::ResetSeparators()
{
rtl::OUString aFuncArg, aArrayCol, aArrayRow;
- ScAppOptions::GetDefaultFormulaSeparators(aFuncArg, aArrayCol, aArrayRow);
+ ScFormulaOptions::GetDefaultFormulaSeparators(aFuncArg, aArrayCol, aArrayRow);
maEdSepFuncArg.SetText(aFuncArg);
maEdSepArrayCol.SetText(aArrayCol);
maEdSepArrayRow.SetText(aArrayRow);
@@ -208,96 +212,97 @@ SfxTabPage* ScTpFormulaOptions::Create(Window* pParent, const SfxItemSet& rCoreS
sal_Bool ScTpFormulaOptions::FillItemSet(SfxItemSet& rCoreSet)
{
- bool bRet = false;
- if (maLbFormulaSyntax.GetSavedValue() != maLbFormulaSyntax.GetSelectEntryPos())
+ sal_Bool bRet = false;
+ ScFormulaOptions aOpt;
+ sal_Bool bEnglishFuncName = maCbEnglishFuncName.IsChecked();
+ sal_Int16 aSyntaxPos = maLbFormulaSyntax.GetSelectEntryPos();
+ OUString aSep = maEdSepFuncArg.GetText();
+ OUString aSepArrayCol = maEdSepArrayCol.GetText();
+ OUString aSepArrayRow = maEdSepArrayRow.GetText();
+
+ if ( maLbFormulaSyntax.GetSavedValue() != aSyntaxPos
+ || maCbEnglishFuncName.GetSavedValue() != bEnglishFuncName
+ || static_cast<OUString>(maEdSepFuncArg.GetSavedValue()) != aSep
+ || static_cast<OUString>(maEdSepArrayCol.GetSavedValue()) != aSepArrayCol
+ || static_cast<OUString>(maEdSepArrayRow.GetSavedValue()) != aSepArrayRow )
{
- rCoreSet.Put(
- SfxUInt16Item(SID_SC_OPT_FORMULA_GRAMMAR, maLbFormulaSyntax.GetSelectEntryPos()));
+ ::formula::FormulaGrammar::Grammar eGram = ::formula::FormulaGrammar::GRAM_DEFAULT;
+
+ switch (aSyntaxPos)
+ {
+ case 0:
+ eGram = ::formula::FormulaGrammar::GRAM_NATIVE;
+ break;
+ case 1:
+ eGram = ::formula::FormulaGrammar::GRAM_NATIVE_XL_A1;
+ break;
+ case 2:
+ eGram = ::formula::FormulaGrammar::GRAM_NATIVE_XL_R1C1;
+ break;
+ }
+
+ aOpt.SetFormulaSyntax(eGram);
+ aOpt.SetUseEnglishFuncName(bEnglishFuncName);
+ aOpt.SetFormulaSepArg(aSep);
+ aOpt.SetFormulaSepArrayCol(aSepArrayCol);
+ aOpt.SetFormulaSepArrayRow(aSepArrayRow);
+
+ rCoreSet.Put( ScTpFormulaItem( SID_SCFORMULAOPTIONS, aOpt ) );
bRet = true;
}
-
- if (maCbEnglishFuncName.GetSavedValue() != maCbEnglishFuncName.IsChecked())
- {
- rCoreSet.Put(
- SfxBoolItem(SID_SC_OPT_FORMULA_ENGLISH_FUNCNAME, maCbEnglishFuncName.IsChecked()));
- bRet = true;
- }
-
- if (maEdSepFuncArg.GetSavedValue() != maEdSepFuncArg.GetText())
- {
- rCoreSet.Put(
- SfxStringItem(SID_SC_OPT_FORMULA_SEP_ARG, maEdSepFuncArg.GetText()));
- bRet = true;
- }
-
- if (maEdSepArrayCol.GetSavedValue() != maEdSepArrayCol.GetText())
- {
- rCoreSet.Put(
- SfxStringItem(SID_SC_OPT_FORMULA_SEP_ARRAY_COL, maEdSepArrayCol.GetText()));
- bRet = true;
- }
-
- if (maEdSepArrayRow.GetSavedValue() != maEdSepArrayRow.GetText())
- {
- rCoreSet.Put(
- SfxStringItem(SID_SC_OPT_FORMULA_SEP_ARRAY_ROW, maEdSepArrayRow.GetText()));
- bRet = true;
- }
-
return bRet;
}
void ScTpFormulaOptions::Reset(const SfxItemSet& rCoreSet)
{
+ ScFormulaOptions aOpt;
const SfxPoolItem* pItem = NULL;
+ if(SFX_ITEM_SET == rCoreSet.GetItemState(SID_SCFORMULAOPTIONS, false , &pItem))
+ aOpt = ((const ScTpFormulaItem*)pItem)->GetFormulaOptions();
+
// formula grammar.
- maLbFormulaSyntax.SelectEntryPos(0);
- if (rCoreSet.HasItem(SID_SC_OPT_FORMULA_GRAMMAR, &pItem))
+ ::formula::FormulaGrammar::Grammar eGram = aOpt.GetFormulaSyntax();
+
+ switch (eGram)
{
- sal_uInt16 nVal = static_cast<const SfxUInt16Item*>(pItem)->GetValue();
- if (nVal <= 2)
- maLbFormulaSyntax.SelectEntryPos(nVal);
+ case ::formula::FormulaGrammar::GRAM_NATIVE:
+ maLbFormulaSyntax.SelectEntryPos(0);
+ break;
+ case ::formula::FormulaGrammar::GRAM_NATIVE_XL_A1:
+ maLbFormulaSyntax.SelectEntryPos(1);
+ break;
+ case ::formula::FormulaGrammar::GRAM_NATIVE_XL_R1C1:
+ maLbFormulaSyntax.SelectEntryPos(2);
+ break;
+ default:
+ maLbFormulaSyntax.SelectEntryPos(0);
}
+
maLbFormulaSyntax.SaveValue();
// english function name.
- maCbEnglishFuncName.Check(false);
- if (rCoreSet.HasItem(SID_SC_OPT_FORMULA_ENGLISH_FUNCNAME, &pItem))
- {
- bool bVal = static_cast<const SfxBoolItem*>(pItem)->GetValue();
- maCbEnglishFuncName.Check(bVal);
- }
+ maCbEnglishFuncName.Check( aOpt.GetUseEnglishFuncName() );
maCbEnglishFuncName.SaveValue();
- ResetSeparators();
-
- // argument separator.
- if (rCoreSet.HasItem(SID_SC_OPT_FORMULA_SEP_ARG, &pItem))
- {
- rtl::OUString aVal = static_cast<const SfxStringItem*>(pItem)->GetValue();
- if (aVal.getLength() == 1)
- maEdSepFuncArg.SetText(aVal);
- }
- maEdSepFuncArg.SaveValue();
-
- // matrix column separator.
- if (rCoreSet.HasItem(SID_SC_OPT_FORMULA_SEP_ARRAY_COL, &pItem))
- {
- rtl::OUString aVal = static_cast<const SfxStringItem*>(pItem)->GetValue();
- if (aVal.getLength() == 1)
- maEdSepArrayCol.SetText(aVal);
- }
- maEdSepArrayCol.SaveValue();
+ // Separators
+ OUString aSep = aOpt.GetFormulaSepArg();
+ OUString aSepArrayRow = aOpt.GetFormulaSepArrayRow();
+ OUString aSepArrayCol = aOpt.GetFormulaSepArrayCol();
- // matrix row separator.
- if (rCoreSet.HasItem(SID_SC_OPT_FORMULA_SEP_ARRAY_ROW, &pItem))
+ if (aSep.getLength() == 1 && aSepArrayRow.getLength() == 1 && aSepArrayCol.getLength() == 1)
{
- rtl::OUString aVal = static_cast<const SfxStringItem*>(pItem)->GetValue();
- if (aVal.getLength() == 1)
- maEdSepArrayRow.SetText(aVal);
+ // Each separator must be one character long.
+ maEdSepFuncArg.SetText(aSep);
+ maEdSepArrayCol.SetText(aSepArrayCol);
+ maEdSepArrayRow.SetText(aSepArrayRow);
+
+ maEdSepFuncArg.SaveValue();
+ maEdSepArrayCol.SaveValue();
+ maEdSepArrayRow.SaveValue();
}
- maEdSepArrayRow.SaveValue();
+ else
+ ResetSeparators();
}
int ScTpFormulaOptions::DeactivatePage(SfxItemSet* /*pSet*/)