tdf#170787 Add weld::TreeView::get_cell_area(const weld::TreeIter&, const int)
Will be used in upcoming commit Change-Id: I4437f1575b057be76e8faba774666794a7830c35 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/199501 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
This commit is contained in:
committed by
Noel Grandin
parent
bf143da6b4
commit
b1654a57b5
@@ -525,6 +525,8 @@ public:
|
||||
= 0;
|
||||
virtual void unset_drag_dest_row() = 0;
|
||||
virtual tools::Rectangle get_row_area(const weld::TreeIter& rIter) const = 0;
|
||||
virtual tools::Rectangle get_cell_area(const weld::TreeIter& rIter,
|
||||
const int nColumn) const = 0;
|
||||
// for dragging and dropping between TreeViews, return the active source
|
||||
virtual TreeView* get_drag_source() const = 0;
|
||||
|
||||
|
||||
@@ -154,6 +154,8 @@ public:
|
||||
bool bAutoScroll = true) override;
|
||||
virtual void unset_drag_dest_row() override;
|
||||
virtual tools::Rectangle get_row_area(const weld::TreeIter& rIter) const override;
|
||||
virtual tools::Rectangle get_cell_area(const weld::TreeIter& rIter,
|
||||
const int nColumn) const override;
|
||||
virtual weld::TreeView* get_drag_source() const override;
|
||||
|
||||
using QtInstanceWidget::set_sensitive;
|
||||
|
||||
@@ -1813,6 +1813,9 @@ public:
|
||||
|
||||
virtual tools::Rectangle get_row_area(const weld::TreeIter& rIter) const override;
|
||||
|
||||
virtual tools::Rectangle get_cell_area(const weld::TreeIter& rIter,
|
||||
const int nColumn) const override;
|
||||
|
||||
virtual TreeView* get_drag_source() const override;
|
||||
|
||||
virtual int vadjustment_get_value() const override;
|
||||
|
||||
@@ -836,6 +836,20 @@ tools::Rectangle QtInstanceTreeView::get_row_area(const weld::TreeIter& rIter) c
|
||||
return aRowArea;
|
||||
}
|
||||
|
||||
tools::Rectangle QtInstanceTreeView::get_cell_area(const weld::TreeIter& rIter,
|
||||
const int nColumn) const
|
||||
{
|
||||
SolarMutexGuard g;
|
||||
|
||||
tools::Rectangle aCellArea;
|
||||
GetQtInstance().RunInMainThread([&] {
|
||||
const QRect aCellRect = m_pTreeView->visualRect(modelIndex(rIter, nColumn));
|
||||
aCellArea = toRectangle(aCellRect);
|
||||
});
|
||||
|
||||
return aCellArea;
|
||||
}
|
||||
|
||||
weld::TreeView* QtInstanceTreeView::get_drag_source() const
|
||||
{
|
||||
assert(false && "Not implemented yet");
|
||||
|
||||
@@ -4801,6 +4801,24 @@ tools::Rectangle SalInstanceTreeView::get_row_area(const weld::TreeIter& rIter)
|
||||
return m_xTreeView->GetBoundingRect(static_cast<const SalInstanceTreeIter&>(rIter).iter);
|
||||
}
|
||||
|
||||
tools::Rectangle SalInstanceTreeView::get_cell_area(const weld::TreeIter& rIter,
|
||||
const int nColumn) const
|
||||
{
|
||||
if (nColumn < 0)
|
||||
return {}; // Ignore expander column
|
||||
|
||||
int column = to_internal_model(nColumn);
|
||||
auto rect = get_row_area(rIter);
|
||||
rect.SetLeft(column == 1
|
||||
? 0
|
||||
: m_xTreeView->GetLogicTab(
|
||||
column)); // GetLogicTab(1) gives position of internal expander bitmap
|
||||
if (o3tl::make_unsigned(nColumn) < m_xTreeView->GetEntry(0)->ItemCount() - 1)
|
||||
rect.SetRight(m_xTreeView->GetLogicTab(column + 1));
|
||||
|
||||
return rect;
|
||||
}
|
||||
|
||||
weld::TreeView* SalInstanceTreeView::get_drag_source() const { return g_DragSource; }
|
||||
|
||||
int SalInstanceTreeView::vadjustment_get_value() const
|
||||
|
||||
@@ -16004,6 +16004,23 @@ public:
|
||||
return aRet;
|
||||
}
|
||||
|
||||
virtual tools::Rectangle get_cell_area(const weld::TreeIter& rIter,
|
||||
const int nColumn) const override
|
||||
{
|
||||
const GtkInstanceTreeIter& rGtkIter = static_cast<const GtkInstanceTreeIter&>(rIter);
|
||||
GtkTreePath* pPath = gtk_tree_model_get_path(m_pTreeModel, const_cast<GtkTreeIter*>(&rGtkIter.iter));
|
||||
GtkTreeViewColumn* pColumn = GTK_TREE_VIEW_COLUMN(g_list_nth_data(m_pColumns, nColumn));
|
||||
assert(pColumn && "wrong count");
|
||||
|
||||
// Note: We do not check cell renderers inside the column because it appears to be difficult to find their focus area
|
||||
GdkRectangle aRect;
|
||||
gtk_tree_view_get_cell_area(m_pTreeView, pPath, pColumn, &aRect);
|
||||
tools::Rectangle aRet(aRect.x, aRect.y, aRect.x + aRect.width, aRect.y + aRect.height);
|
||||
|
||||
gtk_tree_path_free(pPath);
|
||||
return aRet;
|
||||
}
|
||||
|
||||
virtual void start_editing(const weld::TreeIter& rIter) override
|
||||
{
|
||||
const GtkInstanceTreeIter& rGtkIter = static_cast<const GtkInstanceTreeIter&>(rIter);
|
||||
|
||||
Reference in New Issue
Block a user