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):
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):