summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKohei Yoshida <kohei.yoshida@suse.com>2012-02-27 14:37:20 -0500
committerKohei Yoshida <kohei.yoshida@suse.com>2012-02-27 14:39:06 -0500
commit7eb1c1e31dac3b8377307192cae9cdde0ebe18bb (patch)
treeb73935141fae0000ded16cbd7b4bc231d6def37e
parent8b32c721c61b5c7a52284ef743586159f8f443ee (diff)
Fixed up several issues with the new formula options handler.
-rw-r--r--sc/inc/appoptio.hxx1
-rw-r--r--sc/source/core/tool/appoptio.cxx22
-rw-r--r--sc/source/ui/app/scmod.cxx24
-rw-r--r--sc/source/ui/inc/tpformula.hxx2
-rw-r--r--sc/source/ui/optdlg/tpformula.cxx133
5 files changed, 105 insertions, 77 deletions
diff --git a/sc/inc/appoptio.hxx b/sc/inc/appoptio.hxx
index 65b36769ede8..7c69f88659b2 100644
--- a/sc/inc/appoptio.hxx
+++ b/sc/inc/appoptio.hxx
@@ -108,6 +108,7 @@ public:
void ResetFormulaSeparators();
+ static void GetDefaultFormulaSeparators(rtl::OUString& rSepArg, rtl::OUString& rSepArrayCol, rtl::OUString& rSepArrayRow);
static const LocaleDataWrapper& GetLocaleDataWrapper();
const ScAppOptions& operator= ( const ScAppOptions& rOpt );
diff --git a/sc/source/core/tool/appoptio.cxx b/sc/source/core/tool/appoptio.cxx
index 3df026e2ffdf..a9315720d1aa 100644
--- a/sc/source/core/tool/appoptio.cxx
+++ b/sc/source/core/tool/appoptio.cxx
@@ -130,10 +130,16 @@ void ScAppOptions::SetDefaults()
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.
- aFormulaSepArg = OUString(RTL_CONSTASCII_USTRINGPARAM(";"));
- aFormulaSepArrayCol = OUString(RTL_CONSTASCII_USTRINGPARAM(";"));
- aFormulaSepArrayRow = OUString(RTL_CONSTASCII_USTRINGPARAM("|"));
+ 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;
@@ -166,18 +172,18 @@ void ScAppOptions::ResetFormulaSeparators()
// by default, the parameter separator equals the locale-specific
// list separator.
- aFormulaSepArg = OUString(cListSep);
+ 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.
- aFormulaSepArg = OUString(RTL_CONSTASCII_USTRINGPARAM(";"));
+ rSepArg = OUString(RTL_CONSTASCII_USTRINGPARAM(";"));
- aFormulaSepArrayCol = OUString(RTL_CONSTASCII_USTRINGPARAM(","));
+ rSepArrayCol = OUString(RTL_CONSTASCII_USTRINGPARAM(","));
if (cDecSep == sal_Unicode(','))
- aFormulaSepArrayCol = OUString(RTL_CONSTASCII_USTRINGPARAM("."));
- aFormulaSepArrayRow = OUString(RTL_CONSTASCII_USTRINGPARAM(";"));
+ rSepArrayCol = OUString(RTL_CONSTASCII_USTRINGPARAM("."));
+ rSepArrayRow = OUString(RTL_CONSTASCII_USTRINGPARAM(";"));
}
const LocaleDataWrapper& ScAppOptions::GetLocaleDataWrapper()
diff --git a/sc/source/ui/app/scmod.cxx b/sc/source/ui/app/scmod.cxx
index f4962112870e..3752b7c7df6c 100644
--- a/sc/source/ui/app/scmod.cxx
+++ b/sc/source/ui/app/scmod.cxx
@@ -1043,7 +1043,7 @@ void ScModule::ModifyOptions( const SfxItemSet& rOptSet )
{
sal_uInt16 nVal = static_cast<const SfxUInt16Item*>(pItem)->GetValue();
::formula::FormulaGrammar::Grammar eOld = pAppCfg->GetFormulaSyntax();
- ::formula::FormulaGrammar::Grammar eNew;
+ ::formula::FormulaGrammar::Grammar eNew = ::formula::FormulaGrammar::GRAM_NATIVE;
switch (nVal)
{
@@ -1056,6 +1056,8 @@ void ScModule::ModifyOptions( const SfxItemSet& rOptSet )
case 2:
eNew = ::formula::FormulaGrammar::GRAM_NATIVE_XL_R1C1;
break;
+ default:
+ ;
}
if (eOld != eNew)
@@ -2071,8 +2073,23 @@ SfxItemSet* ScModule::CreateItemSet( sal_uInt16 nId )
// TP_FORMULA
pRet->Put( SfxBoolItem( SID_SC_OPT_FORMULA_ENGLISH_FUNCNAME,
rAppOpt.GetUseEnglishFuncName() ) );
- pRet->Put( SfxUInt16Item( SID_SC_OPT_FORMULA_GRAMMAR,
- rAppOpt.GetFormulaSyntax() ) );
+
+ 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,
@@ -2080,7 +2097,6 @@ SfxItemSet* ScModule::CreateItemSet( sal_uInt16 nId )
pRet->Put( SfxStringItem( SID_SC_OPT_FORMULA_SEP_ARRAY_ROW,
rAppOpt.GetFormulaSepArrayRow() ) );
-//
pRet->Put( aULItem );
}
diff --git a/sc/source/ui/inc/tpformula.hxx b/sc/source/ui/inc/tpformula.hxx
index 83abbb981b2e..033f61d0ecda 100644
--- a/sc/source/ui/inc/tpformula.hxx
+++ b/sc/source/ui/inc/tpformula.hxx
@@ -84,8 +84,6 @@ private:
Edit maEdSepArrayRow;
PushButton maBtnSepReset;
- ::boost::shared_ptr<ScAppOptions> mpOptions;
-
/** Stores old separator value of currently focused separator edit box.
This value is used to revert undesired value change. */
::rtl::OUString maOldSepValue;
diff --git a/sc/source/ui/optdlg/tpformula.cxx b/sc/source/ui/optdlg/tpformula.cxx
index 241cac04e18c..ccda938fa1ac 100644
--- a/sc/source/ui/optdlg/tpformula.cxx
+++ b/sc/source/ui/optdlg/tpformula.cxx
@@ -73,8 +73,6 @@ ScTpFormulaOptions::ScTpFormulaOptions(Window* pParent, const SfxItemSet& rCoreA
{
FreeResource();
- mpOptions.reset( new ScAppOptions( SC_MOD()->GetAppOptions() ) );
-
Link aLink = LINK( this, ScTpFormulaOptions, ButtonHdl );
maBtnSepReset.SetClickHdl(aLink);
@@ -89,8 +87,8 @@ ScTpFormulaOptions::ScTpFormulaOptions(Window* pParent, const SfxItemSet& rCoreA
maEdSepArrayRow.SetGetFocusHdl(aLink);
// Get the decimal separator for current locale.
- String aSep = mpOptions->GetLocaleDataWrapper().getNumDecimalSep();
- mnDecSep = aSep.Len() ? aSep.GetChar(0) : sal_Unicode('.');
+ rtl::OUString aSep = SC_MOD()->GetAppOptions().GetLocaleDataWrapper().getNumDecimalSep();
+ mnDecSep = aSep.isEmpty() ? sal_Unicode('.') : aSep[0];
}
ScTpFormulaOptions::~ScTpFormulaOptions()
@@ -99,10 +97,11 @@ ScTpFormulaOptions::~ScTpFormulaOptions()
void ScTpFormulaOptions::ResetSeparators()
{
- ScAppOptions rAppOpt=SC_MOD()->GetAppOptions();
- maEdSepFuncArg.SetText(rAppOpt.GetFormulaSepArg());
- maEdSepArrayCol.SetText(rAppOpt.GetFormulaSepArrayCol());
- maEdSepArrayRow.SetText(rAppOpt.GetFormulaSepArrayRow());
+ rtl::OUString aFuncArg, aArrayCol, aArrayRow;
+ ScAppOptions::GetDefaultFormulaSeparators(aFuncArg, aArrayCol, aArrayRow);
+ maEdSepFuncArg.SetText(aFuncArg);
+ maEdSepArrayCol.SetText(aArrayCol);
+ maEdSepArrayRow.SetText(aArrayRow);
}
void ScTpFormulaOptions::OnFocusSeparatorInput(Edit* pEdit)
@@ -209,88 +208,96 @@ SfxTabPage* ScTpFormulaOptions::Create(Window* pParent, const SfxItemSet& rCoreS
sal_Bool ScTpFormulaOptions::FillItemSet(SfxItemSet& rCoreSet)
{
- sal_Bool bRet = false;
- sal_Bool bEnglishFuncName = maCbEnglishFuncName.IsChecked();
- ::formula::FormulaGrammar::Grammar eGram = ::formula::FormulaGrammar::GRAM_DEFAULT;
- OUString aSep = maEdSepFuncArg.GetText();
- OUString aSepArrayCol = maEdSepArrayCol.GetText();
- OUString aSepArrayRow = maEdSepArrayRow.GetText();
-
- switch (maLbFormulaSyntax.GetSelectEntryPos())
+ bool bRet = false;
+ if (maLbFormulaSyntax.GetSavedValue() != maLbFormulaSyntax.GetSelectEntryPos())
{
- 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;
- }
-
- if ( bEnglishFuncName != mpOptions->GetUseEnglishFuncName() )
- {
- rCoreSet.Put( SfxBoolItem( SID_SC_OPT_FORMULA_ENGLISH_FUNCNAME, bEnglishFuncName ) );
+ rCoreSet.Put(
+ SfxUInt16Item(SID_SC_OPT_FORMULA_GRAMMAR, maLbFormulaSyntax.GetSelectEntryPos()));
bRet = true;
}
- if ( eGram != mpOptions->GetFormulaSyntax() )
+
+ if (maCbEnglishFuncName.GetSavedValue() != maCbEnglishFuncName.IsChecked())
{
- rCoreSet.Put( SfxUInt16Item( SID_SC_OPT_FORMULA_GRAMMAR, eGram ) );
+ rCoreSet.Put(
+ SfxBoolItem(SID_SC_OPT_FORMULA_ENGLISH_FUNCNAME, maCbEnglishFuncName.IsChecked()));
bRet = true;
}
- if ( aSep != mpOptions->GetFormulaSepArg() )
+
+ if (maEdSepFuncArg.GetSavedValue() != maEdSepFuncArg.GetText())
{
- rCoreSet.Put( SfxStringItem( SID_SC_OPT_FORMULA_SEP_ARG, aSep ) );
+ rCoreSet.Put(
+ SfxStringItem(SID_SC_OPT_FORMULA_SEP_ARG, maEdSepFuncArg.GetText()));
bRet = true;
}
- if ( aSepArrayCol != mpOptions->GetFormulaSepArrayCol() )
+
+ if (maEdSepArrayCol.GetSavedValue() != maEdSepArrayCol.GetText())
{
- rCoreSet.Put( SfxStringItem( SID_SC_OPT_FORMULA_SEP_ARRAY_ROW, aSepArrayCol ) );
+ rCoreSet.Put(
+ SfxStringItem(SID_SC_OPT_FORMULA_SEP_ARRAY_COL, maEdSepArrayCol.GetText()));
bRet = true;
}
- if ( aSepArrayRow != mpOptions->GetFormulaSepArrayRow() )
+
+ if (maEdSepArrayRow.GetSavedValue() != maEdSepArrayRow.GetText())
{
- rCoreSet.Put( SfxStringItem( SID_SC_OPT_FORMULA_SEP_ARRAY_COL, aSepArrayRow ) );
+ rCoreSet.Put(
+ SfxStringItem(SID_SC_OPT_FORMULA_SEP_ARRAY_ROW, maEdSepArrayRow.GetText()));
bRet = true;
}
return bRet;
}
-void ScTpFormulaOptions::Reset(const SfxItemSet& /*rCoreSet*/)
+void ScTpFormulaOptions::Reset(const SfxItemSet& rCoreSet)
{
- ::formula::FormulaGrammar::Grammar eGram = mpOptions->GetFormulaSyntax();
- switch (eGram)
+ const SfxPoolItem* pItem = NULL;
+
+ // formula grammar.
+ maLbFormulaSyntax.SelectEntryPos(0);
+ if (rCoreSet.HasItem(SID_SC_OPT_FORMULA_GRAMMAR, &pItem))
{
- 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);
+ sal_uInt16 nVal = static_cast<const SfxUInt16Item*>(pItem)->GetValue();
+ if (nVal <= 2)
+ maLbFormulaSyntax.SelectEntryPos(nVal);
}
+ maLbFormulaSyntax.SaveValue();
- maCbEnglishFuncName.Check(mpOptions->GetUseEnglishFuncName());
+ // 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.SaveValue();
- OUString aSep = mpOptions->GetFormulaSepArg();
- OUString aSepArrayRow = mpOptions->GetFormulaSepArrayRow();
- OUString aSepArrayCol = mpOptions->GetFormulaSepArrayCol();
+ ResetSeparators();
- if (aSep.getLength() == 1 && aSepArrayRow.getLength() == 1 && aSepArrayCol.getLength() == 1)
+ // argument separator.
+ if (rCoreSet.HasItem(SID_SC_OPT_FORMULA_SEP_ARG, &pItem))
{
- // Each separator must be one character long.
- maEdSepFuncArg.SetText(aSep);
- maEdSepArrayCol.SetText(aSepArrayCol);
- maEdSepArrayRow.SetText(aSepArrayRow);
+ rtl::OUString aVal = static_cast<const SfxStringItem*>(pItem)->GetValue();
+ if (aVal.getLength() == 1)
+ maEdSepFuncArg.SetText(aVal);
}
- else
- ResetSeparators();
+ 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();
+
+ // matrix row separator.
+ if (rCoreSet.HasItem(SID_SC_OPT_FORMULA_SEP_ARRAY_ROW, &pItem))
+ {
+ rtl::OUString aVal = static_cast<const SfxStringItem*>(pItem)->GetValue();
+ if (aVal.getLength() == 1)
+ maEdSepArrayRow.SetText(aVal);
+ }
+ maEdSepArrayRow.SaveValue();
}
int ScTpFormulaOptions::DeactivatePage(SfxItemSet* /*pSet*/)