Kaydet (Commit) bf0629e0 authored tarafından Albert Thuswaldner's avatar Albert Thuswaldner Kaydeden (comit) Kohei Yoshida

Grouping ScFormulaOptions

üst e6d4795e
......@@ -177,6 +177,7 @@ $(eval $(call gb_Library_add_exception_objects,sc,\
sc/source/core/tool/doubleref \
sc/source/core/tool/editutil \
sc/source/core/tool/filtopt \
sc/source/core/tool/formulaopt \
sc/source/core/tool/formulaparserpool \
sc/source/core/tool/formularesult \
sc/source/core/tool/hints \
......
......@@ -91,26 +91,6 @@ public:
ScOptionsUtil::KeyBindingType GetKeyBindingType() const { return meKeyBindingType; }
void SetKeyBindingType( ScOptionsUtil::KeyBindingType e ) { meKeyBindingType = e; }
void SetFormulaSyntax( ::formula::FormulaGrammar::Grammar eGram ) { eFormulaGrammar = eGram; }
::formula::FormulaGrammar::Grammar GetFormulaSyntax() const { return eFormulaGrammar; }
void SetUseEnglishFuncName( bool bVal ) { bUseEnglishFuncName = bVal; }
bool GetUseEnglishFuncName() const { return bUseEnglishFuncName; }
void SetFormulaSepArg(const ::rtl::OUString& rSep) { aFormulaSepArg = rSep; }
::rtl::OUString GetFormulaSepArg() const { return aFormulaSepArg; }
void SetFormulaSepArrayRow(const ::rtl::OUString& rSep) { aFormulaSepArrayRow = rSep; }
::rtl::OUString GetFormulaSepArrayRow() const { return aFormulaSepArrayRow; }
void SetFormulaSepArrayCol(const ::rtl::OUString& rSep) { aFormulaSepArrayCol = rSep; }
::rtl::OUString GetFormulaSepArrayCol() const { return aFormulaSepArrayCol; }
void ResetFormulaSeparators();
static void GetDefaultFormulaSeparators(rtl::OUString& rSepArg, rtl::OUString& rSepArrayCol, rtl::OUString& rSepArrayRow);
static const LocaleDataWrapper& GetLocaleDataWrapper();
const ScAppOptions& operator= ( const ScAppOptions& rOpt );
private:
......@@ -133,12 +113,6 @@ private:
sal_Int32 nDefaultObjectSizeHeight;
sal_Bool mbShowSharedDocumentWarning;
ScOptionsUtil::KeyBindingType meKeyBindingType;
bool bUseEnglishFuncName; // use English function name even if the locale is not English.
::formula::FormulaGrammar::Grammar eFormulaGrammar; // formula grammar used to switch different formula syntax
::rtl::OUString aFormulaSepArg;
::rtl::OUString aFormulaSepArrayRow;
::rtl::OUString aFormulaSepArrayCol;
};
......@@ -158,7 +132,6 @@ class ScAppCfg : public ScAppOptions
ScLinkConfigItem aSortListItem;
ScLinkConfigItem aMiscItem;
ScLinkConfigItem aCompatItem;
ScLinkConfigItem aFormulaItem;
DECL_LINK( LayoutCommitHdl, void* );
DECL_LINK( InputCommitHdl, void* );
......@@ -167,7 +140,6 @@ class ScAppCfg : public ScAppOptions
DECL_LINK( SortListCommitHdl, void* );
DECL_LINK( MiscCommitHdl, void* );
DECL_LINK( CompatCommitHdl, void* );
DECL_LINK( FormulaCommitHdl, void* );
com::sun::star::uno::Sequence<rtl::OUString> GetLayoutPropertyNames();
com::sun::star::uno::Sequence<rtl::OUString> GetInputPropertyNames();
......@@ -176,7 +148,6 @@ class ScAppCfg : public ScAppOptions
com::sun::star::uno::Sequence<rtl::OUString> GetSortListPropertyNames();
com::sun::star::uno::Sequence<rtl::OUString> GetMiscPropertyNames();
com::sun::star::uno::Sequence<rtl::OUString> GetCompatPropertyNames();
com::sun::star::uno::Sequence<rtl::OUString> GetFormulaPropertyNames();
public:
ScAppCfg();
......
/* -*- 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.
*/
#ifndef SC_FORMULAOPT_HXX
#define SC_FORMULAOPT_HXX
#include <svl/poolitem.hxx>
#include <unotools/configitem.hxx>
#include <unotools/localedatawrapper.hxx>
#include "formula/grammar.hxx"
#include "scdllapi.h"
#include "global.hxx"
class SC_DLLPUBLIC ScFormulaOptions
{
private:
bool bUseEnglishFuncName; // use English function name even if the locale is not English.
::formula::FormulaGrammar::Grammar eFormulaGrammar; // formula grammar used to switch different formula syntax
::rtl::OUString aFormulaSepArg;
::rtl::OUString aFormulaSepArrayRow;
::rtl::OUString aFormulaSepArrayCol;
public:
ScFormulaOptions();
ScFormulaOptions( const ScFormulaOptions& rCpy );
~ScFormulaOptions();
void SetDefaults();
void SetFormulaSyntax( ::formula::FormulaGrammar::Grammar eGram ) { eFormulaGrammar = eGram; }
::formula::FormulaGrammar::Grammar GetFormulaSyntax() const { return eFormulaGrammar; }
void SetUseEnglishFuncName( bool bVal ) { bUseEnglishFuncName = bVal; }
bool GetUseEnglishFuncName() const { return bUseEnglishFuncName; }
void SetFormulaSepArg(const ::rtl::OUString& rSep) { aFormulaSepArg = rSep; }
::rtl::OUString GetFormulaSepArg() const { return aFormulaSepArg; }
void SetFormulaSepArrayRow(const ::rtl::OUString& rSep) { aFormulaSepArrayRow = rSep; }
::rtl::OUString GetFormulaSepArrayRow() const { return aFormulaSepArrayRow; }
void SetFormulaSepArrayCol(const ::rtl::OUString& rSep) { aFormulaSepArrayCol = rSep; }
::rtl::OUString GetFormulaSepArrayCol() const { return aFormulaSepArrayCol; }
void ResetFormulaSeparators();
static void GetDefaultFormulaSeparators(rtl::OUString& rSepArg, rtl::OUString& rSepArrayCol, rtl::OUString& rSepArrayRow);
static const LocaleDataWrapper& GetLocaleDataWrapper();
ScFormulaOptions& operator= ( const ScFormulaOptions& rCpy );
bool operator== ( const ScFormulaOptions& rOpt ) const;
bool operator!= ( const ScFormulaOptions& rOpt ) const;
};
//==================================================================
// item for the dialog / options page
//==================================================================
class SC_DLLPUBLIC ScTpFormulaItem : public SfxPoolItem
{
public:
TYPEINFO();
ScTpFormulaItem( sal_uInt16 nWhich,
const ScFormulaOptions& rOpt );
ScTpFormulaItem( const ScTpFormulaItem& rItem );
~ScTpFormulaItem();
virtual String GetValueText() const;
virtual int operator==( const SfxPoolItem& ) const;
virtual SfxPoolItem* Clone( SfxItemPool *pPool = 0 ) const;
const ScFormulaOptions& GetFormulaOptions() const { return theOptions; }
private:
ScFormulaOptions theOptions;
};
//==================================================================
// config item
//==================================================================
class ScFormulaCfg : public ScFormulaOptions, public utl::ConfigItem
{
com::sun::star::uno::Sequence<rtl::OUString> GetPropertyNames();
public:
ScFormulaCfg();
void SetOptions( const ScFormulaOptions& rNew );
virtual void Commit();
virtual void Notify( const ::com::sun::star::uno::Sequence< rtl::OUString >& aPropertyNames );
};
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
......@@ -117,11 +117,7 @@
#define FID_MARKPAGEDOWN (SC_VIEW_START + 19)
// Format options
#define SID_SC_OPT_FORMULA_ENGLISH_FUNCNAME (SC_VIEW_START + 20)
#define SID_SC_OPT_FORMULA_GRAMMAR (SC_VIEW_START + 21)
#define SID_SC_OPT_FORMULA_SEP_ARG (SC_VIEW_START + 22)
#define SID_SC_OPT_FORMULA_SEP_ARRAY_ROW (SC_VIEW_START + 23)
#define SID_SC_OPT_FORMULA_SEP_ARRAY_COL (SC_VIEW_START + 24)
#define SID_SCFORMULAOPTIONS (SC_VIEW_START + 20)
// slot-IDs for attributes
......
......@@ -60,11 +60,13 @@ class ScDocument;
class ScViewCfg;
class ScDocCfg;
class ScAppCfg;
class ScFormulaCfg;
class ScInputCfg;
class ScPrintCfg;
class ScViewOptions;
class ScDocOptions;
class ScAppOptions;
class ScFormulaOptions;
class ScInputOptions;
class ScPrintOptions;
class ScInputHandler;
......@@ -104,6 +106,7 @@ class ScModule: public SfxModule, public SfxListener, utl::ConfigurationListener
ScViewCfg* pViewCfg;
ScDocCfg* pDocCfg;
ScAppCfg* pAppCfg;
ScFormulaCfg* pFormulaCfg;
ScInputCfg* pInputCfg;
ScPrintCfg* pPrintCfg;
ScNavipiCfg* pNavipiCfg;
......@@ -176,11 +179,13 @@ public:
const ScViewOptions& GetViewOptions ();
SC_DLLPUBLIC const ScDocOptions& GetDocOptions ();
SC_DLLPUBLIC const ScAppOptions& GetAppOptions ();
const ScFormulaOptions& GetFormulaOptions ();
const ScInputOptions& GetInputOptions ();
SC_DLLPUBLIC const ScPrintOptions& GetPrintOptions ();
void SetViewOptions ( const ScViewOptions& rOpt );
SC_DLLPUBLIC void SetDocOptions ( const ScDocOptions& rOpt );
SC_DLLPUBLIC void SetAppOptions ( const ScAppOptions& rOpt );
void SetFormulaOptions ( const ScFormulaOptions& rOpt );
void SetInputOptions ( const ScInputOptions& rOpt );
void SetPrintOptions ( const ScPrintOptions& rOpt );
void InsertEntryToLRUList(sal_uInt16 nFIndex);
......
This diff is collapsed.
......@@ -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;
}
......
......@@ -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
......
......@@ -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();
......
......@@ -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 );
......
......@@ -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*/)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment