[Libreoffice-commits] core.git: Branch 'libreoffice-5-1-0' - formula/source include/formula
Eike Rathke
erack at redhat.com
Tue Jan 19 00:49:26 PST 2016
formula/source/ui/dlg/formula.cxx | 13 +++++++++++--
formula/source/ui/dlg/funcpage.cxx | 9 +++++++--
include/formula/formdata.hxx | 8 ++++----
3 files changed, 22 insertions(+), 8 deletions(-)
New commits:
commit 120349fc4f9259fefd38e9b2fc0fc50bae035f56
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
(cherry picked from commit 8aee44c94fd2abdb7f1566ad237da4bfdfc011fa)
Reviewed-on: https://gerrit.libreoffice.org/21431
Reviewed-by: Miklos Vajna <vmiklos at collabora.co.uk>
Reviewed-by: Markus Mohrhard <markus.mohrhard at googlemail.com>
Reviewed-by: David Tardon <dtardon at redhat.com>
Tested-by: David Tardon <dtardon at redhat.com>
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;
More information about the Libreoffice-commits
mailing list