diff --git a/Libraries/LibGUI/AbstractTableView.cpp b/Libraries/LibGUI/AbstractTableView.cpp index eb1ce70485..094f637d01 100644 --- a/Libraries/LibGUI/AbstractTableView.cpp +++ b/Libraries/LibGUI/AbstractTableView.cpp @@ -150,7 +150,7 @@ void AbstractTableView::paint_headers(Painter& painter) bool is_key_column = model()->key_column() == column_index; Gfx::Rect cell_rect(x_offset, 0, column_width + horizontal_padding() * 2, header_height()); bool pressed = column_index == m_pressed_column_header_index && m_pressed_column_header_is_pressed; - bool hovered = column_index == m_hovered_column_header_index && model()->column_metadata(column_index).sortable == Model::ColumnMetadata::Sortable::True; + bool hovered = column_index == m_hovered_column_header_index && model()->is_column_sortable(column_index); Gfx::StylePainter::paint_button(painter, cell_rect, palette(), Gfx::ButtonStyle::Normal, pressed, hovered); String text; if (is_key_column) { @@ -372,8 +372,7 @@ void AbstractTableView::mousedown_event(MouseEvent& event) return; } auto header_rect = this->header_rect(i); - auto column_metadata = model()->column_metadata(i); - if (header_rect.contains(horizontally_adjusted_position) && column_metadata.sortable == Model::ColumnMetadata::Sortable::True) { + if (header_rect.contains(horizontally_adjusted_position) && model()->is_column_sortable(i)) { m_pressed_column_header_index = i; m_pressed_column_header_is_pressed = true; update_headers(); diff --git a/Libraries/LibGUI/FileSystemModel.cpp b/Libraries/LibGUI/FileSystemModel.cpp index 9a4aea44ba..622bf94abc 100644 --- a/Libraries/LibGUI/FileSystemModel.cpp +++ b/Libraries/LibGUI/FileSystemModel.cpp @@ -572,7 +572,7 @@ Model::ColumnMetadata FileSystemModel::column_metadata(int column) const { switch (column) { case Column::Icon: - return { 16, Model::ColumnMetadata::Sortable::False }; + return { 16 }; case Column::Name: return { 120 }; case Column::Size: diff --git a/Libraries/LibGUI/FileSystemModel.h b/Libraries/LibGUI/FileSystemModel.h index 55dec0a6bd..2a80933da2 100644 --- a/Libraries/LibGUI/FileSystemModel.h +++ b/Libraries/LibGUI/FileSystemModel.h @@ -148,6 +148,7 @@ public: virtual ModelIndex index(int row, int column = 0, const ModelIndex& parent = ModelIndex()) const override; virtual StringView drag_data_type() const override { return "text/uri-list"; } virtual bool accepts_drag(const ModelIndex&, const StringView& data_type) override; + virtual bool is_column_sortable(int column_index) const override { return column_index != Column::Icon; } static String timestamp_string(time_t timestamp) { diff --git a/Libraries/LibGUI/Model.h b/Libraries/LibGUI/Model.h index baf56aad32..0ec45006ee 100644 --- a/Libraries/LibGUI/Model.h +++ b/Libraries/LibGUI/Model.h @@ -48,11 +48,6 @@ class Model : public RefCounted { public: struct ColumnMetadata { int preferred_width { 0 }; - enum class Sortable { - False, - True, - }; - Sortable sortable { Sortable::True }; }; enum UpdateFlag { @@ -89,6 +84,8 @@ public: virtual int tree_column() const { return 0; } virtual bool accepts_drag(const ModelIndex&, const StringView& data_type); + virtual bool is_column_sortable([[maybe_unused]] int column_index) const { return true; } + bool is_valid(const ModelIndex& index) const { auto parent_index = this->parent_index(index); diff --git a/Libraries/LibGUI/SortingProxyModel.cpp b/Libraries/LibGUI/SortingProxyModel.cpp index 7a1d5fac81..27dc08f145 100644 --- a/Libraries/LibGUI/SortingProxyModel.cpp +++ b/Libraries/LibGUI/SortingProxyModel.cpp @@ -153,4 +153,9 @@ void SortingProxyModel::resort() }); } +bool SortingProxyModel::is_column_sortable(int column_index) const +{ + return target().is_column_sortable(column_index); +} + } diff --git a/Libraries/LibGUI/SortingProxyModel.h b/Libraries/LibGUI/SortingProxyModel.h index ff056851a2..4198ad1494 100644 --- a/Libraries/LibGUI/SortingProxyModel.h +++ b/Libraries/LibGUI/SortingProxyModel.h @@ -47,6 +47,7 @@ public: virtual int key_column() const override { return m_key_column; } virtual SortOrder sort_order() const override { return m_sort_order; } virtual void set_key_column_and_sort_order(int, SortOrder) override; + virtual bool is_column_sortable(int column_index) const override; ModelIndex map_to_target(const ModelIndex&) const;