[Libreoffice-commits] core.git: 3 commits - formula/source include/formula reportdesign/source sc/inc sc/source
Eike Rathke
erack at redhat.com
Sat Jan 9 04:34:13 PST 2016
formula/source/ui/dlg/FormulaHelper.cxx | 1 +
formula/source/ui/dlg/formula.cxx | 13 +++++++++++--
formula/source/ui/dlg/funcpage.cxx | 14 ++++++++++----
include/formula/IFunctionDescription.hxx | 1 +
include/formula/formdata.hxx | 8 ++++----
reportdesign/source/ui/inc/FunctionHelper.hxx | 1 +
reportdesign/source/ui/misc/FunctionHelper.cxx | 5 +++++
sc/inc/funcdesc.hxx | 8 ++++++++
sc/source/core/data/funcdesc.cxx | 15 +++++++++++++--
sc/source/ui/src/scfuncs.src | 16 +++++++++++-----
10 files changed, 65 insertions(+), 17 deletions(-)
New commits:
commit f6f73d2e40712dadf69cd73a34d006988669978c
Author: Eike Rathke <erack at redhat.com>
Date: Fri Jan 8 23:12:32 2016 +0100
Function Wizard: exclude functions with hidden flag from lists
Change-Id: Ia209bb44cef5969e5c9cd360aa5725708d6bdec5
diff --git a/formula/source/ui/dlg/funcpage.cxx b/formula/source/ui/dlg/funcpage.cxx
index 7b83298f..d629ca3 100644
--- a/formula/source/ui/dlg/funcpage.cxx
+++ b/formula/source/ui/dlg/funcpage.cxx
@@ -108,8 +108,9 @@ void FuncPage::impl_addFunctions(const IFunctionCategory* _pCategory)
for(sal_uInt32 i = 0 ; i < nCount; ++i)
{
TFunctionDesc pDesc(_pCategory->getFunction(i));
- m_pLbFunction->SetEntryData(
- m_pLbFunction->InsertEntry(pDesc->getFunctionName() ),const_cast<IFunctionDescription *>(pDesc) );
+ if (!pDesc->isHidden())
+ m_pLbFunction->SetEntryData(
+ m_pLbFunction->InsertEntry(pDesc->getFunctionName() ),const_cast<IFunctionDescription *>(pDesc) );
}
}
commit 8aee44c94fd2abdb7f1566ad237da4bfdfc011fa
Author: Eike Rathke <erack at redhat.com>
Date: Fri Jan 8 22:08:40 2016 +0100
Function Wizard: don't overwrite an unlisted function
* in a spreadsheet cell enter =LOG(foobar(SIN(1)))
* invoke Function Wizard on that cell (Ctrl+F2)
LOG(foobar(SIN(1))) is marked in Formula edit field
* activate Functions page
LOG(foobar(SIN(1))) is marked in Formula edit field
Function LOG is selected
* click Next button
foobar(SIN(1)) is marked in Formula edit field
Function ABS is selected
* click Next button
foobar(SIN(1)) is overwritten with ABS( )
* only Cancel solves the problem
foobar() could be any user defined or macro function that have no
function description in the Formula Wizard.
Change-Id: I1cb69a9e38c0b8f251d783bd0f67b4b24ade50d0
diff --git a/formula/source/ui/dlg/formula.cxx b/formula/source/ui/dlg/formula.cxx
index 0d0a646..1cf839d 100644
--- a/formula/source/ui/dlg/formula.cxx
+++ b/formula/source/ui/dlg/formula.cxx
@@ -1041,7 +1041,16 @@ IMPL_LINK_TYPED( FormulaDlg_Impl, BtnHdl, Button*, pBtn, void )
}
else if ( pBtn == m_pBtnForward )
{
- const IFunctionDescription* pDesc =pFuncPage->GetFuncDesc( pFuncPage->GetFunction() );
+ const IFunctionDescription* pDesc;
+ sal_Int32 nSelFunc = pFuncPage->GetFunction();
+ if (nSelFunc != LISTBOX_ENTRY_NOTFOUND)
+ pDesc = pFuncPage->GetFuncDesc( nSelFunc );
+ else
+ {
+ // Do not overwrite the selected formula expression, just edit the
+ // unlisted function.
+ pFuncDesc = pDesc = nullptr;
+ }
if(pDesc==pFuncDesc || !pFuncPage->IsVisible())
EditNextFunc( true );
@@ -1963,7 +1972,7 @@ void FormEditData::Reset()
nMode = 0;
nFStart = 0;
nCatSel = 1; //! oder 0 (zuletzt benutzte)
- nFuncSel = 0;
+ nFuncSel = LISTBOX_ENTRY_NOTFOUND;
nOffset = 0;
nEdFocus = 0;
bMatrix = false;
diff --git a/formula/source/ui/dlg/funcpage.cxx b/formula/source/ui/dlg/funcpage.cxx
index 42a2b35..7b83298f 100644
--- a/formula/source/ui/dlg/funcpage.cxx
+++ b/formula/source/ui/dlg/funcpage.cxx
@@ -155,7 +155,9 @@ void FuncPage::UpdateFunctionList()
m_pLbFunction->SetUpdateMode( true );
- m_pLbFunction->SelectEntryPos(0);
+ // Ensure no function is selected so the Next button doesn't overwrite a
+ // function that is not in the list with an arbitrary selected one.
+ m_pLbFunction->SetNoSelection();
if(IsVisible()) SelHdl(*m_pLbFunction);
}
@@ -198,7 +200,10 @@ sal_Int32 FuncPage::GetFuncPos(const IFunctionDescription* _pDesc)
void FuncPage::SetFunction(sal_Int32 nFunc)
{
- m_pLbFunction->SelectEntryPos(nFunc);
+ if (nFunc == LISTBOX_ENTRY_NOTFOUND)
+ m_pLbFunction->SetNoSelection();
+ else
+ m_pLbFunction->SelectEntryPos(nFunc);
}
void FuncPage::SetFocus()
diff --git a/include/formula/formdata.hxx b/include/formula/formdata.hxx
index 30c0ce5..ecd3dd1 100644
--- a/include/formula/formdata.hxx
+++ b/include/formula/formdata.hxx
@@ -37,8 +37,8 @@ public:
inline sal_uInt16 GetMode() const { return nMode; }
inline sal_Int32 GetFStart() const { return nFStart; }
- inline sal_uInt16 GetCatSel() const { return nCatSel; }
- inline sal_uInt16 GetFuncSel() const { return nFuncSel; }
+ inline sal_Int32 GetCatSel() const { return nCatSel; }
+ inline sal_Int32 GetFuncSel() const { return nFuncSel; }
inline sal_uInt16 GetOffset() const { return nOffset; }
inline sal_uInt16 GetEdFocus() const { return nEdFocus; }
inline const OUString& GetUndoStr() const { return aUndoStr; }
@@ -63,8 +63,8 @@ protected:
private:
sal_uInt16 nMode; // enum ScFormulaDlgMode
sal_Int32 nFStart;
- sal_uInt16 nCatSel;
- sal_uInt16 nFuncSel;
+ sal_Int32 nCatSel;
+ sal_Int32 nFuncSel;
sal_uInt16 nOffset;
sal_uInt16 nEdFocus;
OUString aUndoStr;
commit 077cc9fbaa29d1440f930c3ae4be86db73ee30a8
Author: Eike Rathke <erack at redhat.com>
Date: Fri Jan 8 19:04:50 2016 +0100
prepare for hidden flag in function description for Function Wizard
Change-Id: Ic018ea5b962a66b6543e57d9cc1d44711e51de6e
diff --git a/formula/source/ui/dlg/FormulaHelper.cxx b/formula/source/ui/dlg/FormulaHelper.cxx
index b2ff0c4..a1f98e5 100644
--- a/formula/source/ui/dlg/FormulaHelper.cxx
+++ b/formula/source/ui/dlg/FormulaHelper.cxx
@@ -44,6 +44,7 @@ namespace formula
virtual void initArgumentInfo() const override {}
virtual OUString getSignature() const override { return OUString(); }
virtual OString getHelpId() const override { return ""; }
+ virtual bool isHidden() const override { return false; }
virtual sal_uInt32 getParameterCount() const override { return 0; }
virtual sal_uInt32 getVarArgsStart() const override { return 0; }
virtual OUString getParameterName(sal_uInt32 ) const override { return OUString(); }
diff --git a/include/formula/IFunctionDescription.hxx b/include/formula/IFunctionDescription.hxx
index bed71cd..7fb02c5 100644
--- a/include/formula/IFunctionDescription.hxx
+++ b/include/formula/IFunctionDescription.hxx
@@ -88,6 +88,7 @@ namespace formula
virtual void initArgumentInfo() const = 0;
virtual OUString getSignature() const = 0;
virtual OString getHelpId() const = 0;
+ virtual bool isHidden() const = 0;
// parameter
virtual sal_uInt32 getParameterCount() const = 0;
diff --git a/reportdesign/source/ui/inc/FunctionHelper.hxx b/reportdesign/source/ui/inc/FunctionHelper.hxx
index 2302d75..df18ed3 100644
--- a/reportdesign/source/ui/inc/FunctionHelper.hxx
+++ b/reportdesign/source/ui/inc/FunctionHelper.hxx
@@ -71,6 +71,7 @@ public:
virtual void initArgumentInfo() const override;
virtual OUString getSignature() const override ;
virtual OString getHelpId() const override ;
+ virtual bool isHidden() const override;
virtual sal_uInt32 getParameterCount() const override ;
virtual sal_uInt32 getVarArgsStart() const override;
virtual OUString getParameterName(sal_uInt32 _nPos) const override ;
diff --git a/reportdesign/source/ui/misc/FunctionHelper.cxx b/reportdesign/source/ui/misc/FunctionHelper.cxx
index a92fc49..00c3ae9 100644
--- a/reportdesign/source/ui/misc/FunctionHelper.cxx
+++ b/reportdesign/source/ui/misc/FunctionHelper.cxx
@@ -193,6 +193,11 @@ OString FunctionDescription::getHelpId() const
return OString();
}
+bool FunctionDescription::isHidden() const
+{
+ return false;
+}
+
sal_uInt32 FunctionDescription::getParameterCount() const
{
return m_aParameter.getLength();
diff --git a/sc/inc/funcdesc.hxx b/sc/inc/funcdesc.hxx
index 1c2bccd..b078644 100644
--- a/sc/inc/funcdesc.hxx
+++ b/sc/inc/funcdesc.hxx
@@ -102,6 +102,13 @@ public:
*/
virtual OString getHelpId() const override ;
+ /** Returns whether function is hidden and not offered in the Function
+ Wizard unless used in an expression.
+
+ @return flag whether function is hidden
+ */
+ virtual bool isHidden() const override;
+
/**
Returns number of arguments
@@ -216,6 +223,7 @@ public:
OString sHelpId; /**< HelpId of function */
bool bIncomplete :1; /**< Incomplete argument info (set for add-in info from configuration) */
bool bHasSuppressedArgs :1; /**< Whether there is any suppressed parameter. */
+ bool mbHidden :1; /**< Whether function is hidden */
};
/**
diff --git a/sc/source/core/data/funcdesc.cxx b/sc/source/core/data/funcdesc.cxx
index 729590b..10c070b 100644
--- a/sc/source/core/data/funcdesc.cxx
+++ b/sc/source/core/data/funcdesc.cxx
@@ -69,7 +69,8 @@ ScFuncDesc::ScFuncDesc() :
nArgCount (0),
nVarArgsStart (0),
bIncomplete (false),
- bHasSuppressedArgs(false)
+ bHasSuppressedArgs(false),
+ mbHidden (false)
{}
ScFuncDesc::~ScFuncDesc()
@@ -105,6 +106,7 @@ void ScFuncDesc::Clear()
sHelpId.clear();
bIncomplete = false;
bHasSuppressedArgs = false;
+ mbHidden = false;
}
OUString ScFuncDesc::GetParamList() const
@@ -354,6 +356,11 @@ OString ScFuncDesc::getHelpId() const
return sHelpId;
}
+bool ScFuncDesc::isHidden() const
+{
+ return mbHidden;
+}
+
sal_uInt32 ScFuncDesc::getParameterCount() const
{
return nArgCount;
@@ -799,7 +806,11 @@ sal_Unicode ScFunctionMgr::getSingleToken(const formula::IFunctionManager::EToke
ScFuncRes::ScFuncRes( ResId &aRes, ScFuncDesc* pDesc, bool & rbSuppressed )
: Resource(aRes)
{
- rbSuppressed = (bool)GetNum();
+ sal_uInt16 nFunctionFlags = GetNum();
+ // Bit 1: entirely suppressed
+ // Bit 2: hidden unless used
+ rbSuppressed = ((nFunctionFlags & 1) != 0);
+ pDesc->mbHidden = ((nFunctionFlags & 2) != 0);
pDesc->nCategory = GetNum();
pDesc->sHelpId = ReadByteStringRes();
pDesc->nArgCount = GetNum();
diff --git a/sc/source/ui/src/scfuncs.src b/sc/source/ui/src/scfuncs.src
index 122815f..632cd43 100644
--- a/sc/source/ui/src/scfuncs.src
+++ b/sc/source/ui/src/scfuncs.src
@@ -31,11 +31,17 @@
*
* ExtraData block with:
*
- * Boolean flag whether function is suppressed. Usually 0. This may be
- * used to add UI string resources before UI freeze if implementation
- * isn't ready yet without displaying them in the function wizard,
- * most recent used list and other UI elements. Also not available via
- * API then.
+ * 16-bit value:
+ *
+ * Bit 1: boolean flag whether function is suppressed. Usually 0. This
+ * may be used to add UI string resources before UI freeze if
+ * implementation isn't ready yet without displaying them in the
+ * function wizard, most recent used list and other UI elements. Also
+ * not available via API then.
+ *
+ * Bit 2: boolean flag whether function is hidden in the Function
+ * Wizard unless used in an expression.
+ *
*
* Function group (text, math, ...), one of ID_FUNCTION_GRP_...
*
More information about the Libreoffice-commits
mailing list