mirror of
https://github.com/olivierkes/manuskript.git
synced 2024-06-01 10:39:34 +12:00
173 lines
5.6 KiB
Python
173 lines
5.6 KiB
Python
#!/usr/bin/env python
|
|
#--!-- coding: utf8 --!--
|
|
|
|
from __future__ import print_function
|
|
from __future__ import unicode_literals
|
|
|
|
from qt import *
|
|
from enums import *
|
|
from models.outlineModel import *
|
|
|
|
from enum import Enum
|
|
from lxml import etree as ET
|
|
|
|
class persosProxyModel(QAbstractProxyModel):
|
|
|
|
newStatuses = pyqtSignal()
|
|
|
|
def __init__(self, parent=None):
|
|
QAbstractProxyModel.__init__(self, parent)
|
|
|
|
self.rootItem = QStandardItem()
|
|
self.p1 = QStandardItem("Principaux")
|
|
self.p2 = QStandardItem("Secondaires")
|
|
self.p3 = QStandardItem("Mineurs")
|
|
|
|
self.cats = [
|
|
self.p1,
|
|
self.p2,
|
|
self.p3
|
|
]
|
|
|
|
|
|
def mapFromSource(self, sourceIndex):
|
|
if not sourceIndex.isValid():
|
|
return QModelIndex()
|
|
|
|
row = sourceIndex.row()
|
|
item = sourceIndex.internalPointer()
|
|
|
|
if row in self._map[0]:
|
|
row = self._map[0].index(row) + 1
|
|
elif row in self._map[1]:
|
|
row = len(self._map[0]) + 1 + self._map[1].index(row) + 1
|
|
elif row in self._map[2]:
|
|
row = len(self._map[0]) + 1 + len(self._map[1]) + 1 + self._map[2].index(row) + 1
|
|
|
|
return self.createIndex(row, sourceIndex.column(), item)
|
|
|
|
def flags(self, index):
|
|
if not index.isValid():
|
|
return Qt.NoItemFlags
|
|
|
|
if index.isValid() and not self.mapToSource(index).isValid():
|
|
return Qt.NoItemFlags#Qt.ItemIsEnabled
|
|
else:
|
|
return Qt.ItemIsEnabled | Qt.ItemIsSelectable
|
|
|
|
def mapToSource(self, proxyIndex):
|
|
if not proxyIndex.isValid():
|
|
return QModelIndex()
|
|
|
|
row = proxyIndex.row()
|
|
|
|
if row == 0:
|
|
return QModelIndex()
|
|
elif row < len(self._map[0]) + 1:
|
|
row = self._map[0][row-1]
|
|
elif row == len(self._map[0]) + 1:
|
|
return QModelIndex()
|
|
elif row < len(self._map[0]) + 1 + len(self._map[1]) + 1:
|
|
row = self._map[1][row - 2 - len(self._map[0])]
|
|
elif row == len(self._map[0]) + 1 + len(self._map[1]) + 1:
|
|
return QModelIndex()
|
|
else:
|
|
row = self._map[2][row - 3 - len(self._map[0]) - len(self._map[1])]
|
|
|
|
item = proxyIndex.internalPointer()
|
|
|
|
return self.sourceModel().createIndex(row, proxyIndex.column(), item)
|
|
|
|
def setSourceModel(self, model):
|
|
QAbstractProxyModel.setSourceModel(self, model)
|
|
self.sourceModel().dataChanged.connect(self.mapModel)
|
|
self.sourceModel().rowsInserted.connect(self.mapModel)
|
|
self.sourceModel().rowsRemoved.connect(self.mapModel)
|
|
self.sourceModel().rowsMoved.connect(self.mapModel)
|
|
|
|
self.mapModel()
|
|
|
|
|
|
def mapModel(self):
|
|
self.beginResetModel()
|
|
src = self.sourceModel()
|
|
|
|
self._map = [[], [], []]
|
|
|
|
for i in range(src.rowCount()):
|
|
item = src.item(i, Perso.importance.value)
|
|
ID = src.item(i, Perso.ID.value)
|
|
|
|
if item:
|
|
imp = int(item.text())
|
|
else:
|
|
imp = 0
|
|
|
|
self._map[2-imp].append(i)
|
|
self.endResetModel()
|
|
|
|
def numberOfPersosByImportance(self):
|
|
return [len(i) for i in self._map]
|
|
|
|
def data(self, index, role=Qt.DisplayRole):
|
|
row = index.row()
|
|
|
|
if index.isValid() and not self.mapToSource(index).isValid():
|
|
if role == Qt.DisplayRole:
|
|
n = self.numberOfPersosByImportance()
|
|
p = 0 if row == 0 else \
|
|
1 if row == n[0] + 1 else \
|
|
2
|
|
return self.cats[p].text()
|
|
|
|
elif role == Qt.ForegroundRole:
|
|
return QBrush(Qt.darkBlue)
|
|
elif role == Qt.BackgroundRole:
|
|
return QBrush(QColor(Qt.blue).lighter(190))
|
|
elif role == Qt.TextAlignmentRole:
|
|
return Qt.AlignCenter
|
|
elif role == Qt.FontRole:
|
|
f = QFont()
|
|
#f.setPointSize(f.pointSize() + 1)
|
|
f.setWeight(QFont.Bold)
|
|
return f
|
|
else:
|
|
return self.sourceModel().data(self.mapToSource(index), role)
|
|
|
|
def index(self, row, column, parent):
|
|
|
|
n = self.numberOfPersosByImportance()
|
|
|
|
if row == 0 or row == n[0] + 1 or row == n[0]+n[1]+2:
|
|
p = 0 if row == 0 else \
|
|
1 if row == n[0] + 1 else \
|
|
2
|
|
|
|
return self.createIndex(row, column, self.cats[p])
|
|
|
|
else:
|
|
if row < len(self._map[0]) + 1:
|
|
nrow = self._map[0][row - 1]
|
|
elif row < len(self._map[0]) + 1 + len(self._map[1]) + 1:
|
|
nrow = self._map[1][row - 2 - len(self._map[0])]
|
|
else:
|
|
nrow = self._map[2][row - 3 - len(self._map[0]) - len(self._map[1])]
|
|
|
|
return self.mapFromSource(self.sourceModel().index(nrow, column, QModelIndex()))
|
|
|
|
def parent(self, index=QModelIndex()):
|
|
return QModelIndex()
|
|
|
|
def rowCount(self, parent=QModelIndex()):
|
|
return self.sourceModel().rowCount(QModelIndex())+3
|
|
|
|
def columnCount(self, parent=QModelIndex()):
|
|
return self.sourceModel().columnCount(QModelIndex())
|
|
|
|
def item(self, row, col, parent=QModelIndex()):
|
|
idx = self.mapToSource(self.index(row, col, parent))
|
|
return self.sourceModel().item(idx.row(), idx.column())
|
|
|
|
|
|
#def setData(self, index, value, role=Qt.EditRole):
|
|
#pass |