[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