pixelocr/pixelocr/gui/glyphdbedit.py
2014-09-01 18:11:41 +02:00

127 lines
3.4 KiB
Python

# Copyright (C) 2014 Andrey Golovizin
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import sys
from collections import defaultdict
from PyQt4.QtCore import (
Qt,
QAbstractTableModel,
QSize,
)
from PyQt4.QtGui import (
QApplication,
QTableView,
)
from ..glyphdb import GlyphDB
from ..image import Image
class GlyphDBModel(QAbstractTableModel):
def __init__(self, glyphdb, parent=None):
super().__init__(parent)
self.glyphdb = glyphdb
self.values = list(glyphdb.values())
self.values.reverse()
def rowCount(self, parent):
return len(self.values)
def columnCount(self, parent):
return 2
def headerData(self, section, orientation, role):
if orientation != Qt.Horizontal or role != Qt.DisplayRole:
return None
if section == 0:
return 'Text'
elif section == 1:
return 'Elevation'
def data(self, index, role):
data = self.values[index.row()]
if index.column() == 0:
if role == Qt.DisplayRole:
return data.text
elif role == Qt.DecorationRole:
return data.image.qimage
elif index.column() == 1:
if role == Qt.DisplayRole:
return str(data.elevation)
def removeRows(self, row, count, parent=None):
self.beginRemoveRows(parent, row, row + count - 1)
values = self.values[row: row + count]
for value in values:
self.glyphdb.remove(value)
del self.values[row]
self.endRemoveRows()
return True
def sort(self, column, order):
key_func = None
if column == 0:
def key_func(value):
return value.text
elif column == 1:
def key_func(value):
return value.elevation
if key_func:
self.layoutAboutToBeChanged.emit()
self.values.sort(key=key_func, reverse = (order == Qt.DescendingOrder))
self.layoutChanged.emit()
class GlyphTableView(QTableView):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.setSortingEnabled(True)
def keyPressEvent(self, event):
if event.key() == Qt.Key_Delete:
for index in self.selectedIndexes():
self.model().removeRow(index.row())
else:
return super().keyPressEvent(event)
class GlyphDBEdit(GlyphTableView):
def __init__(self, glyphdb, *args, **kwargs):
super().__init__(*args, **kwargs)
model = GlyphDBModel(glyphdb, parent=self)
self.setModel(model)
def sizeHint(self):
return QSize(640, 480)
def main(argv):
dirname = argv[1]
app = QApplication(argv)
glyphdb = GlyphDB(dirname)
win = GlyphDBEdit(glyphdb)
win.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main(sys.argv)