[Libreoffice-commits] core.git: Branch 'libreoffice-5-1' - formula/source include/formula

Eike Rathke erack at redhat.com
Fri Jan 22 19:17:56 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 b3a772ec24d287291eaaa8f0c7e3efff07874e94
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/21292
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Markus Mohrhard <markus.mohrhard at googlemail.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