[Libreoffice-commits] core.git: sc/Library_sc.mk sc/source sc/uiconfig sc/UIConfig_scalc.mk svx/source

Matúš Kukan matus.kukan at gmail.com
Fri Sep 20 07:21:10 PDT 2013


 sc/Library_sc.mk                       |    1 
 sc/UIConfig_scalc.mk                   |    1 
 sc/source/ui/dialogs/searchresults.cxx |   73 +++++++++++++++++++++++++++++++++
 sc/source/ui/inc/searchresults.hxx     |   31 ++++++++++++++
 sc/source/ui/view/viewfun2.cxx         |    4 +
 sc/uiconfig/scalc/ui/searchresults.ui  |   62 ++++++++++++++++++++++++++++
 svx/source/dialog/srchdlg.cxx          |   11 +---
 7 files changed, 175 insertions(+), 8 deletions(-)

New commits:
commit 09a546ed1f4ca691ab9a81e0a0a08ec53f99a558
Author: Matúš Kukan <matus.kukan at gmail.com>
Date:   Mon Sep 9 10:19:54 2013 +0200

    fdo#39881 change Find All behaviour in Calc
    
    Allow to search in all sheets.
    Find all now creates new dialog describing all matching cells.
    
    Change-Id: I36a9bee314b620384937fff074680022397c8c5f
    Reviewed-on: https://gerrit.libreoffice.org/5886
    Reviewed-by: Markus Mohrhard <markus.mohrhard at googlemail.com>
    Tested-by: Markus Mohrhard <markus.mohrhard at googlemail.com>

