Hi Kohei, Thank you for your feedback.
On Sat, Feb 25, 2012 at 02:45, Kohei Yoshida <[email protected]> wrote: > On Fri, 2012-02-24 at 20:38 -0500, Kohei Yoshida wrote: >> Hi Albert, >> >> On Sat, 2012-02-25 at 01:12 +0100, Albert Thuswaldner wrote: >> >> > 1.) ScDocument::SetDocOptions requires some rethink. Here, now that >> > the format option stuff is moved to appoptions, only >> > xPoolHelper->SetFormTableOpt(rOpt); uses data from docoptions, the mix >> > of options makes this method ugly. Splitting this up might be a >> > solution, however ScDocument::SetDocOptions is used in quite many >> > places.... >> >> So, your observation is correct. As you say, it's best to take the code >> that sets the formula options out of SetDocOptions and into its own >> method. We could call it SetFormulaOptions() or something. The new >> SetDocOptions() would basically have nothing other than >> >> { >> OSL_ENSURE( pDocOptions, "No DocOptions! :-(" ); >> *pDocOptions = rOpt; >> xPoolHelper->SetFormTableOpt(rOpt); >> } >> >> and the rest can go to the new method. > > Actually, the new method doesn't have to be in ScDocument at all. The > only thing you need to set to ScDocument is the grammar, but other than > that, the rest can be done outside of ScDocument. I'm not really sure > what the best place would be, but you could, for instance, put it in > ScDocShell, since it needs to be callable from CheckConfigOptions... > Just an idea. Yes, SeDocShell seems to be a good place to put it in. I made the necessary changes as a follow-up patch, see attached file. I noticed that the SetFormulaOptions is also needed in ScDocShell::InitOptions otherwise documents will not show up with the selected formula format on open. As a next step I will try to group the Formula options as discussed. /Albert
From 4cc9334ecca2d64ed32e72e15a0f9272ffbbe953 Mon Sep 17 00:00:00 2001 From: Albert Thuswaldner <[email protected]> Date: Mon, 27 Feb 2012 00:41:39 +0100 Subject: [PATCH] Splitting ScDocument::SetDocOptions, moved new SetFormulaOptions to ScDocShell --- sc/source/core/data/documen3.cxx | 32 -------------------------------- sc/source/ui/app/scmod.cxx | 8 ++------ sc/source/ui/docshell/docsh3.cxx | 2 ++ sc/source/ui/docshell/docsh6.cxx | 28 +++++++++++++++++++++++++++- sc/source/ui/inc/docsh.hxx | 2 ++ 5 files changed, 33 insertions(+), 39 deletions(-) diff --git a/sc/source/core/data/documen3.cxx b/sc/source/core/data/documen3.cxx index 28eab09..ddacf92 100644 --- a/sc/source/core/data/documen3.cxx +++ b/sc/source/core/data/documen3.cxx @@ -52,10 +52,8 @@ #include "rangelst.hxx" #include "chartarr.hxx" #include "chartlock.hxx" -#include "compiler.hxx" #include "refupdat.hxx" #include "docoptio.hxx" -#include "appoptio.hxx" #include "viewopti.hxx" #include "scextopt.hxx" #include "brdcst.hxx" @@ -67,7 +65,6 @@ #include "dociter.hxx" #include "detdata.hxx" #include "detfunc.hxx" -#include "scmod.hxx" // SC_MOD #include "inputopt.hxx" // GetExpandRefs #include "chartlis.hxx" #include "sc.hrc" // SID_LINK @@ -1938,39 +1935,10 @@ const ScDocOptions& ScDocument::GetDocOptions() const void ScDocument::SetDocOptions( const ScDocOptions& rOpt ) { - ScAppOptions rAppOpt=SC_MOD()->GetAppOptions(); - OSL_ENSURE( pDocOptions, "No DocOptions! :-(" ); - // bool bUpdateFuncNames = pDocOptions->GetUseEnglishFuncName() != rOpt.GetUseEnglishFuncName(); *pDocOptions = rOpt; - xPoolHelper->SetFormTableOpt(rOpt); - - SetGrammar( rAppOpt.GetFormulaSyntax() ); - - //if (bUpdateFuncNames) - { - // This needs to be called first since it may re-initialize the entire - // opcode map. - if (rAppOpt.GetUseEnglishFuncName()) - { - // switch native symbols to English. - ScCompiler aComp(NULL, ScAddress()); - ScCompiler::OpCodeMapPtr xMap = aComp.GetOpCodeMap(::com::sun::star::sheet::FormulaLanguage::ENGLISH); - ScCompiler::SetNativeSymbols(xMap); - } - else - // re-initialize native symbols with localized function names. - ScCompiler::ResetNativeSymbols(); - - // Force re-population of function names for the function wizard, function tip etc. - ScGlobal::ResetFunctionList(); - } - - // Update the separators. - ScCompiler::UpdateSeparatorsNative( - rAppOpt.GetFormulaSepArg(), rAppOpt.GetFormulaSepArrayCol(), rAppOpt.GetFormulaSepArrayRow()); } const ScViewOptions& ScDocument::GetViewOptions() const diff --git a/sc/source/ui/app/scmod.cxx b/sc/source/ui/app/scmod.cxx index 9798306..f496211 100644 --- a/sc/source/ui/app/scmod.cxx +++ b/sc/source/ui/app/scmod.cxx @@ -1088,13 +1088,9 @@ void ScModule::ModifyOptions( const SfxItemSet& rOptSet ) } // Do all the format updates on open documents in one go - if ( bUpdateDocFormat && pDoc ) + if ( bUpdateDocFormat && pDocSh ) { - const ScDocOptions& rOpt = pDoc->GetDocOptions(); // Temporary fix to keep - // SettDocOption call as is - - // Needs update. - pDoc->SetDocOptions( rOpt ); + pDocSh->SetFormulaOptions( *pAppCfg ); pDocSh->SetDocumentModified(); } diff --git a/sc/source/ui/docshell/docsh3.cxx b/sc/source/ui/docshell/docsh3.cxx index f5692ef..522e9d7 100644 --- a/sc/source/ui/docshell/docsh3.cxx +++ b/sc/source/ui/docshell/docsh3.cxx @@ -432,6 +432,7 @@ void ScDocShell::InitOptions(bool bForLoading) // called from InitNew and L ScModule* pScMod = SC_MOD(); ScDocOptions aDocOpt = pScMod->GetDocOptions(); + ScAppOptions aAppOpt = pScMod->GetAppOptions(); ScViewOptions aViewOpt = pScMod->GetViewOptions(); aDocOpt.SetAutoSpell( bAutoSpell ); @@ -448,6 +449,7 @@ void ScDocShell::InitOptions(bool bForLoading) // called from InitNew and L aDocument.SetDocOptions( aDocOpt ); aDocument.SetViewOptions( aViewOpt ); + SetFormulaOptions( aAppOpt ); // 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 c02956c..9d054bb 100644 --- a/sc/source/ui/docshell/docsh6.cxx +++ b/sc/source/ui/docshell/docsh6.cxx @@ -47,9 +47,9 @@ #include "viewdata.hxx" #include "tabvwsh.hxx" #include "tablink.hxx" -#include "appoptio.hxx" #include "globstr.hrc" #include "scmod.hxx" +#include "compiler.hxx" #include "formula/FormulaCompiler.hxx" #include "comphelper/processfactory.hxx" @@ -486,6 +486,31 @@ sal_Bool ScDocShell::ReloadTabLinks() return sal_True; //! Fehler erkennen } +void ScDocShell::SetFormulaOptions(const ScAppOptions& rAppOpt ) +{ + aDocument.SetGrammar( rAppOpt.GetFormulaSyntax() ); + + // This needs to be called first since it may re-initialize the entire + // opcode map. + if (rAppOpt.GetUseEnglishFuncName()) + { + // switch native symbols to English. + ScCompiler aComp(NULL, ScAddress()); + ScCompiler::OpCodeMapPtr xMap = aComp.GetOpCodeMap(::com::sun::star::sheet::FormulaLanguage::ENGLISH); + ScCompiler::SetNativeSymbols(xMap); + } + else + // re-initialize native symbols with localized function names. + ScCompiler::ResetNativeSymbols(); + + // Force re-population of function names for the function wizard, function tip etc. + ScGlobal::ResetFunctionList(); + + // Update the separators. + ScCompiler::UpdateSeparatorsNative( + rAppOpt.GetFormulaSepArg(), rAppOpt.GetFormulaSepArrayCol(), rAppOpt.GetFormulaSepArrayRow()); +} + void ScDocShell::CheckConfigOptions() { if (IsConfigOptionsChecked()) @@ -506,6 +531,7 @@ void ScDocShell::CheckConfigOptions() // separator. Reset them to default. ScAppOptions aNew = rAppOpt; aNew.ResetFormulaSeparators(); + SetFormulaOptions(aNew); pScMod->SetAppOptions(aNew); // Launch a nice warning dialog to let the users know of this change. diff --git a/sc/source/ui/inc/docsh.hxx b/sc/source/ui/inc/docsh.hxx index 74e12f4..488c202 100644 --- a/sc/source/ui/inc/docsh.hxx +++ b/sc/source/ui/inc/docsh.hxx @@ -39,6 +39,7 @@ #include "scdllapi.h" #include "scdll.hxx" #include "document.hxx" +#include "appoptio.hxx" #include "shellids.hxx" #include "refreshtimer.hxx" #include "optutil.hxx" @@ -320,6 +321,7 @@ public: void UpdateLinks(); // Link-Eintraege aktuallisieren sal_Bool ReloadTabLinks(); // Links ausfuehren (Inhalt aktualisieren) + void SetFormulaOptions(const ScAppOptions& rAppOpt ); virtual void CheckConfigOptions(); void PostEditView( ScEditEngineDefaulter* pEditEngine, const ScAddress& rCursorPos ); -- 1.7.3.4
_______________________________________________ LibreOffice mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice
