From 2ccad40a1632c51e5d82459213df818cb2316fb8 Mon Sep 17 00:00:00 2001 From: Sergey Bugaev Date: Wed, 22 Jan 2020 18:07:23 +0300 Subject: LibGUI: Add GListView::index_at_event_position() And port GListView::mousedown_event() to it. --- Libraries/LibGUI/GListView.cpp | 26 ++++++++++++++++++-------- Libraries/LibGUI/GListView.h | 3 ++- 2 files changed, 20 insertions(+), 9 deletions(-) (limited to 'Libraries') diff --git a/Libraries/LibGUI/GListView.cpp b/Libraries/LibGUI/GListView.cpp index b65d2780d3..c6dae846c2 100644 --- a/Libraries/LibGUI/GListView.cpp +++ b/Libraries/LibGUI/GListView.cpp @@ -84,7 +84,20 @@ Rect GListView::content_rect(const GModelIndex& index) const return content_rect(index.row()); } -Point GListView::adjusted_position(const Point& position) +GModelIndex GListView::index_at_event_position(const Point& point) const +{ + ASSERT(model()); + + auto adjusted_position = this->adjusted_position(point); + for (int row = 0, row_count = model()->row_count(); row < row_count; ++row) { + if (!content_rect(row).contains(adjusted_position)) + continue; + return model()->index(row, m_model_column); + } + return {}; +} + +Point GListView::adjusted_position(const Point& position) const { return position.translated(horizontal_scrollbar().value() - frame_thickness(), vertical_scrollbar().value() - frame_thickness()); } @@ -97,18 +110,15 @@ void GListView::mousedown_event(GMouseEvent& event) if (event.button() != GMouseButton::Left) return; - auto adjusted_position = this->adjusted_position(event.position()); - for (int row = 0, row_count = model()->row_count(); row < row_count; ++row) { - if (!content_rect(row).contains(adjusted_position)) - continue; - auto index = model()->index(row, m_model_column); + auto index = index_at_event_position(event.position()); + if (index.is_valid()) { if (event.modifiers() & Mod_Ctrl) selection().toggle(index); else selection().set(index); - return; + } else { + selection().clear(); } - selection().clear(); } void GListView::paint_event(GPaintEvent& event) diff --git a/Libraries/LibGUI/GListView.h b/Libraries/LibGUI/GListView.h index ac2a0f983d..ff5a3d79fe 100644 --- a/Libraries/LibGUI/GListView.h +++ b/Libraries/LibGUI/GListView.h @@ -49,8 +49,9 @@ public: void scroll_into_view(const GModelIndex&, Orientation); - Point adjusted_position(const Point&); + Point adjusted_position(const Point&) const; + GModelIndex index_at_event_position(const Point&) const; virtual Rect content_rect(const GModelIndex&) const override; int model_column() const { return m_model_column; } -- cgit v1.2.3