diff --git a/gui/src/aaregui/models/user_sample_model.py b/gui/src/aaregui/models/user_sample_model.py index 6c436a9e..c0fc84f3 100644 --- a/gui/src/aaregui/models/user_sample_model.py +++ b/gui/src/aaregui/models/user_sample_model.py @@ -48,6 +48,8 @@ class UserSampleSpreadsheet(QAbstractTableModel): ] self.current_sample = current_sample self.current_puck = current_puck + self.__sort_col = 1 + self.__sort_order = Qt.SortOrder.AscendingOrder def rowCount(self, parent=None): return len(self.samples) @@ -86,34 +88,42 @@ class UserSampleSpreadsheet(QAbstractTableModel): self, samples: list[SampleShortInfo] ): - if self.samples != samples: + current_set = set(self.samples) + new_set = set(samples) + + if current_set != new_set: self.beginResetModel() self.samples = samples + self.sort_internal() self.endResetModel() def sort(self, column, order): self.layoutAboutToBeChanged.emit() + self.__sort_order = order + self.__sort_col = column + self.sort_internal() + self.layoutChanged.emit() - if column == 3: + + def sort_internal(self): + if self.__sort_col == 3: self.samples = sorted( self.samples, key=lambda row: row.loc_str_sort(), reverse=( - order == Qt.SortOrder.DescendingOrder + self.__sort_order == Qt.SortOrder.DescendingOrder ), # Reverse for descending order ) else: # Sort the samples based on the specified column and order self.samples = sorted( self.samples, - key=lambda row: get_entry(row, column), + key=lambda row: get_entry(row, self.__sort_col), reverse=( - order == Qt.SortOrder.DescendingOrder + self.__sort_order == Qt.SortOrder.DescendingOrder ), # Reverse for descending order ) - # Notify views that the model layout has changed - self.layoutChanged.emit() def flags(self, index): default_flags = super().flags(index)