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.
This commit is contained in:
Damien Elmes 2021-10-30 09:08:07 +10:00
parent a447c3eb12
commit 3843a4509e
5 changed files with 37 additions and 16 deletions

View file

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

View file

@ -74,6 +74,7 @@ class ItemState(ABC):
@property
def sort_backwards(self) -> bool:
"If true, descending order."
return self._sort_backwards
@sort_backwards.setter

View file

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

View file

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

View file

@ -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,
}
}