2015-06-04 17:08:49 +12:00
|
|
|
#!/usr/bin/env python
|
|
|
|
#--!-- coding: utf8 --!--
|
|
|
|
|
2016-02-07 00:34:22 +13:00
|
|
|
from manuskript import enums
|
2017-11-15 02:48:28 +13:00
|
|
|
from manuskript.ui import style as S
|
2015-06-04 17:08:49 +12:00
|
|
|
|
|
|
|
|
2015-06-22 23:11:45 +12:00
|
|
|
class persosProxyModel(QSortFilterProxyModel):
|
2017-11-15 02:48:28 +13:00
|
|
|
|
2015-06-04 17:08:49 +12:00
|
|
|
newStatuses = pyqtSignal()
|
2017-11-15 02:48:28 +13:00
|
|
|
|
2015-06-04 17:08:49 +12:00
|
|
|
def __init__(self, parent=None):
|
2015-06-22 23:11:45 +12:00
|
|
|
QSortFilterProxyModel.__init__(self, parent)
|
2017-11-15 02:48:28 +13:00
|
|
|
|
2015-06-22 23:11:45 +12:00
|
|
|
#self.rootItem = QStandardItem()
|
2015-06-16 03:24:02 +12:00
|
|
|
self.p1 = QStandardItem(self.tr("Main"))
|
2018-01-07 06:49:34 +13:00
|
|
|
self.p2 = QStandardItem(self.tr("Secondary"))
|
2015-06-16 03:24:02 +12:00
|
|
|
self.p3 = QStandardItem(self.tr("Minors"))
|
2017-11-15 02:48:28 +13:00
|
|
|
|
2015-06-16 03:24:02 +12:00
|
|
|
self._cats = [
|
2015-06-04 17:08:49 +12:00
|
|
|
self.p1,
|
|
|
|
self.p2,
|
|
|
|
self.p3
|
|
|
|
]
|
2017-11-15 02:48:28 +13:00
|
|
|
|
2015-06-04 17:08:49 +12:00
|
|
|
def mapFromSource(self, sourceIndex):
|
|
|
|
if not sourceIndex.isValid():
|
|
|
|
return QModelIndex()
|
2017-11-15 02:48:28 +13:00
|
|
|
|
2015-06-16 03:24:02 +12:00
|
|
|
row = self._map.index(sourceIndex.row())
|
2015-06-22 23:11:45 +12:00
|
|
|
#item = sourceIndex.internalPointer()
|
|
|
|
item = self.sourceModel().itemFromIndex(sourceIndex)
|
2017-11-15 02:48:28 +13:00
|
|
|
|
2015-06-04 17:08:49 +12:00
|
|
|
return self.createIndex(row, sourceIndex.column(), item)
|
2017-11-15 02:48:28 +13:00
|
|
|
|
2015-06-04 17:08:49 +12:00
|
|
|
def flags(self, index):
|
|
|
|
if not index.isValid():
|
|
|
|
return Qt.NoItemFlags
|
2017-11-15 02:48:28 +13:00
|
|
|
|
2015-06-04 17:08:49 +12:00
|
|
|
if index.isValid() and not self.mapToSource(index).isValid():
|
|
|
|
return Qt.NoItemFlags#Qt.ItemIsEnabled
|
|
|
|
else:
|
|
|
|
return Qt.ItemIsEnabled | Qt.ItemIsSelectable
|
2017-11-15 02:48:28 +13:00
|
|
|
|
2015-06-04 17:08:49 +12:00
|
|
|
def mapToSource(self, proxyIndex):
|
2015-06-22 23:11:45 +12:00
|
|
|
if not proxyIndex.isValid():
|
|
|
|
return QModelIndex()
|
2017-11-15 02:48:28 +13:00
|
|
|
|
2015-06-16 03:24:02 +12:00
|
|
|
row = self._map[proxyIndex.row()]
|
2017-11-15 02:48:28 +13:00
|
|
|
|
2015-06-16 03:24:02 +12:00
|
|
|
if type(row) != int:
|
2015-06-04 17:08:49 +12:00
|
|
|
return QModelIndex()
|
2017-11-15 02:48:28 +13:00
|
|
|
|
2015-06-22 23:11:45 +12:00
|
|
|
#item = proxyIndex.internalPointer()
|
|
|
|
item = self.sourceModel().item(row, proxyIndex.column())
|
2017-11-15 02:48:28 +13:00
|
|
|
|
2015-06-22 23:11:45 +12:00
|
|
|
return self.sourceModel().indexFromItem(item)
|
2017-11-15 02:48:28 +13:00
|
|
|
|
2015-06-04 17:08:49 +12:00
|
|
|
def setSourceModel(self, model):
|
2015-06-22 23:11:45 +12:00
|
|
|
QSortFilterProxyModel.setSourceModel(self, model)
|
2015-06-18 07:17:12 +12:00
|
|
|
self.sourceModel().dataChanged.connect(self.mapModelMaybe)
|
2015-06-04 17:08:49 +12:00
|
|
|
self.sourceModel().rowsInserted.connect(self.mapModel)
|
|
|
|
self.sourceModel().rowsRemoved.connect(self.mapModel)
|
|
|
|
self.sourceModel().rowsMoved.connect(self.mapModel)
|
2017-11-15 02:48:28 +13:00
|
|
|
|
2015-06-04 17:08:49 +12:00
|
|
|
self.mapModel()
|
2017-11-15 02:48:28 +13:00
|
|
|
|
2015-06-18 07:17:12 +12:00
|
|
|
def mapModelMaybe(self, topLeft, bottomRight):
|
|
|
|
if topLeft.column() <= Perso.importance.value <= bottomRight.column():
|
|
|
|
self.mapModel()
|
2017-11-15 02:48:28 +13:00
|
|
|
|
2015-06-04 17:08:49 +12:00
|
|
|
def mapModel(self):
|
|
|
|
self.beginResetModel()
|
|
|
|
src = self.sourceModel()
|
2017-11-15 02:48:28 +13:00
|
|
|
|
2015-06-16 03:24:02 +12:00
|
|
|
self._map = []
|
2017-11-15 02:48:28 +13:00
|
|
|
|
2015-07-08 23:30:59 +12:00
|
|
|
for i, cat in enumerate(self._cats):
|
|
|
|
self._map.append(cat)
|
2017-11-15 02:48:28 +13:00
|
|
|
|
2015-06-16 03:24:02 +12:00
|
|
|
for p in range(src.rowCount()):
|
|
|
|
item = src.item(p, Perso.importance.value)
|
2017-11-15 02:48:28 +13:00
|
|
|
|
2015-06-27 10:22:46 +12:00
|
|
|
if item and item.text():
|
2015-06-16 03:24:02 +12:00
|
|
|
imp = int(item.text())
|
|
|
|
else:
|
|
|
|
imp = 0
|
2017-11-15 02:48:28 +13:00
|
|
|
|
2015-06-16 03:24:02 +12:00
|
|
|
if 2-imp == i:
|
|
|
|
self._map.append(p)
|
2017-11-15 02:48:28 +13:00
|
|
|
|
2015-06-04 17:08:49 +12:00
|
|
|
self.endResetModel()
|
2017-11-15 02:48:28 +13:00
|
|
|
|
|
|
|
|
2015-06-04 17:08:49 +12:00
|
|
|
def data(self, index, role=Qt.DisplayRole):
|
2017-11-15 02:48:28 +13:00
|
|
|
|
2015-06-04 17:08:49 +12:00
|
|
|
if index.isValid() and not self.mapToSource(index).isValid():
|
2015-06-22 23:11:45 +12:00
|
|
|
row = index.row()
|
2017-11-15 02:48:28 +13:00
|
|
|
|
2015-06-04 17:08:49 +12:00
|
|
|
if role == Qt.DisplayRole:
|
2015-06-16 03:24:02 +12:00
|
|
|
return self._map[row].text()
|
2017-11-15 02:48:28 +13:00
|
|
|
|
2015-06-04 17:59:49 +12:00
|
|
|
elif role == Qt.ForegroundRole:
|
2017-11-15 02:48:28 +13:00
|
|
|
return QBrush(QColor(S.highlightedTextDark))
|
2015-06-04 17:59:49 +12:00
|
|
|
elif role == Qt.BackgroundRole:
|
2017-11-15 02:48:28 +13:00
|
|
|
return QBrush(QColor(S.highlightLight))
|
2015-06-04 17:59:49 +12:00
|
|
|
elif role == Qt.TextAlignmentRole:
|
|
|
|
return Qt.AlignCenter
|
|
|
|
elif role == Qt.FontRole:
|
|
|
|
f = QFont()
|
|
|
|
#f.setPointSize(f.pointSize() + 1)
|
|
|
|
f.setWeight(QFont.Bold)
|
|
|
|
return f
|
2015-06-04 17:08:49 +12:00
|
|
|
else:
|
2015-06-10 10:20:32 +12:00
|
|
|
#FIXME: sometimes, the name of the character is not displayed
|
2015-06-04 17:08:49 +12:00
|
|
|
return self.sourceModel().data(self.mapToSource(index), role)
|
2017-11-15 02:48:28 +13:00
|
|
|
|
2015-06-04 17:08:49 +12:00
|
|
|
def index(self, row, column, parent):
|
2017-11-15 02:48:28 +13:00
|
|
|
|
2015-06-16 03:24:02 +12:00
|
|
|
i = self._map[row]
|
2017-11-15 02:48:28 +13:00
|
|
|
|
2015-06-16 03:24:02 +12:00
|
|
|
if type(i) != int:
|
2017-11-15 02:48:28 +13:00
|
|
|
|
2015-06-16 03:24:02 +12:00
|
|
|
return self.createIndex(row, column, i)
|
2017-11-15 02:48:28 +13:00
|
|
|
|
2015-06-04 17:08:49 +12:00
|
|
|
else:
|
2017-11-15 02:48:28 +13:00
|
|
|
|
2015-06-16 03:24:02 +12:00
|
|
|
return self.mapFromSource(self.sourceModel().index(i, column, QModelIndex()))
|
2017-11-15 02:48:28 +13:00
|
|
|
|
2015-06-04 17:08:49 +12:00
|
|
|
def parent(self, index=QModelIndex()):
|
|
|
|
return QModelIndex()
|
2017-11-15 02:48:28 +13:00
|
|
|
|
2015-06-04 17:08:49 +12:00
|
|
|
def rowCount(self, parent=QModelIndex()):
|
2015-06-16 03:24:02 +12:00
|
|
|
return len(self._map)
|
2017-11-15 02:48:28 +13:00
|
|
|
|
2015-06-04 17:08:49 +12:00
|
|
|
def columnCount(self, parent=QModelIndex()):
|
|
|
|
return self.sourceModel().columnCount(QModelIndex())
|
2017-11-15 02:48:28 +13:00
|
|
|
|
2015-06-04 17:08:49 +12:00
|
|
|
def item(self, row, col, parent=QModelIndex()):
|
|
|
|
idx = self.mapToSource(self.index(row, col, parent))
|
|
|
|
return self.sourceModel().item(idx.row(), idx.column())
|
2017-11-15 02:48:28 +13:00
|
|
|
|
|
|
|
|
2015-06-04 17:08:49 +12:00
|
|
|
#def setData(self, index, value, role=Qt.EditRole):
|
2017-11-15 02:48:28 +13:00
|
|
|
#pass
|