diff --git a/pixelocr/gui/glyphdbedit.py b/pixelocr/gui/glyphdbedit.py index 7dbf45f..60d612b 100644 --- a/pixelocr/gui/glyphdbedit.py +++ b/pixelocr/gui/glyphdbedit.py @@ -34,7 +34,8 @@ from ..image import Image class Column(object): flags = Qt.ItemIsEditable - data_type = str + to_display = str + to_value = str def __init__(self, header, field_name, image_field_name=None): self.header = header @@ -43,25 +44,29 @@ class Column(object): def data(self, glyph_data, role): if role in [Qt.DisplayRole, Qt.EditRole]: - return self.data_type(getattr(glyph_data, self.field_name)) + return self.to_display(getattr(glyph_data, self.field_name)) elif role == Qt.DecorationRole and self.image_field_name: return getattr(glyph_data, self.image_field_name).qimage def setData(self, glyph_data, value, role): if role == Qt.EditRole: - setattr(glyph_data, self.field_name, self.data_type(value)) + setattr(glyph_data, self.field_name, self.to_value(value)) def sortKey(self, glyph_data): return getattr(glyph_data, self.field_name) class IntColumn(Column): - data_type = int + to_display = int + to_value = int + + +class DateColumn(Column): + flags = 0 class CheckBoxColumn(Column): flags = Qt.ItemIsUserCheckable - data_type = bool def data(self, glyph_data, role): if role == Qt.CheckStateRole: @@ -79,13 +84,14 @@ class GlyphDBModel(QAbstractTableModel): IntColumn('Elevation', 'elevation'), CheckBoxColumn('Bold', 'bold'), CheckBoxColumn('Italic', 'italic'), + DateColumn('Date added', 'date_added'), ] def __init__(self, glyphdb, parent=None): super().__init__(parent) self.glyphdb = glyphdb - self.sortKey = None - self.reverse = None + self.sortColumn = len(self.COLUMNS) - 1 # date_add ed + self.sortOrder = Qt.DescendingOrder self.updateData() def flags(self, index): @@ -128,18 +134,15 @@ class GlyphDBModel(QAbstractTableModel): return True def sort(self, column_index, order): - column = self.COLUMNS[column_index] - self.sortKey = column.sortKey - self.reverse = (order == Qt.DescendingOrder) + self.sortColumn = column_index + self.sortOrder = order self.updateData() def updateData(self): self.layoutAboutToBeChanged.emit() - if self.sortKey is None: - self.values = list(self.glyphdb.values()) - self.values.reverse() - else: - self.values = sorted(self.glyphdb.values(), key=self.sortKey, reverse=self.reverse) + column = self.COLUMNS[self.sortColumn] + reverse = self.sortOrder == Qt.DescendingOrder + self.values = sorted(self.glyphdb.values(), key=column.sortKey, reverse=reverse) self.layoutChanged.emit() @@ -160,6 +163,7 @@ class GlyphDBEdit(GlyphTableView): def __init__(self, glyphdb, *args, **kwargs): super().__init__(*args, **kwargs) model = GlyphDBModel(glyphdb, parent=self) + self.horizontalHeader().setSortIndicator(model.sortColumn, model.sortOrder) self.setModel(model) def sizeHint(self):