Make GlyphDB store GlyphData objects instead of just text.
This commit is contained in:
parent
a44091b570
commit
9c8de1ce0f
6 changed files with 90 additions and 53 deletions
|
|
@ -36,27 +36,14 @@ class GlyphDBModel(QAbstractTableModel):
|
|||
def __init__(self, glyphdb, parent=None):
|
||||
super().__init__(parent)
|
||||
self.glyphdb = glyphdb
|
||||
self.keys = list(glyphdb.keys())
|
||||
self.images = {}
|
||||
self.values = list(glyphdb.values())
|
||||
|
||||
def rowCount(self, parent):
|
||||
return len(self.keys)
|
||||
return len(self.values)
|
||||
|
||||
def columnCount(self, parent):
|
||||
return 2
|
||||
|
||||
def _deserialize_image(self, key):
|
||||
elevation_, serialized_image = key
|
||||
return Image.deserialize(serialized_image).toqimage()
|
||||
|
||||
def get_image(self, key):
|
||||
try:
|
||||
image = self.images[key]
|
||||
except KeyError:
|
||||
image = self._deserialize_image(key)
|
||||
self.images[key] = image
|
||||
return image
|
||||
|
||||
def headerData(self, section, orientation, role):
|
||||
if orientation != Qt.Horizontal or role != Qt.DisplayRole:
|
||||
return None
|
||||
|
|
@ -66,24 +53,23 @@ class GlyphDBModel(QAbstractTableModel):
|
|||
return 'Elevation'
|
||||
|
||||
def data(self, index, role):
|
||||
data = self.values[index.row()]
|
||||
if index.column() == 0:
|
||||
key = self.keys[index.row()]
|
||||
if role == Qt.DisplayRole:
|
||||
return self.glyphdb[key]
|
||||
return data.text
|
||||
elif role == Qt.DecorationRole:
|
||||
return self.get_image(key)
|
||||
return data.image.qimage
|
||||
elif index.column() == 1:
|
||||
if role == Qt.DisplayRole:
|
||||
elevation, _ = self.keys[index.row()]
|
||||
return str(elevation)
|
||||
return str(data.elevation)
|
||||
|
||||
def removeRows(self, row, count, parent=None):
|
||||
self.beginRemoveRows(parent, row, row + count - 1)
|
||||
|
||||
keys = self.keys[row: row + count]
|
||||
for key in keys:
|
||||
del self.glyphdb[key]
|
||||
del self.keys[row]
|
||||
values = self.values[row: row + count]
|
||||
for value in values:
|
||||
self.glyphdb.remove(value)
|
||||
del self.values[row]
|
||||
|
||||
self.endRemoveRows()
|
||||
return True
|
||||
|
|
@ -91,16 +77,15 @@ class GlyphDBModel(QAbstractTableModel):
|
|||
def sort(self, column, order):
|
||||
key_func = None
|
||||
if column == 0:
|
||||
def key_func(key):
|
||||
return self.glyphdb[key]
|
||||
def key_func(value):
|
||||
return value.text
|
||||
elif column == 1:
|
||||
def key_func(key):
|
||||
elevation, *_ = key
|
||||
return elevation
|
||||
def key_func(value):
|
||||
return value.elevation
|
||||
|
||||
if key_func:
|
||||
self.layoutAboutToBeChanged.emit()
|
||||
self.keys.sort(key=key_func, reverse = (order == Qt.DescendingOrder))
|
||||
self.values.sort(key=key_func, reverse = (order == Qt.DescendingOrder))
|
||||
self.layoutChanged.emit()
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -75,10 +75,10 @@ class OCREngine(QThread):
|
|||
if isinstance(glyph, Space):
|
||||
return ' '
|
||||
try:
|
||||
return self.glyphdb[glyph.key]
|
||||
return self.glyphdb[glyph].text
|
||||
except KeyError:
|
||||
text = self.ask_for_help(glyph)
|
||||
self.glyphdb[glyph.key] = text
|
||||
self.glyphdb.add_glyph(glyph, text)
|
||||
return text
|
||||
|
||||
def ask_for_help(self, unknown_glyph):
|
||||
|
|
|
|||
|
|
@ -84,7 +84,7 @@ class PageScene(QGraphicsScene):
|
|||
self.addRect(glyph.x - 1, glyph.y - 1, glyph.width + 1, glyph.height + 1, self.spacePen, self.spaceBrush)
|
||||
|
||||
def addPage(self, page):
|
||||
qimage = page.image.toqimage()
|
||||
qimage = page.image.qimage
|
||||
graphicsitem = self.addPixmap(QPixmap.fromImage(qimage))
|
||||
return graphicsitem
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue