mirror of
https://github.com/olivierkes/manuskript.git
synced 2024-05-23 22:29:42 +12:00
Better persosProxyModel
This commit is contained in:
parent
ed95481ead
commit
9452b32f50
|
@ -2,6 +2,7 @@
|
|||
#--!-- coding: utf8 --!--
|
||||
|
||||
from qt import *
|
||||
from random import *
|
||||
|
||||
def wordCount(text):
|
||||
return len(text.strip().replace(" ", "\n").split("\n")) if text else 0
|
||||
|
@ -67,4 +68,17 @@ def iconFromColor(color):
|
|||
return QIcon(px)
|
||||
|
||||
def iconFromColorString(string):
|
||||
return iconFromColor(QColor(string))
|
||||
return iconFromColor(QColor(string))
|
||||
|
||||
def randomColor(mix=None):
|
||||
"Generates a random color. If mix (QColor) is given, mixes the random color and mix."
|
||||
r = randint(0, 255)
|
||||
g = randint(0, 255)
|
||||
b = randint(0, 255)
|
||||
|
||||
if mix:
|
||||
r = (r + mix.red()) / 2
|
||||
g = (g + mix.green()) / 2
|
||||
b = (b + mix.blue()) / 2
|
||||
|
||||
return QColor(r, g, b)
|
|
@ -95,7 +95,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
|
|||
|
||||
# Persos
|
||||
self.mdlPersos = QStandardItemModel(0, 10)
|
||||
self.mdlPersosProxy = None #persosProxyModel()
|
||||
self.mdlPersosProxy = persosProxyModel() # None
|
||||
#self.mdlPersoProxyFilter = QSortFilterProxyModel()
|
||||
if self.mdlPersosProxy:
|
||||
self.mdlPersosProxy.setSourceModel(self.mdlPersos)
|
||||
|
@ -113,7 +113,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
|
|||
|
||||
self.btnAddPerso.clicked.connect(self.createPerso)
|
||||
self.btnRmPerso.clicked.connect(self.removePerso)
|
||||
self.btnPersoColor.clicked.connect(self.setPersoColor)
|
||||
self.btnPersoColor.clicked.connect(self.chosePersoColor)
|
||||
self.btnPersoAddInfo.clicked.connect(lambda: self.mdlPersosInfos.insertRow(self.mdlPersosInfos.rowCount()))
|
||||
self.mprPersos = QDataWidgetMapper()
|
||||
self.mprPersos.setModel(self.mdlPersos)
|
||||
|
@ -265,6 +265,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
|
|||
self.mdlPersos.appendRow(p)
|
||||
pid = self.getPersosID()
|
||||
self.checkPersosID() # Attributes a persoID (which is logically pid)
|
||||
self.setPersoColor(self.mdlPersos.rowCount()-1, randomColor(QColor(Qt.white)))
|
||||
|
||||
# Add column in persos infos
|
||||
self.mdlPersosInfos.insertColumn(self.mdlPersosInfos.columnCount(), [QStandardItem(pid)])
|
||||
|
@ -319,7 +320,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
|
|||
|
||||
self.resizePersosInfos()
|
||||
|
||||
def updatePersoColor(self):
|
||||
def updatePersoColor(self):
|
||||
if self.mdlPersosProxy:
|
||||
idx = self.mdlPersosProxy.mapToSource(self.lstPersos.currentIndex())
|
||||
else:
|
||||
|
@ -343,7 +344,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
|
|||
|
||||
self.tblPersoInfos.setColumnWidth(current, w - w2)
|
||||
|
||||
def setPersoColor(self):
|
||||
def chosePersoColor(self):
|
||||
if self.mdlPersosProxy:
|
||||
idx = self.mdlPersosProxy.mapToSource(self.lstPersos.currentIndex())
|
||||
else:
|
||||
|
@ -356,10 +357,13 @@ class MainWindow(QMainWindow, Ui_MainWindow):
|
|||
color = Qt.white
|
||||
self.colorDialog = QColorDialog(color, self)
|
||||
color = self.colorDialog.getColor(color)
|
||||
self.setPersoColor(idx.row(), color)
|
||||
self.updatePersoColor()
|
||||
|
||||
def setPersoColor(self, row, color):
|
||||
px = QPixmap(32, 32)
|
||||
px.fill(color)
|
||||
self.mdlPersos.item(idx.row(), Perso.name.value).setIcon(QIcon(px))
|
||||
self.updatePersoColor()
|
||||
self.mdlPersos.item(row, Perso.name.value).setIcon(QIcon(px))
|
||||
|
||||
|
||||
####################################################################################################
|
||||
|
|
|
@ -19,11 +19,11 @@ class persosProxyModel(QAbstractProxyModel):
|
|||
QAbstractProxyModel.__init__(self, parent)
|
||||
|
||||
self.rootItem = QStandardItem()
|
||||
self.p1 = QStandardItem("Principaux")
|
||||
self.p2 = QStandardItem("Secondaires")
|
||||
self.p3 = QStandardItem("Mineurs")
|
||||
self.p1 = QStandardItem(self.tr("Main"))
|
||||
self.p2 = QStandardItem(self.tr("Secundary"))
|
||||
self.p3 = QStandardItem(self.tr("Minors"))
|
||||
|
||||
self.cats = [
|
||||
self._cats = [
|
||||
self.p1,
|
||||
self.p2,
|
||||
self.p3
|
||||
|
@ -34,16 +34,9 @@ class persosProxyModel(QAbstractProxyModel):
|
|||
if not sourceIndex.isValid():
|
||||
return QModelIndex()
|
||||
|
||||
row = sourceIndex.row()
|
||||
row = self._map.index(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):
|
||||
|
@ -56,23 +49,13 @@ class persosProxyModel(QAbstractProxyModel):
|
|||
return Qt.ItemIsEnabled | Qt.ItemIsSelectable
|
||||
|
||||
def mapToSource(self, proxyIndex):
|
||||
if not proxyIndex.isValid():
|
||||
return QModelIndex()
|
||||
#if not proxyIndex.isValid():
|
||||
#return QModelIndex()
|
||||
|
||||
row = proxyIndex.row()
|
||||
row = self._map[proxyIndex.row()]
|
||||
|
||||
if row == 0:
|
||||
if type(row) != int:
|
||||
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()
|
||||
|
||||
|
@ -92,33 +75,31 @@ class persosProxyModel(QAbstractProxyModel):
|
|||
self.beginResetModel()
|
||||
src = self.sourceModel()
|
||||
|
||||
self._map = [[], [], []]
|
||||
self._map = []
|
||||
|
||||
for i in range(src.rowCount()):
|
||||
item = src.item(i, Perso.importance.value)
|
||||
ID = src.item(i, Perso.ID.value)
|
||||
for i in range(len(self._cats)):
|
||||
self._map.append(self._cats[i])
|
||||
|
||||
if item:
|
||||
imp = int(item.text())
|
||||
else:
|
||||
imp = 0
|
||||
|
||||
self._map[2-imp].append(i)
|
||||
for p in range(src.rowCount()):
|
||||
item = src.item(p, Perso.importance.value)
|
||||
|
||||
if item:
|
||||
imp = int(item.text())
|
||||
else:
|
||||
imp = 0
|
||||
|
||||
if 2-imp == i:
|
||||
self._map.append(p)
|
||||
|
||||
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()
|
||||
return self._map[row].text()
|
||||
|
||||
elif role == Qt.ForegroundRole:
|
||||
return QBrush(Qt.darkBlue)
|
||||
|
@ -137,30 +118,21 @@ class persosProxyModel(QAbstractProxyModel):
|
|||
|
||||
def index(self, row, column, parent):
|
||||
|
||||
n = self.numberOfPersosByImportance()
|
||||
i = self._map[row]
|
||||
|
||||
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
|
||||
if type(i) != int:
|
||||
|
||||
return self.createIndex(row, column, self.cats[p])
|
||||
return self.createIndex(row, column, i)
|
||||
|
||||
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()))
|
||||
return self.mapFromSource(self.sourceModel().index(i, column, QModelIndex()))
|
||||
|
||||
def parent(self, index=QModelIndex()):
|
||||
return QModelIndex()
|
||||
|
||||
def rowCount(self, parent=QModelIndex()):
|
||||
return self.sourceModel().rowCount(QModelIndex())+3
|
||||
return len(self._map)
|
||||
|
||||
def columnCount(self, parent=QModelIndex()):
|
||||
return self.sourceModel().columnCount(QModelIndex())
|
||||
|
|
|
@ -54,9 +54,9 @@ Pour voir.</col>
|
|||
<col col="11"/>
|
||||
</row>
|
||||
<row row="2">
|
||||
<col col="0" color="#ff0d05f0">Nouveau perso avec un nom très très long pour voir comment ça fait</col>
|
||||
<col col="0" color="#ff005500">Nouveau perso avec un nom très très long pour voir comment ça fait</col>
|
||||
<col col="1">2</col>
|
||||
<col col="2">1</col>
|
||||
<col col="2">0</col>
|
||||
<col col="3"/>
|
||||
<col col="4"/>
|
||||
<col col="5"/>
|
||||
|
|
Loading…
Reference in a new issue