diff --git a/sc/Library_sc.mk b/sc/Library_sc.mk
index b0ab893..47a67f0 100644
--- a/sc/Library_sc.mk
+++ b/sc/Library_sc.mk
@@ -378,6 +378,7 @@ $(eval $(call gb_Library_add_exception_objects,sc,\
 	$(if $(filter TRUE,$(MPL_SUBSET)),, \
 	    sc/source/ui/dbgui/pvlaydlg) \
 	sc/source/ui/dbgui/sfiltdlg \
+	sc/source/ui/dialogs/searchresults \
 	sc/source/ui/docshell/arealink \
 	sc/source/ui/docshell/autostyl \
 	sc/source/ui/docshell/dbdocfun \
diff --git a/sc/UIConfig_scalc.mk b/sc/UIConfig_scalc.mk
index 9274dd6..2945a5c 100644
--- a/sc/UIConfig_scalc.mk
+++ b/sc/UIConfig_scalc.mk
@@ -107,6 +107,7 @@ $(eval $(call gb_UIConfig_add_uifiles,modules/scalc,\
 	sc/uiconfig/scalc/ui/samplingdialog \
 	sc/uiconfig/scalc/ui/standardfilterdialog \
 	sc/uiconfig/scalc/ui/scgeneralpage \
+	sc/uiconfig/scalc/ui/searchresults \
 	sc/uiconfig/scalc/ui/selectrange \
 	sc/uiconfig/scalc/ui/selectsource \
 	sc/uiconfig/scalc/ui/sheetprintpage \
diff --git a/sc/source/ui/dialogs/searchresults.cxx b/sc/source/ui/dialogs/searchresults.cxx
new file mode 100644
index 0000000..fa89eb7
--- /dev/null
+++ b/sc/source/ui/dialogs/searchresults.cxx
@@ -0,0 +1,73 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include "searchresults.hxx"
+
+#include <svtools/simptabl.hxx>
+#include <svtools/treelistentry.hxx>
+#include "dociter.hxx"
+#include "document.hxx"
+#include "rangeutl.hxx"
+#include "tabvwsh.hxx"
+
+SearchResults::SearchResults(ScDocument *pDoc) :
+    ModelessDialog(NULL, "SearchResultsDialog", "modules/scalc/ui/searchresults.ui")
+    , mpDoc(pDoc)
+{
+    SvSimpleTableContainer *pContainer = get<SvSimpleTableContainer>("results");
+    Size aControlSize(150, 120);
+    aControlSize = pContainer->LogicToPixel(aControlSize, MAP_APPFONT);
+    pContainer->set_width_request(aControlSize.Width());
+    pContainer->set_height_request(aControlSize.Height());
+
+    mpList = new SvSimpleTable(*pContainer);
+    long nTabs[] = {3, 0, 40, 60};
+    mpList->SetTabs(&nTabs[0]);
+    mpList->InsertHeaderEntry("Sheet\tCell\tContent");
+    mpList->SetSelectHdl( LINK(this, SearchResults, ListSelectHdl) );
+}
+
+SearchResults::~SearchResults()
+{
+    delete mpList;
+}
+
+void SearchResults::Show(const ScRangeList &rMatchedRanges)
+{
+    mpList->Clear();
+    for (size_t i = 0, n = rMatchedRanges.size(); i < n; ++i)
+    {
+        ScCellIterator aIter(mpDoc, *rMatchedRanges[i]);
+        for (bool bHas = aIter.first(); bHas; bHas = aIter.next())
+        {
+            ScAddress aAddress = aIter.GetPos();
+            OUString sAddress;
+            ScRangeStringConverter::GetStringFromAddress(sAddress, aAddress,
+                    mpDoc, formula::FormulaGrammar::CONV_OOO);
+            mpList->InsertEntry(sAddress.replace('.', '\t') + "\t" + mpDoc->GetString(aAddress));
+        }
+    }
+    ModelessDialog::Show();
+}
+
+IMPL_LINK_NOARG( SearchResults, ListSelectHdl )
+{
+    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');
+    ScTabViewShell* pScViewShell = ScTabViewShell::GetActiveViewShell();
+    pScViewShell->SetTabNo(aAddress.Tab());
+    pScViewShell->SetCursor(aAddress.Col(), aAddress.Row());
+    return 0;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/source/ui/inc/searchresults.hxx b/sc/source/ui/inc/searchresults.hxx
new file mode 100644
index 0000000..a5f01a0
--- /dev/null
+++ b/sc/source/ui/inc/searchresults.hxx
@@ -0,0 +1,31 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#ifndef SC_UI_SEARCHRESULTS_HXX
+#define SC_UI_SEARCHRESULTS_HXX
+
+#include <vcl/dialog.hxx>
+class ScDocument;
+class ScRangeList;
+class SvSimpleTable;
+
+class SearchResults : public ModelessDialog
+{
+    ScDocument *mpDoc;
+    SvSimpleTable *mpList;
+    DECL_LINK( ListSelectHdl, void * );
+public:
+    SearchResults(ScDocument *);
+    virtual ~SearchResults();
+    void Show(const ScRangeList &);
+};
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/source/ui/view/viewfun2.cxx b/sc/source/ui/view/viewfun2.cxx
index c8ba3a7..2679692 100644
--- a/sc/source/ui/view/viewfun2.cxx
+++ b/sc/source/ui/view/viewfun2.cxx
@@ -79,6 +79,7 @@
 #include "tabbgcolor.hxx"
 #include "clipparam.hxx"
 #include "prnsave.hxx"
+#include "searchresults.hxx"
 #include "tokenarray.hxx"
 
 #include <boost/scoped_ptr.hpp>
@@ -1657,6 +1658,9 @@ void ScViewFunc::SearchAndReplace( const SvxSearchItem* pSearchItem,
 
             if (nCommand == SVX_SEARCHCMD_FIND_ALL || nCommand == SVX_SEARCHCMD_REPLACE_ALL)
             {
+                static SearchResults *aSearchResults = new SearchResults(pDoc);
+                aSearchResults->Show(aMatchedRanges);
+
                 rMark.ResetMark();
                 for (size_t i = 0, n = aMatchedRanges.size(); i < n; ++i)
                 {
diff --git a/sc/uiconfig/scalc/ui/searchresults.ui b/sc/uiconfig/scalc/ui/searchresults.ui
new file mode 100644
index 0000000..c39408a
--- /dev/null
+++ b/sc/uiconfig/scalc/ui/searchresults.ui
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <!-- interface-requires LibreOffice 1.0 -->
+  <!-- interface-requires gtk+ 3.0 -->
+  <object class="GtkDialog" id="SearchResultsDialog">
+    <property name="can_focus">False</property>
+    <property name="border_width">6</property>
+    <property name="title" translatable="yes">Search Results</property>
+    <property name="type_hint">dialog</property>
+    <child internal-child="vbox">
+      <object class="GtkBox" id="dialog-vbox1">
+        <property name="can_focus">False</property>
+        <property name="orientation">vertical</property>
+        <property name="spacing">12</property>
+        <child internal-child="action_area">
+          <object class="GtkButtonBox" id="dialog-action_area1">
+            <property name="can_focus">False</property>
+            <property name="layout_style">end</property>
+            <child>
+              <object class="GtkButton" id="close">
+                <property name="label">gtk-close</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="can_default">True</property>
+                <property name="has_default">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="pack_type">end</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="svtlo-SvSimpleTableContainer" id="results">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="hexpand">True</property>
+            <property name="vexpand">True</property>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+    <action-widgets>
+      <action-widget response="0">close</action-widget>
+    </action-widgets>
+  </object>
+</interface>
diff --git a/svx/source/dialog/srchdlg.cxx b/svx/source/dialog/srchdlg.cxx
index d9535b1..d07b773 100644
--- a/svx/source/dialog/srchdlg.cxx
+++ b/svx/source/dialog/srchdlg.cxx
@@ -1189,13 +1189,8 @@ IMPL_LINK( SvxSearchDialog, FlagHdl_Impl, Control *, pCtrl )
 
     if (m_pAllSheetsCB == pCtrl)
     {
-        if ( m_pAllSheetsCB->IsChecked() )
-            m_pSearchAllBtn->Disable();
-        else
-        {
-            bSet = sal_True;
-            ModifyHdl_Impl(m_pSearchLB);
-        }
+        bSet = sal_True;
+        ModifyHdl_Impl(m_pSearchLB);
     }
 
     if (m_pJapOptionsCB == pCtrl)
@@ -1725,7 +1720,7 @@ void SvxSearchDialog::EnableControl_Impl( Control* pCtrl )
     if ( m_pSearchAllBtn == pCtrl &&
          ( SEARCH_OPTIONS_SEARCH_ALL & nOptions ) != 0 )
     {
-        m_pSearchAllBtn->Enable( ( bWriter || !m_pAllSheetsCB->IsChecked() ) );
+        m_pSearchAllBtn->Enable( true );
         return;
     }
     if ( m_pReplaceBtn == pCtrl && ( SEARCH_OPTIONS_REPLACE & nOptions ) != 0 )


More information about the Libreoffice-commits mailing list