Kaydet (Commit) 07ffbfa4 authored tarafından Caolán McNamara's avatar Caolán McNamara

make selected text/id usable in tree mode

Change-Id: I1b6ffdab5e1ba4a667957d321762bb9250068fe7
Reviewed-on: https://gerrit.libreoffice.org/69178Reviewed-by: 's avatarCaolán McNamara <caolanm@redhat.com>
Tested-by: 's avatarCaolán McNamara <caolanm@redhat.com>
üst 35f5c97b
......@@ -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
......
......@@ -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)));
......
......@@ -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)));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment