summaryrefslogtreecommitdiff
path: root/sc
diff options
context:
space:
mode:
authorEike Rathke <erack@redhat.com>2022-08-29 21:39:19 +0200
committerEike Rathke <erack@redhat.com>2022-08-30 11:48:54 +0200
commit5a16cd1123003d6f72d84983292cf96c7fb49d60 (patch)
treed779c236bfef5557c3f85a735892381c9a7dec55 /sc
parentffe488c38741f4391b2f19440a8d20f4ed38a886 (diff)
Move input handler function names to ScGlobal static
... as there is only one function list and InputHandlerFunctionNames can be shared instead of each ScInputHandler holding their own copy. Change-Id: Id82b2020f8846456ce7464daa83feb6915792aa2 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/139012 Reviewed-by: Eike Rathke <erack@redhat.com> Tested-by: Jenkins
Diffstat (limited to 'sc')
-rw-r--r--sc/inc/global.hxx15
-rw-r--r--sc/source/core/data/global.cxx37
-rw-r--r--sc/source/ui/app/inputhdl.cxx41
-rw-r--r--sc/source/ui/inc/inputhdl.hxx9
4 files changed, 56 insertions, 46 deletions
diff --git a/sc/inc/global.hxx b/sc/inc/global.hxx
index 8401ca4c6f7e..3be19f89dcc1 100644
--- a/sc/inc/global.hxx
+++ b/sc/inc/global.hxx
@@ -20,6 +20,7 @@
#pragma once
#include "address.hxx"
+#include "typedstrdata.hxx"
#include <i18nlangtag/lang.h>
#include <svx/svdtypes.hxx>
#include <tools/ref.hxx>
@@ -455,6 +456,17 @@ struct ScImportParam
bool operator== ( const ScImportParam& r ) const;
};
+// Formula data replacement character for a pair of parentheses at end of
+// function name, to force sorting parentheses before all other characters.
+// Collation may treat parentheses differently.
+constexpr sal_Unicode cParenthesesReplacement = 0x0001;
+struct InputHandlerFunctionNames
+{
+ ScTypedCaseStrSet maFunctionData;
+ ScTypedCaseStrSet maFunctionDataPara;
+ std::set<sal_Unicode> maFunctionChar;
+};
+
class ScDocShell;
class SvxSearchItem;
class ScAutoFormat;
@@ -523,6 +535,8 @@ class ScGlobal
static std::atomic<sc::SharedStringPoolPurge*> pSharedStringPoolPurge;
+ static InputHandlerFunctionNames maInputHandlerFunctionNames;
+
static void InitPPT();
public:
@@ -595,6 +609,7 @@ public:
static ScFunctionList* GetStarCalcFunctionList();
static ScFunctionMgr* GetStarCalcFunctionMgr();
static void ResetFunctionList();
+ static const InputHandlerFunctionNames& GetInputHandlerFunctionNames();
static OUString GetErrorString(FormulaError nErrNumber);
static OUString GetLongErrorString(FormulaError nErrNumber);
diff --git a/sc/source/core/data/global.cxx b/sc/source/core/data/global.cxx
index 46277a807db0..58b3a1e70281 100644
--- a/sc/source/core/data/global.cxx
+++ b/sc/source/core/data/global.cxx
@@ -119,6 +119,9 @@ sal_uInt16 nScFillModeMouseModifier = 0; //FIXME: And this
bool ScGlobal::bThreadedGroupCalcInProgress = false;
+InputHandlerFunctionNames ScGlobal::maInputHandlerFunctionNames;
+
+
// Static functions
bool ScGlobal::HasAttrChanged( const SfxItemSet& rNewAttrs,
@@ -641,6 +644,40 @@ void ScGlobal::ResetFunctionList()
// FunctionMgr has pointers into FunctionList, must also be updated
xStarCalcFunctionMgr.reset();
xStarCalcFunctionList.reset();
+ // Building new names also needs InputHandler data to be refreshed.
+ maInputHandlerFunctionNames = InputHandlerFunctionNames();
+}
+
+const InputHandlerFunctionNames& ScGlobal::GetInputHandlerFunctionNames()
+{
+ if (maInputHandlerFunctionNames.maFunctionData.empty())
+ {
+ const OUString aParenthesesReplacement( cParenthesesReplacement);
+ const ScFunctionList* pFuncList = GetStarCalcFunctionList();
+ const sal_uInt32 nListCount = pFuncList->GetCount();
+ const CharClass* pCharClass = (SC_MOD()->GetFormulaOptions().GetUseEnglishFuncName()
+ ? ScCompiler::GetCharClassEnglish()
+ : ScCompiler::GetCharClassLocalized());
+ for (sal_uInt32 i=0; i < nListCount; ++i)
+ {
+ const ScFuncDesc* pDesc = pFuncList->GetFunction( i );
+ if ( pDesc->mxFuncName )
+ {
+ OUString aFuncName(pCharClass->uppercase(*(pDesc->mxFuncName)));
+ // fdo#75264 fill maFormulaChar with all characters used in formula names
+ for (sal_Int32 j = 0; j < aFuncName.getLength(); j++)
+ maInputHandlerFunctionNames.maFunctionChar.insert(aFuncName[j]);
+ maInputHandlerFunctionNames.maFunctionData.insert(
+ ScTypedStrData(*(pDesc->mxFuncName) + aParenthesesReplacement, 0.0, 0.0,
+ ScTypedStrData::Standard));
+ pDesc->initArgumentInfo();
+ OUString aEntry = pDesc->getSignature();
+ maInputHandlerFunctionNames.maFunctionDataPara.insert(
+ ScTypedStrData(aEntry, 0.0, 0.0, ScTypedStrData::Standard));
+ }
+ }
+ }
+ return maInputHandlerFunctionNames;
}
ScUnitConverter* ScGlobal::GetUnitConverter()
diff --git a/sc/source/ui/app/inputhdl.cxx b/sc/source/ui/app/inputhdl.cxx
index 8f095d4ecaa7..a8dc8a5d7a76 100644
--- a/sc/source/ui/app/inputhdl.cxx
+++ b/sc/source/ui/app/inputhdl.cxx
@@ -101,11 +101,6 @@ using namespace formula;
namespace {
-// Formula data replacement character for a pair of parentheses at end of
-// function name, to force sorting parentheses before all other characters.
-// Collation may treat parentheses differently.
-const sal_Unicode cParenthesesReplacement = 0x0001;
-
ScTypedCaseStrSet::const_iterator findText(
const ScTypedCaseStrSet& rDataSet, ScTypedCaseStrSet::const_iterator const & itPos,
const OUString& rStart, OUString& rResult, bool bBack)
@@ -1023,38 +1018,10 @@ void ScInputHandler::GetFormulaData()
const OUString aParenthesesReplacement( cParenthesesReplacement);
const ScFunctionList* pFuncList = ScGlobal::GetStarCalcFunctionList();
const sal_uInt32 nListCount = pFuncList->GetCount();
- if (maFunctionNames.mnListCount != nListCount
- || maFunctionNames.mbEnglishFunctionNames != pFuncList->IsEnglishFunctionNames())
- {
- if (maFunctionNames.mnListCount)
- maFunctionNames = FunctionNames();
- maFunctionNames.mnListCount = nListCount;
- maFunctionNames.mbEnglishFunctionNames = pFuncList->IsEnglishFunctionNames();
- const CharClass* pCharClass = (maFunctionNames.mbEnglishFunctionNames
- ? ScCompiler::GetCharClassEnglish()
- : ScCompiler::GetCharClassLocalized());
- for (sal_uInt32 i=0; i < nListCount; ++i)
- {
- const ScFuncDesc* pDesc = pFuncList->GetFunction( i );
- if ( pDesc->mxFuncName )
- {
- OUString aFuncName(pCharClass->uppercase(*(pDesc->mxFuncName)));
- // fdo#75264 fill maFormulaChar with all characters used in formula names
- for (sal_Int32 j = 0; j < aFuncName.getLength(); j++)
- maFunctionNames.maFunctionChar.insert(aFuncName[j]);
- maFunctionNames.maFunctionData.insert(
- ScTypedStrData(*(pDesc->mxFuncName) + aParenthesesReplacement, 0.0, 0.0,
- ScTypedStrData::Standard));
- pDesc->initArgumentInfo();
- OUString aEntry = pDesc->getSignature();
- maFunctionNames.maFunctionDataPara.insert(ScTypedStrData(aEntry, 0.0, 0.0, ScTypedStrData::Standard));
- }
- }
- }
-
- *pFormulaData = maFunctionNames.maFunctionData;
- *pFormulaDataPara = maFunctionNames.maFunctionDataPara;
- maFormulaChar = maFunctionNames.maFunctionChar;
+ const InputHandlerFunctionNames& rFunctionNames = ScGlobal::GetInputHandlerFunctionNames();
+ *pFormulaData = rFunctionNames.maFunctionData;
+ *pFormulaDataPara = rFunctionNames.maFunctionDataPara;
+ maFormulaChar = rFunctionNames.maFunctionChar;
// Increase suggestion priority of MRU formulas
const ScAppOptions& rOpt = SC_MOD()->GetAppOptions();
diff --git a/sc/source/ui/inc/inputhdl.hxx b/sc/source/ui/inc/inputhdl.hxx
index ba0d9f81a42e..067798b7cd8b 100644
--- a/sc/source/ui/inc/inputhdl.hxx
+++ b/sc/source/ui/inc/inputhdl.hxx
@@ -63,15 +63,6 @@ private:
EditView* pTableView; // associated active EditView
EditView* pTopView; // EditView in the input row
- struct FunctionNames
- {
- ScTypedCaseStrSet maFunctionData;
- ScTypedCaseStrSet maFunctionDataPara;
- std::set<sal_Unicode> maFunctionChar;
- sal_uInt32 mnListCount = 0;
- bool mbEnglishFunctionNames = false;
- } maFunctionNames;
-
std::unique_ptr<ScTypedCaseStrSet> pColumnData;
std::unique_ptr<ScTypedCaseStrSet> pFormulaData;
std::unique_ptr<ScTypedCaseStrSet> pFormulaDataPara;