diff options
author | Katarina Behrens <Katarina.Behrens@cib.de> | 2015-10-12 11:43:46 +0200 |
---|---|---|
committer | Eike Rathke <erack@redhat.com> | 2015-10-16 22:15:53 +0000 |
commit | 313df729a3b6a94275ac992e74b18256fd286f93 (patch) | |
tree | e55113c2a5e31803a9d75bcf938cf9ec4f9d4e96 /sc/source | |
parent | f1bcf41baea1636ff33f2c918ebb4a4fa589d10a (diff) |
tdf#92256, c#19: Implement "current doc only" switch
that'll save calculation settings into current document only, not
into global user profile
Change-Id: I50ab31b679f712ff512f85a2cd58319d356462ea
Reviewed-on: https://gerrit.libreoffice.org/19318
Reviewed-by: Eike Rathke <erack@redhat.com>
Tested-by: Eike Rathke <erack@redhat.com>
Diffstat (limited to 'sc/source')
-rw-r--r-- | sc/source/core/tool/docoptio.cxx | 4 | ||||
-rw-r--r-- | sc/source/core/tool/formulaopt.cxx | 63 | ||||
-rw-r--r-- | sc/source/ui/inc/tpformula.hxx | 4 | ||||
-rw-r--r-- | sc/source/ui/optdlg/calcoptionsdlg.cxx | 12 | ||||
-rw-r--r-- | sc/source/ui/optdlg/calcoptionsdlg.hxx | 6 | ||||
-rw-r--r-- | sc/source/ui/optdlg/tpformula.cxx | 16 |
6 files changed, 84 insertions, 21 deletions
diff --git a/sc/source/core/tool/docoptio.cxx b/sc/source/core/tool/docoptio.cxx index c90bd94f33ca..656be6e90b8f 100644 --- a/sc/source/core/tool/docoptio.cxx +++ b/sc/source/core/tool/docoptio.cxx @@ -71,7 +71,8 @@ ScDocOptions::ScDocOptions( const ScDocOptions& rCpy ) bMatchWholeCell( rCpy.bMatchWholeCell ), bDoAutoSpell( rCpy.bDoAutoSpell ), bLookUpColRowNames( rCpy.bLookUpColRowNames ), - bFormulaRegexEnabled( rCpy.bFormulaRegexEnabled ) + bFormulaRegexEnabled( rCpy.bFormulaRegexEnabled ), + bWriteCalcConfig( rCpy.bWriteCalcConfig ) { } @@ -96,6 +97,7 @@ void ScDocOptions::ResetDocOptions() bDoAutoSpell = false; bLookUpColRowNames = true; bFormulaRegexEnabled= true; + bWriteCalcConfig = true; } // ScTpCalcItem - Daten fuer die CalcOptions-TabPage diff --git a/sc/source/core/tool/formulaopt.cxx b/sc/source/core/tool/formulaopt.cxx index 166429f9ad09..db1bc0bbc6cf 100644 --- a/sc/source/core/tool/formulaopt.cxx +++ b/sc/source/core/tool/formulaopt.cxx @@ -36,6 +36,7 @@ ScFormulaOptions::ScFormulaOptions( const ScFormulaOptions& rCpy ) : bUseEnglishFuncName ( rCpy.bUseEnglishFuncName ), eFormulaGrammar ( rCpy.eFormulaGrammar ), aCalcConfig(rCpy.aCalcConfig), + mbWriteCalcConfig (rCpy.mbWriteCalcConfig), aFormulaSepArg ( rCpy.aFormulaSepArg ), aFormulaSepArrayRow ( rCpy.aFormulaSepArrayRow ), aFormulaSepArrayCol ( rCpy.aFormulaSepArrayCol ), @@ -52,6 +53,7 @@ void ScFormulaOptions::SetDefaults() { bUseEnglishFuncName = false; eFormulaGrammar = ::formula::FormulaGrammar::GRAM_NATIVE; + mbWriteCalcConfig = true; meOOXMLRecalc = RECALC_ASK; meODFRecalc = RECALC_ASK; @@ -129,6 +131,7 @@ ScFormulaOptions& ScFormulaOptions::operator=( const ScFormulaOptions& rCpy ) bUseEnglishFuncName = rCpy.bUseEnglishFuncName; eFormulaGrammar = rCpy.eFormulaGrammar; aCalcConfig = rCpy.aCalcConfig; + mbWriteCalcConfig = rCpy.mbWriteCalcConfig; aFormulaSepArg = rCpy.aFormulaSepArg; aFormulaSepArrayRow = rCpy.aFormulaSepArrayRow; aFormulaSepArrayCol = rCpy.aFormulaSepArrayCol; @@ -142,6 +145,7 @@ bool ScFormulaOptions::operator==( const ScFormulaOptions& rOpt ) const return bUseEnglishFuncName == rOpt.bUseEnglishFuncName && eFormulaGrammar == rOpt.eFormulaGrammar && aCalcConfig == rOpt.aCalcConfig + && mbWriteCalcConfig == rOpt.mbWriteCalcConfig && aFormulaSepArg == rOpt.aFormulaSepArg && aFormulaSepArrayRow == rOpt.aFormulaSepArrayRow && aFormulaSepArrayCol == rOpt.aFormulaSepArrayCol @@ -510,6 +514,10 @@ void ScFormulaCfg::ImplCommit() Sequence<OUString> aNames = GetPropertyNames(); Sequence<Any> aValues(aNames.getLength()); Any* pValues = aValues.getArray(); + + Sequence<Any> aOldValues = GetProperties(aNames); + Any* pOldValues = aOldValues.getArray(); + bool bSetOpenCL = false; for (int nProp = 0; nProp < aNames.getLength(); ++nProp) @@ -546,34 +554,57 @@ void ScFormulaCfg::ImplCommit() case SCFORMULAOPT_STRING_REF_SYNTAX: { sal_Int32 nVal = -1; - switch (GetCalcConfig().meStringRefAddressSyntax) + + if (GetWriteCalcConfig()) { - case ::formula::FormulaGrammar::CONV_OOO: nVal = 0; break; - case ::formula::FormulaGrammar::CONV_XL_A1: nVal = 1; break; - case ::formula::FormulaGrammar::CONV_XL_R1C1: nVal = 2; break; - case ::formula::FormulaGrammar::CONV_A1_XL_A1: nVal = 3; break; - default: break; + switch (GetCalcConfig().meStringRefAddressSyntax) + { + case ::formula::FormulaGrammar::CONV_OOO: nVal = 0; break; + case ::formula::FormulaGrammar::CONV_XL_A1: nVal = 1; break; + case ::formula::FormulaGrammar::CONV_XL_R1C1: nVal = 2; break; + case ::formula::FormulaGrammar::CONV_A1_XL_A1: nVal = 3; break; + default: break; + } + pValues[nProp] <<= nVal; + } + else + { + pValues[nProp] = pOldValues[nProp]; } - pValues[nProp] <<= nVal; } break; case SCFORMULAOPT_STRING_CONVERSION: { - sal_Int32 nVal = 3; - switch (GetCalcConfig().meStringConversion) + if (GetWriteCalcConfig()) { - case ScCalcConfig::StringConversion::ILLEGAL: nVal = 0; break; - case ScCalcConfig::StringConversion::ZERO: nVal = 1; break; - case ScCalcConfig::StringConversion::UNAMBIGUOUS: nVal = 2; break; - case ScCalcConfig::StringConversion::LOCALE: nVal = 3; break; + sal_Int32 nVal = 3; + + switch (GetCalcConfig().meStringConversion) + { + case ScCalcConfig::StringConversion::ILLEGAL: nVal = 0; break; + case ScCalcConfig::StringConversion::ZERO: nVal = 1; break; + case ScCalcConfig::StringConversion::UNAMBIGUOUS: nVal = 2; break; + case ScCalcConfig::StringConversion::LOCALE: nVal = 3; break; + } + pValues[nProp] <<= nVal; + } + else + { + pValues[nProp] = pOldValues[nProp]; } - pValues[nProp] <<= nVal; } break; case SCFORMULAOPT_EMPTY_OUSTRING_AS_ZERO: { - bool bVal = GetCalcConfig().mbEmptyStringAsZero; - pValues[nProp] <<= bVal; + if (GetWriteCalcConfig()) + { + bool bVal = GetCalcConfig().mbEmptyStringAsZero; + pValues[nProp] <<= bVal; + } + else + { + pValues[nProp] = pOldValues[nProp]; + } } break; case SCFORMULAOPT_OOXML_RECALC: diff --git a/sc/source/ui/inc/tpformula.hxx b/sc/source/ui/inc/tpformula.hxx index 098a1589fbf2..3c7ed8cae00a 100644 --- a/sc/source/ui/inc/tpformula.hxx +++ b/sc/source/ui/inc/tpformula.hxx @@ -27,6 +27,7 @@ #include <vcl/button.hxx> #include "calcconfig.hxx" +#include "docoptio.hxx" class ScTpFormulaOptions : public SfxTabPage { @@ -79,6 +80,9 @@ private: ScCalcConfig maSavedConfig; ScCalcConfig maCurrentConfig; + ScDocOptions maSavedDocOptions; + ScDocOptions maCurrentDocOptions; + sal_Unicode mnDecSep; }; diff --git a/sc/source/ui/optdlg/calcoptionsdlg.cxx b/sc/source/ui/optdlg/calcoptionsdlg.cxx index fb213fcbaac9..7ddc4c8719c2 100644 --- a/sc/source/ui/optdlg/calcoptionsdlg.cxx +++ b/sc/source/ui/optdlg/calcoptionsdlg.cxx @@ -76,11 +76,12 @@ sal_Int32 toSelectedItem( formula::FormulaGrammar::AddressConvention eConv ) } -ScCalcOptionsDialog::ScCalcOptionsDialog(vcl::Window* pParent, const ScCalcConfig& rConfig) +ScCalcOptionsDialog::ScCalcOptionsDialog(vcl::Window* pParent, const ScCalcConfig& rConfig, bool bWriteConfig) : ModalDialog(pParent, "FormulaCalculationOptions", "modules/scalc/ui/formulacalculationoptions.ui") , maConfig(rConfig) , mbSelectedEmptyStringAsZero(rConfig.mbEmptyStringAsZero) + , mbWriteConfig(bWriteConfig) { get(mpTestButton, "test"); get(mpOpenclInfoList, "opencl_list"); @@ -103,6 +104,10 @@ ScCalcOptionsDialog::ScCalcOptionsDialog(vcl::Window* pParent, const ScCalcConfi mpSyntax->SelectEntryPos( toSelectedItem(rConfig.meStringRefAddressSyntax) ); mpSyntax->SetSelectHdl(LINK(this, ScCalcOptionsDialog, SyntaxModifiedHdl)); + get(mpCurrentDocOnly,"current_doc"); + mpCurrentDocOnly->Check(!mbWriteConfig); + mpCurrentDocOnly->SetClickHdl(LINK(this, ScCalcOptionsDialog, CurrentDocOnlyHdl)); + get(mpUseOpenCL,"CBUseOpenCL"); mpUseOpenCL->Check(rConfig.mbOpenCLSubsetOnly); mpUseOpenCL->SetClickHdl(LINK(this, ScCalcOptionsDialog, CBUseOpenCLHdl)); @@ -233,6 +238,11 @@ IMPL_LINK_TYPED(ScCalcOptionsDialog, SyntaxModifiedHdl, ListBox&, rSyntax, void) maConfig.SetStringRefSyntax(toAddressConvention(rSyntax.GetSelectEntryPos())); } +IMPL_LINK_TYPED(ScCalcOptionsDialog, CurrentDocOnlyHdl, Button*, pCheckBox, void) +{ + mbWriteConfig = !(static_cast<CheckBox*>(pCheckBox)->IsChecked()); +} + IMPL_LINK_TYPED(ScCalcOptionsDialog, CBUseOpenCLHdl, Button*, pCheckBox, void) { maConfig.mbOpenCLSubsetOnly = static_cast<CheckBox*>(pCheckBox)->IsChecked(); diff --git a/sc/source/ui/optdlg/calcoptionsdlg.hxx b/sc/source/ui/optdlg/calcoptionsdlg.hxx index fe810fcef3c8..1d062510a333 100644 --- a/sc/source/ui/optdlg/calcoptionsdlg.hxx +++ b/sc/source/ui/optdlg/calcoptionsdlg.hxx @@ -34,7 +34,7 @@ class ScCalcOptionsDialog : public ModalDialog { public: - ScCalcOptionsDialog(vcl::Window* pParent, const ScCalcConfig& rConfig); + ScCalcOptionsDialog(vcl::Window* pParent, const ScCalcConfig& rConfig, bool bWriteConfig); virtual ~ScCalcOptionsDialog(); virtual void dispose() override; @@ -45,10 +45,12 @@ public: DECL_LINK_TYPED( AsZeroModifiedHdl, Button*, void); DECL_LINK_TYPED( ConversionModifiedHdl, ListBox&, void); DECL_LINK_TYPED( SyntaxModifiedHdl, ListBox&, void); + DECL_LINK_TYPED( CurrentDocOnlyHdl, Button*, void); DECL_LINK_TYPED( CBUseOpenCLHdl, Button*, void); DECL_LINK_TYPED( SpinOpenCLMinSizeHdl, Edit&, void); const ScCalcConfig& GetConfig() const { return maConfig;} + bool GetWriteCalcConfig() const { return mbWriteConfig;} private: void OpenCLAutomaticSelectionChanged(); @@ -59,6 +61,7 @@ private: VclPtr<CheckBox> mpEmptyAsZero; VclPtr<ListBox> mpConversion; VclPtr<ListBox> mpSyntax; + VclPtr<CheckBox> mpCurrentDocOnly; VclPtr<CheckBox> mpUseOpenCL; VclPtr<NumericField> mpSpinButton; @@ -81,6 +84,7 @@ private: #endif bool mbSelectedEmptyStringAsZero; + bool mbWriteConfig; }; #endif diff --git a/sc/source/ui/optdlg/tpformula.cxx b/sc/source/ui/optdlg/tpformula.cxx index e4817d1d1ff7..789555d2ad0a 100644 --- a/sc/source/ui/optdlg/tpformula.cxx +++ b/sc/source/ui/optdlg/tpformula.cxx @@ -77,6 +77,10 @@ ScTpFormulaOptions::ScTpFormulaOptions(vcl::Window* pParent, const SfxItemSet& r // Get the decimal separator for current locale. OUString aSep = ScGlobal::GetpLocaleData()->getNumDecimalSep(); mnDecSep = aSep.isEmpty() ? sal_Unicode('.') : aSep[0]; + + maSavedDocOptions = ScDocOptions( + static_cast<const ScTpCalcItem&>(rCoreAttrs.Get( + GetWhich(SID_SCDOCOPTIONS))).GetDocOptions()); } ScTpFormulaOptions::~ScTpFormulaOptions() @@ -139,10 +143,12 @@ void ScTpFormulaOptions::UpdateCustomCalcRadioButtons(bool bDefault) void ScTpFormulaOptions::LaunchCustomCalcSettings() { - ScopedVclPtrInstance< ScCalcOptionsDialog > aDlg(this, maCurrentConfig); + ScopedVclPtrInstance< ScCalcOptionsDialog > aDlg(this, maCurrentConfig, + maCurrentDocOptions.IsWriteCalcConfig()); if (aDlg->Execute() == RET_OK) { maCurrentConfig = aDlg->GetConfig(); + maCurrentDocOptions.SetWriteCalcConfig( aDlg->GetWriteCalcConfig()); } } @@ -260,7 +266,8 @@ bool ScTpFormulaOptions::FillItemSet(SfxItemSet* rCoreSet) || static_cast<OUString>(mpEdSepArrayRow->GetSavedValue()) != aSepArrayRow || mpLbOOXMLRecalcOptions->GetSavedValue() != nOOXMLRecalcMode || mpLbODFRecalcOptions->GetSavedValue() != nODFRecalcMode - || maSavedConfig != maCurrentConfig ) + || maSavedConfig != maCurrentConfig + || maSavedDocOptions != maCurrentDocOptions ) { ::formula::FormulaGrammar::Grammar eGram = ::formula::FormulaGrammar::GRAM_DEFAULT; @@ -288,8 +295,11 @@ bool ScTpFormulaOptions::FillItemSet(SfxItemSet* rCoreSet) aOpt.SetCalcConfig(maCurrentConfig); aOpt.SetOOXMLRecalcOptions(eOOXMLRecalc); aOpt.SetODFRecalcOptions(eODFRecalc); + aOpt.SetWriteCalcConfig( maCurrentDocOptions.IsWriteCalcConfig()); rCoreSet->Put( ScTpFormulaItem( SID_SCFORMULAOPTIONS, aOpt ) ); + rCoreSet->Put( ScTpCalcItem( SID_SCDOCOPTIONS, maCurrentDocOptions ) ); + bRet = true; } return bRet; @@ -362,6 +372,8 @@ void ScTpFormulaOptions::Reset(const SfxItemSet* rCoreSet) UpdateCustomCalcRadioButtons(bDefault); maCurrentConfig = maSavedConfig; + + maCurrentDocOptions = maSavedDocOptions; } SfxTabPage::sfxpg ScTpFormulaOptions::DeactivatePage(SfxItemSet* /*pSet*/) |