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 <caol...@redhat.com> AuthorDate: Wed Mar 13 13:20:57 2019 +0000 Commit: Caolán McNamara <caol...@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 <caol...@redhat.com> Tested-by: Caolán McNamara <caol...@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))); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits