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.
This commit is contained in:
networkException 2022-07-24 00:06:27 +02:00 committed by Linus Groh
parent 30d68d71b4
commit 2d681279d4
Notes: sideshowbarker 2024-07-17 08:36:35 +09:00
2 changed files with 16 additions and 0 deletions

View File

@ -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);

View File

@ -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;