Add 'Date added' column to GlyphDBEdit.

This commit is contained in:
Andrey Golovizin 2014-09-02 01:00:44 +02:00
parent f31a74df60
commit af351617d8

View file

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