From 2d681279d4d4d7a0548a0c0c9161ffe4fd94f4a5 Mon Sep 17 00:00:00 2001 From: networkException Date: Sun, 24 Jul 2022 00:06:27 +0200 Subject: LibGUI: Properly handle range selections in ColumnsView Previously we would always select the left most column when selecting a range of rows. This patch fixes this issue by always applying a selection to the column in which the selection ends. --- Userland/Libraries/LibGUI/ColumnsView.cpp | 14 ++++++++++++++ Userland/Libraries/LibGUI/ColumnsView.h | 2 ++ 2 files changed, 16 insertions(+) (limited to 'Userland/Libraries') diff --git a/Userland/Libraries/LibGUI/ColumnsView.cpp b/Userland/Libraries/LibGUI/ColumnsView.cpp index afd04ca201..502dff973c 100644 --- a/Userland/Libraries/LibGUI/ColumnsView.cpp +++ b/Userland/Libraries/LibGUI/ColumnsView.cpp @@ -234,6 +234,20 @@ ModelIndex ColumnsView::index_at_event_position(Gfx::IntPoint const& a_position) return {}; } +void ColumnsView::select_range(ModelIndex const& index) +{ + auto min_row = min(selection_start_index().row(), index.row()); + auto max_row = max(selection_start_index().row(), index.row()); + auto parent = index.parent(); + + clear_selection(); + for (auto row = min_row; row <= max_row; ++row) { + auto new_index = model()->index(row, m_model_column, parent); + if (new_index.is_valid()) + toggle_selection(new_index); + } +} + void ColumnsView::mousedown_event(MouseEvent& event) { AbstractView::mousedown_event(event); diff --git a/Userland/Libraries/LibGUI/ColumnsView.h b/Userland/Libraries/LibGUI/ColumnsView.h index f0d1ffea14..0fe157e8a6 100644 --- a/Userland/Libraries/LibGUI/ColumnsView.h +++ b/Userland/Libraries/LibGUI/ColumnsView.h @@ -37,6 +37,8 @@ private: virtual void paint_event(PaintEvent&) override; virtual void mousedown_event(MouseEvent& event) override; + virtual void select_range(ModelIndex const&) override; + void move_cursor(CursorMovement, SelectionUpdate) override; virtual void select_all() override; -- cgit v1.2.3