[Libreoffice-commits] core.git: Branch 'libreoffice-4-2' - sc/source

Kohei Yoshida kohei.yoshida at collabora.com
Fri May 23 13:58:32 PDT 2014


 sc/source/ui/dialogs/searchresults.cxx |   40 ++++++++++++++++++++++-----------
 1 file changed, 27 insertions(+), 13 deletions(-)

New commits:
commit 860e8915ff22b610985845b88f5293629f24250a
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date:   Fri May 23 12:54:20 2014 -0400

    fdo#76824: Proper way to parse cell address strings.
    
    Be aware of the variable address convention.
    
    Change-Id: I37ca38758f055e7799cadefafda61174ea3cbf9c
    (cherry picked from commit 653e4adddfc80aeb91c1d21c18e95b3986c85c54)
    Reviewed-on: https://gerrit.libreoffice.org/9454
    Reviewed-by: Eike Rathke <erack at redhat.com>
    Tested-by: Eike Rathke <erack at redhat.com>

diff --git a/sc/source/ui/dialogs/searchresults.cxx b/sc/source/ui/dialogs/searchresults.cxx
index 1f8ee01..2de6ab6 100644
--- a/sc/source/ui/dialogs/searchresults.cxx
+++ b/sc/source/ui/dialogs/searchresults.cxx
@@ -47,16 +47,20 @@ void SearchResultsDlg::FillResults( ScDocument* pDoc, const ScRangeList &rMatche
 {
     mpList->Clear();
     mpList->SetUpdateMode(false);
+    std::vector<OUString> aTabNames = pDoc->GetAllTableNames();
+    SCTAB nTabCount = aTabNames.size();
     for (size_t i = 0, n = rMatchedRanges.size(); i < n; ++i)
     {
         ScCellIterator aIter(pDoc, *rMatchedRanges[i]);
         for (bool bHas = aIter.first(); bHas; bHas = aIter.next())
         {
-            ScAddress aAddress = aIter.GetPos();
-            OUString sAddress;
-            ScRangeStringConverter::GetStringFromAddress(sAddress, aAddress,
-                    pDoc, formula::FormulaGrammar::CONV_OOO);
-            mpList->InsertEntry(sAddress.replace('.', '\t') + "\t" + pDoc->GetString(aAddress));
+            ScAddress aPos = aIter.GetPos();
+            if (aPos.Tab() >= nTabCount)
+                // Out-of-bound sheet index.
+                continue;
+
+            OUString aPosStr = aPos.Format(SCA_ABS, NULL, pDoc->GetAddressConvention());
+            mpList->InsertEntry(aTabNames[aPos.Tab()] + "\t" + aPosStr + "\t" + pDoc->GetString(aPos));
         }
     }
     mpList->SetUpdateMode(true);
@@ -86,15 +90,25 @@ IMPL_LINK_NOARG( SearchResultsDlg, ListSelectHdl )
         return 0;
 
     SvTreeListEntry *pEntry = mpList->FirstSelected();
-    ScAddress aAddress;
-    sal_Int32 nOffset = 0;
-    OUString sAddress = mpList->GetEntryText(pEntry).replaceFirst("\t", ".");
-    ScRangeStringConverter::GetAddressFromString(aAddress, sAddress,
-            mpDoc, formula::FormulaGrammar::CONV_OOO, nOffset, '\t');
+    OUString aTabStr = mpList->GetEntryText(pEntry, 0);
+    OUString aPosStr = mpList->GetEntryText(pEntry, 1);
+
+    SCTAB nTab = -1;
+    if (!mpDoc->GetTable(aTabStr, nTab))
+        // No sheet with specified name.
+        return 0;
+
+    ScAddress aPos;
+    sal_uInt16 nRes = aPos.Parse(aPosStr, mpDoc, mpDoc->GetAddressConvention());
+    if (!(nRes & SCA_VALID))
+        // Invalid address string.
+        return 0;
+
+    // Jump to the cell.
     ScTabViewShell* pScViewShell = ScTabViewShell::GetActiveViewShell();
-    pScViewShell->SetTabNo(aAddress.Tab());
-    pScViewShell->SetCursor(aAddress.Col(), aAddress.Row());
-    pScViewShell->AlignToCursor(aAddress.Col(), aAddress.Row(), SC_FOLLOW_JUMP);
+    pScViewShell->SetTabNo(nTab);
+    pScViewShell->SetCursor(aPos.Col(), aPos.Row());
+    pScViewShell->AlignToCursor(aPos.Col(), aPos.Row(), SC_FOLLOW_JUMP);
 
     return 0;
 }


More information about the Libreoffice-commits mailing list