[Libreoffice-commits] core.git: include/vcl vcl/source vcl/unx

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Wed Mar 13 17:24:06 UTC 2019


 include/vcl/weld.hxx          |   13 ++----------
 vcl/source/app/salvtables.cxx |   19 ++++++++++++++++++
 vcl/unx/gtk3/gtk3gtkinst.cxx  |   44 ++++++++++++++++++++++++++++++++++++++++--
 3 files changed, 64 insertions(+), 12 deletions(-)

New commits:
commit 07ffbfa41c000446ec84ae3ae0d64feedf530723
Author:     Caolán McNamara <caolanm at redhat.com>
AuthorDate: Wed Mar 13 13:20:57 2019 +0000
Commit:     Caolán McNamara <caolanm at redhat.com>
CommitDate: Wed Mar 13 18:23:35 2019 +0100

    make selected text/id usable in tree mode
    
    Change-Id: I1b6ffdab5e1ba4a667957d321762bb9250068fe7
    Reviewed-on: https://gerrit.libreoffice.org/69178
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/include/vcl/weld.hxx b/include/vcl/weld.hxx
index d5006514a8c0..a3aeaf223142 100644
--- a/include/vcl/weld.hxx
+++ b/include/vcl/weld.hxx
@@ -582,6 +582,9 @@ public:
     void connect_column_clicked(const Link<int, void>& rLink) { m_aColumnClickedHdl = rLink; }
     void connect_model_changed(const Link<TreeView&, void>& rLink) { m_aModelChangedHdl = rLink; }
 
+    virtual OUString get_selected_text() const = 0;
+    virtual OUString get_selected_id() const = 0;
+
     //by index
     virtual int get_selected_index() const = 0;
     virtual void select(int pos) = 0;
@@ -607,11 +610,6 @@ public:
 
     //by text
     virtual int find_text(const OUString& rText) const = 0;
-    OUString get_selected_text() const
-    {
-        int index = get_selected_index();
-        return index != -1 ? get_text(index) : OUString();
-    }
     void select_text(const OUString& rText) { select(find_text(rText)); }
     void remove_text(const OUString& rText) { remove(find_text(rText)); }
     std::vector<OUString> get_selected_rows_text() const
@@ -627,11 +625,6 @@ public:
     //by id
     virtual OUString get_id(int pos) const = 0;
     virtual int find_id(const OUString& rId) const = 0;
-    OUString get_selected_id() const
-    {
-        int pos = get_selected_index();
-        return pos == -1 ? OUString() : get_id(pos);
-    }
     void select_id(const OUString& rId) { select(find_id(rId)); }
 
     //via iter
diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx
index 3a0625c2fc05..7c0dd9c85cef 100644
--- a/vcl/source/app/salvtables.cxx
+++ b/vcl/source/app/salvtables.cxx
@@ -2722,6 +2722,25 @@ public:
         return m_xTreeView->GetAbsPos(pEntry);
     }
 
+    virtual OUString get_selected_text() const override
+    {
+        assert(m_xTreeView->IsUpdateMode() && "don't request selection when frozen");
+        if (SvTreeListEntry* pEntry = m_xTreeView->FirstSelected())
+            return m_xTreeView->GetEntryText(pEntry);
+        return OUString();
+    }
+
+    virtual OUString get_selected_id() const override
+    {
+        assert(m_xTreeView->IsUpdateMode() && "don't request selection when frozen");
+        if (SvTreeListEntry* pEntry = m_xTreeView->FirstSelected())
+        {
+            if (const OUString* pStr = static_cast<const OUString*>(pEntry->GetUserData()))
+                return *pStr;
+        }
+        return OUString();
+    }
+
     virtual std::unique_ptr<weld::TreeIter> make_iterator(const weld::TreeIter* pOrig) const override
     {
         return std::unique_ptr<weld::TreeIter>(new SalInstanceTreeIter(static_cast<const SalInstanceTreeIter*>(pOrig)));
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx
index 9f8f474db032..49c6a64bc3f6 100644
--- a/vcl/unx/gtk3/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/gtk3gtkinst.cxx
@@ -5999,8 +5999,7 @@ public:
     {
         std::vector<int> aRows;
 
-        GtkTreeModel* pModel;
-        GList* pList = gtk_tree_selection_get_selected_rows(gtk_tree_view_get_selection(m_pTreeView), &pModel);
+        GList* pList = gtk_tree_selection_get_selected_rows(gtk_tree_view_get_selection(m_pTreeView), nullptr);
         for (GList* pItem = g_list_first(pList); pItem; pItem = g_list_next(pItem))
         {
             GtkTreePath* path = static_cast<GtkTreePath*>(pItem->data);
@@ -6195,6 +6194,47 @@ public:
         return nRet;
     }
 
+    bool get_selected_iterator(GtkTreeIter& rIter) const
+    {
+        assert(gtk_tree_view_get_model(m_pTreeView) && "don't request selection when frozen");
+        bool bRet = false;
+        GtkTreeSelection *selection = gtk_tree_view_get_selection(m_pTreeView);
+        if (gtk_tree_selection_get_mode(selection) != GTK_SELECTION_MULTIPLE)
+            bRet = gtk_tree_selection_get_selected(gtk_tree_view_get_selection(m_pTreeView), nullptr, &rIter);
+        else
+        {
+            GtkTreeModel* pModel;
+            GList* pList = gtk_tree_selection_get_selected_rows(gtk_tree_view_get_selection(m_pTreeView), &pModel);
+            for (GList* pItem = g_list_first(pList); pItem; pItem = g_list_next(pItem))
+            {
+                GtkTreePath* path = static_cast<GtkTreePath*>(pItem->data);
+                gtk_tree_model_get_iter(pModel, &rIter, path);
+                bRet = true;
+                break;
+            }
+            g_list_free_full(pList, reinterpret_cast<GDestroyNotify>(gtk_tree_path_free));
+        }
+        return bRet;
+    }
+
+    virtual OUString get_selected_text() const override
+    {
+        assert(gtk_tree_view_get_model(m_pTreeView) && "don't request selection when frozen");
+        GtkTreeIter iter;
+        if (get_selected_iterator(iter))
+            return get(iter, m_nTextCol);
+        return OUString();
+    }
+
+    virtual OUString get_selected_id() const override
+    {
+        assert(gtk_tree_view_get_model(m_pTreeView) && "don't request selection when frozen");
+        GtkTreeIter iter;
+        if (get_selected_iterator(iter))
+            return get(iter, m_nIdCol);
+        return OUString();
+    }
+
     virtual std::unique_ptr<weld::TreeIter> make_iterator(const weld::TreeIter* pOrig) const override
     {
         return std::unique_ptr<weld::TreeIter>(new GtkInstanceTreeIter(static_cast<const GtkInstanceTreeIter*>(pOrig)));


More information about the Libreoffice-commits mailing list