summaryrefslogtreecommitdiff
path: root/formula
diff options
context:
space:
mode:
authorEike Rathke <erack@redhat.com>2016-01-08 22:08:40 +0100
committerEike Rathke <erack@redhat.com>2016-01-09 13:33:31 +0100
commit8aee44c94fd2abdb7f1566ad237da4bfdfc011fa (patch)
tree48e961ed2c547afcee02012c7621ecf8325cfa8b /formula
parent077cc9fbaa29d1440f930c3ae4be86db73ee30a8 (diff)
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
Diffstat (limited to 'formula')
-rw-r--r--formula/source/ui/dlg/formula.cxx13
-rw-r--r--formula/source/ui/dlg/funcpage.cxx9
2 files changed, 18 insertions, 4 deletions
diff --git a/formula/source/ui/dlg/formula.cxx b/formula/source/ui/dlg/formula.cxx
index 0d0a6462ea0c..1cf839d12eb3 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 42a2b351a81d..7b83298fd658 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()