[Libreoffice-commits] core.git: 3 commits - formula/source include/formula reportdesign/source sc/source
Eike Rathke
erack at redhat.com
Mon Jul 10 19:15:58 UTC 2017
formula/source/ui/dlg/formula.cxx | 17 ++++++++++-------
include/formula/FormulaCompiler.hxx | 10 +++++-----
include/formula/IFunctionDescription.hxx | 3 +++
reportdesign/source/ui/dlg/Formula.cxx | 6 ++++++
reportdesign/source/ui/inc/Formula.hxx | 1 +
sc/source/ui/formdlg/formula.cxx | 7 +++++++
sc/source/ui/inc/formula.hxx | 6 ++++--
7 files changed, 36 insertions(+), 14 deletions(-)
New commits:
commit e8fcb1fbd365b7c6104c7941abee07a612ba7813
Author: Eike Rathke <erack at redhat.com>
Date: Mon Jul 10 20:04:08 2017 +0200
Make GetForceArrayParameter() public
Change-Id: I3a82c43e80fffb4bf37bb2f7a3f5b3b26f1baf98
diff --git a/include/formula/FormulaCompiler.hxx b/include/formula/FormulaCompiler.hxx
index 31a3cf5e5ee4..45166193487c 100644
--- a/include/formula/FormulaCompiler.hxx
+++ b/include/formula/FormulaCompiler.hxx
@@ -259,6 +259,11 @@ public:
*/
bool NeedsTableRefTransformation() const;
+ /** If a parameter nParam (0-based) is to be forced to array for OpCode
+ eOp, i.e. classified as ParamClass::ForceArray or
+ ParamClass::ReferenceOrForceArray type. */
+ virtual formula::ParamClass GetForceArrayParameter( const FormulaToken* pToken, sal_uInt16 nParam ) const;
+
static void UpdateSeparatorsNative( const OUString& rSep, const OUString& rArrayColSep, const OUString& rArrayRowSep );
static void ResetNativeSymbols();
static void SetNativeSymbols( const OpCodeMapPtr& xMap );
@@ -295,11 +300,6 @@ protected:
virtual void CreateStringFromIndex( OUStringBuffer& rBuffer, const FormulaToken* pToken ) const;
virtual void LocalizeString( OUString& rName ) const; // modify rName - input: exact name
- /** If a parameter nParam (0-based) is to be forced to array for OpCode
- eOp, i.e. classified as ParamClass::ForceArray or
- ParamClass::ReferenceOrForceArray type. */
- virtual formula::ParamClass GetForceArrayParameter( const FormulaToken* pToken, sal_uInt16 nParam ) const;
-
void AppendErrorConstant( OUStringBuffer& rBuffer, FormulaError nError ) const;
bool GetToken();
commit 741f61d0ca70069e875f6f57bf08d9aa282c0676
Author: Eike Rathke <erack at redhat.com>
Date: Mon Jul 10 18:33:22 2017 +0200
Introduce IFormulaEditorHelper::getCompiler()
Implemented at rptui::FormulaDialog as nullptr and at ScFormulaDlg as ScCompiler*
Change-Id: I0edaca56f5d9e3505ed766d43bc9ee4af80f03ff
diff --git a/include/formula/IFunctionDescription.hxx b/include/formula/IFunctionDescription.hxx
index 40820ebbe040..3a310d704563 100644
--- a/include/formula/IFunctionDescription.hxx
+++ b/include/formula/IFunctionDescription.hxx
@@ -42,6 +42,7 @@ namespace formula
class IFunctionDescription;
class FormEditData;
class FormulaTokenArray;
+ class FormulaCompiler;
class SAL_NO_VTABLE IFunctionManager
{
@@ -133,6 +134,8 @@ namespace formula
virtual FormEditData* getFormEditData() const = 0;
virtual bool calculateValue(const OUString& _sExpression, OUString& _rResult, bool bMatrixFormula) = 0;
+ virtual std::shared_ptr<FormulaCompiler> getCompiler() const = 0;
+
virtual void switchBack() = 0;
virtual void clear() = 0;
diff --git a/reportdesign/source/ui/dlg/Formula.cxx b/reportdesign/source/ui/dlg/Formula.cxx
index 480f017e7ac1..826ad3253ca6 100644
--- a/reportdesign/source/ui/dlg/Formula.cxx
+++ b/reportdesign/source/ui/dlg/Formula.cxx
@@ -112,6 +112,12 @@ bool FormulaDialog::calculateValue( const OUString& rStrExp, OUString& rStrResul
rStrResult = rStrExp;
return false;
}
+
+std::shared_ptr<formula::FormulaCompiler> FormulaDialog::getCompiler() const
+{
+ return nullptr;
+}
+
void FormulaDialog::doClose(bool _bOk)
{
EndDialog(_bOk ? RET_OK : RET_CANCEL);
diff --git a/reportdesign/source/ui/inc/Formula.hxx b/reportdesign/source/ui/inc/Formula.hxx
index 77153a0db40d..ceba75141964 100644
--- a/reportdesign/source/ui/inc/Formula.hxx
+++ b/reportdesign/source/ui/inc/Formula.hxx
@@ -74,6 +74,7 @@ public:
virtual void notifyChange() override;
virtual void fill() override;
virtual bool calculateValue(const OUString& _sExpression, OUString& _rResult, bool bMatrixFormula) override;
+ virtual std::shared_ptr<formula::FormulaCompiler> getCompiler() const;
virtual void doClose(bool _bOk) override;
virtual void insertEntryToLRUList(const formula::IFunctionDescription* pDesc) override;
virtual void showReference(const OUString& _sFormula) override;
diff --git a/sc/source/ui/formdlg/formula.cxx b/sc/source/ui/formdlg/formula.cxx
index ac8b3369fe4a..547ee391919c 100644
--- a/sc/source/ui/formdlg/formula.cxx
+++ b/sc/source/ui/formdlg/formula.cxx
@@ -373,6 +373,13 @@ bool ScFormulaDlg::calculateValue( const OUString& rStrExp, OUString& rStrResult
return true;
}
+std::shared_ptr<formula::FormulaCompiler> ScFormulaDlg::getCompiler() const
+{
+ if (!m_xCompiler)
+ m_xCompiler.reset( new ScCompiler( m_pDoc, m_CursorPos, m_pDoc->GetGrammar()));
+ return m_xCompiler;
+}
+
// virtual methods of ScAnyRefDlg:
void ScFormulaDlg::RefInputStart( formula::RefEdit* pEdit, formula::RefButton* pButton )
{
diff --git a/sc/source/ui/inc/formula.hxx b/sc/source/ui/inc/formula.hxx
index 05a0bf99c422..71cdd4246c19 100644
--- a/sc/source/ui/inc/formula.hxx
+++ b/sc/source/ui/inc/formula.hxx
@@ -47,8 +47,9 @@ class ScFormulaDlg : public formula::FormulaDlg,
css::uno::Reference< css::sheet::XFormulaParser> m_xParser;
css::uno::Reference< css::sheet::XFormulaOpCodeMapper> m_xOpCodeMapper;
- ScDocument* m_pDoc;
- ScAddress m_CursorPos;
+ ScDocument* m_pDoc;
+ ScAddress m_CursorPos;
+ mutable std::shared_ptr<ScCompiler> m_xCompiler;
public:
ScFormulaDlg( SfxBindings* pB, SfxChildWindow* pCW,
@@ -60,6 +61,7 @@ public:
virtual void notifyChange() override;
virtual void fill() override;
virtual bool calculateValue(const OUString& _sExpression, OUString& _rResult, bool bMatrixFormula) override;
+ virtual std::shared_ptr<formula::FormulaCompiler> getCompiler() const;
virtual void doClose(bool _bOk) override;
virtual void insertEntryToLRUList(const formula::IFunctionDescription* pDesc) override;
virtual void showReference(const OUString& _sFormula) override;
commit f6574be0e375e215e6f21830b9e09d77d01b5097
Author: Eike Rathke <erack at redhat.com>
Date: Mon Jul 10 17:05:58 2017 +0200
FormulaDlg_Impl::MakeTree: pass down current function/operator token
In preparation of better argument evaluation.
Change-Id: I364fe03c58a975ae95f070112e11a9eec9505f3d
diff --git a/formula/source/ui/dlg/formula.cxx b/formula/source/ui/dlg/formula.cxx
index 890125065c71..8a188ceefc0e 100644
--- a/formula/source/ui/dlg/formula.cxx
+++ b/formula/source/ui/dlg/formula.cxx
@@ -86,7 +86,8 @@ public:
sal_Int32 GetFunctionPos(sal_Int32 nPos);
void ClearAllParas();
- void MakeTree( StructPage* _pTree, SvTreeListEntry* pParent, const FormulaToken* _pToken, long Count );
+ void MakeTree( StructPage* _pTree, SvTreeListEntry* pParent, const FormulaToken* pFuncToken,
+ const FormulaToken* _pToken, long Count );
void fillTree(StructPage* _pTree);
void UpdateTokenArray( const OUString& rStrExp);
OUString RepairFormula(const OUString& aFormula);
@@ -621,7 +622,8 @@ bool FormulaDlg_Impl::CalcStruct( const OUString& rStrExp, bool bForceRecalcStru
}
-void FormulaDlg_Impl::MakeTree( StructPage* _pTree, SvTreeListEntry* pParent, const FormulaToken* _pToken, long Count )
+void FormulaDlg_Impl::MakeTree( StructPage* _pTree, SvTreeListEntry* pParent, const FormulaToken* pFuncToken,
+ const FormulaToken* _pToken, long Count )
{
if ( _pToken != nullptr && Count > 0 )
{
@@ -672,7 +674,7 @@ void FormulaDlg_Impl::MakeTree( StructPage* _pTree, SvTreeListEntry* pParent, co
}
}
- MakeTree( _pTree, pEntry, m_pTokenArrayIterator->PrevRPN(), nParas);
+ MakeTree( _pTree, pEntry, _pToken, m_pTokenArrayIterator->PrevRPN(), nParas);
if (bCalcSubformula)
{
@@ -698,8 +700,8 @@ void FormulaDlg_Impl::MakeTree( StructPage* _pTree, SvTreeListEntry* pParent, co
}
--Count;
- m_pTokenArrayIterator->NextRPN();
- MakeTree( _pTree, pParent, m_pTokenArrayIterator->PrevRPN(), Count);
+ m_pTokenArrayIterator->NextRPN(); /* TODO: what's this to be? ThisRPN()? */
+ MakeTree( _pTree, pParent, _pToken, m_pTokenArrayIterator->PrevRPN(), Count);
}
else
{
@@ -714,6 +716,7 @@ void FormulaDlg_Impl::MakeTree( StructPage* _pTree, SvTreeListEntry* pParent, co
/* TODO: this should depend on parameter classification, if
* a scalar value is expected matrix should not be forced.
* */
+ (void)pFuncToken;
bool bForceMatrix = (!m_pBtnMatrix->IsChecked() &&
(_pToken->GetType() == svDoubleRef || _pToken->GetType() == svExternalDoubleRef));
OUString aCellResult;
@@ -728,7 +731,7 @@ void FormulaDlg_Impl::MakeTree( StructPage* _pTree, SvTreeListEntry* pParent, co
_pTree->InsertEntry( aResult, pParent, STRUCT_END, 0, _pToken);
}
--Count;
- MakeTree( _pTree, pParent, m_pTokenArrayIterator->PrevRPN(), Count);
+ MakeTree( _pTree, pParent, _pToken, m_pTokenArrayIterator->PrevRPN(), Count);
}
}
catch (const uno::Exception&)
@@ -745,7 +748,7 @@ void FormulaDlg_Impl::fillTree(StructPage* _pTree)
if ( pToken != nullptr)
{
- MakeTree( _pTree, nullptr, pToken, 1);
+ MakeTree( _pTree, nullptr, nullptr, pToken, 1);
bMakingTree = false;
}
}
More information about the Libreoffice-commits
mailing list