From 3843a4509ed1213f5aa7ceb738d5de46cde33f4f Mon Sep 17 00:00:00 2001 From: Damien Elmes Date: Sat, 30 Oct 2021 09:08:07 +1000 Subject: [PATCH] fix sort order toggling We're getting an enum instead of an int in Qt6 normal/reversed have been renamed to ascending/descending; no add-ons appear to be using the old versions. --- proto/anki/search.proto | 5 +++-- qt/aqt/browser/table/state.py | 1 + qt/aqt/browser/table/table.py | 27 +++++++++++++++-------- rslib/src/backend/search/browser_table.rs | 2 +- rslib/src/browser_table.rs | 18 +++++++++++---- 5 files changed, 37 insertions(+), 16 deletions(-) diff --git a/proto/anki/search.proto b/proto/anki/search.proto index fea516db4..5b9280928 100644 --- a/proto/anki/search.proto +++ b/proto/anki/search.proto @@ -135,8 +135,8 @@ message FindAndReplaceRequest { message BrowserColumns { enum Sorting { SORTING_NONE = 0; - SORTING_NORMAL = 1; - SORTING_REVERSED = 2; + SORTING_ASCENDING = 1; + SORTING_DESCENDING = 2; } enum Alignment { ALIGNMENT_START = 0; @@ -146,6 +146,7 @@ message BrowserColumns { string key = 1; string cards_mode_label = 2; string notes_mode_label = 3; + // The default sort order Sorting sorting = 4; bool uses_cell_font = 5; Alignment alignment = 6; diff --git a/qt/aqt/browser/table/state.py b/qt/aqt/browser/table/state.py index 4c7043b11..0bbe74d44 100644 --- a/qt/aqt/browser/table/state.py +++ b/qt/aqt/browser/table/state.py @@ -74,6 +74,7 @@ class ItemState(ABC): @property def sort_backwards(self) -> bool: + "If true, descending order." return self._sort_backwards @sort_backwards.setter diff --git a/qt/aqt/browser/table/table.py b/qt/aqt/browser/table/table.py index d08858b46..c11a518da 100644 --- a/qt/aqt/browser/table/table.py +++ b/qt/aqt/browser/table/table.py @@ -377,7 +377,10 @@ class Table: hh.setContextMenuPolicy(Qt.ContextMenuPolicy.CustomContextMenu) self._restore_header() qconnect(hh.customContextMenuRequested, self._on_header_context) - qconnect(hh.sortIndicatorChanged, self._on_sort_column_changed) + if qtmajor == 5: + qconnect(hh.sortIndicatorChanged, self._on_sort_column_changed_qt5) + else: + qconnect(hh.sortIndicatorChanged, self._on_sort_column_changed) qconnect(hh.sectionMoved, self._on_column_moved) # Slots @@ -484,23 +487,29 @@ class Table: if checked: self._scroll_to_column(self._model.len_columns() - 1) - def _on_sort_column_changed(self, section: int, order: int) -> None: + def _on_sort_column_changed_qt5(self, section: int, order: int) -> None: + self._on_sort_column_changed( + section, + Qt.SortOrder.AscendingOrder if not order else Qt.SortOrder.DescendingOrder, + ) + + def _on_sort_column_changed(self, section: int, order: Qt.SortOrder) -> None: column = self._model.column_at_section(section) if column.sorting == Columns.SORTING_NONE: showInfo(tr.browsing_sorting_on_this_column_is_not()) self._set_sort_indicator() return - order = bool(order) if self._state.sort_column != column.key: self._state.sort_column = column.key - # default to descending for non-text fields - if column.sorting == Columns.SORTING_REVERSED: - order = not order - self._state.sort_backwards = order + # numeric fields default to descending + if column.sorting == Columns.SORTING_DESCENDING: + order = Qt.SortOrder.DescendingOrder + self._state.sort_backwards = order == Qt.SortOrder.DescendingOrder self.browser.search() else: - if self._state.sort_backwards != order: - self._state.sort_backwards = order + descending = order == Qt.SortOrder.DescendingOrder + if self._state.sort_backwards != descending: + self._state.sort_backwards = descending self._reverse() self._set_sort_indicator() diff --git a/rslib/src/backend/search/browser_table.rs b/rslib/src/backend/search/browser_table.rs index b0fd2bbc7..6a8e70f92 100644 --- a/rslib/src/backend/search/browser_table.rs +++ b/rslib/src/backend/search/browser_table.rs @@ -11,7 +11,7 @@ impl browser_table::Column { key: self.to_string(), cards_mode_label: self.cards_mode_label(i18n), notes_mode_label: self.notes_mode_label(i18n), - sorting: self.sorting() as i32, + sorting: self.default_order() as i32, uses_cell_font: self.uses_cell_font(), alignment: self.alignment() as i32, cards_mode_tooltip: self.cards_mode_tooltip(i18n), diff --git a/rslib/src/browser_table.rs b/rslib/src/browser_table.rs index b2cb3d413..f44bb5a88 100644 --- a/rslib/src/browser_table.rs +++ b/rslib/src/browser_table.rs @@ -177,12 +177,22 @@ impl Column { .into() } - pub fn sorting(self) -> pb::browser_columns::Sorting { + pub fn default_order(self) -> pb::browser_columns::Sorting { use pb::browser_columns::Sorting; match self { - Self::Question | Self::Answer | Self::Custom => Sorting::None, - Self::SortField => Sorting::Reversed, - _ => Sorting::Normal, + Column::Question | Column::Answer | Column::Custom => Sorting::None, + Column::SortField | Column::Tags | Column::Notetype | Column::Deck => { + Sorting::Ascending + } + Column::CardMod + | Column::Cards + | Column::Due + | Column::Ease + | Column::Lapses + | Column::Interval + | Column::NoteCreation + | Column::NoteMod + | Column::Reps => Sorting::Descending, } }