diff --git a/src/functions.py b/src/functions.py index 2bea2b7d..eabf2895 100644 --- a/src/functions.py +++ b/src/functions.py @@ -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)) \ No newline at end of file + 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) \ No newline at end of file diff --git a/src/mainWindow.py b/src/mainWindow.py index 78529ff1..17d57f93 100644 --- a/src/mainWindow.py +++ b/src/mainWindow.py @@ -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)) #################################################################################################### diff --git a/src/models/persosProxyModel.py b/src/models/persosProxyModel.py index 0701f1cc..6f2999d2 100644 --- a/src/models/persosProxyModel.py +++ b/src/models/persosProxyModel.py @@ -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()) diff --git a/test_project/perso.xml b/test_project/perso.xml index 66244ee4..a6a22878 100644 --- a/test_project/perso.xml +++ b/test_project/perso.xml @@ -54,9 +54,9 @@ Pour voir. - Nouveau perso avec un nom très très long pour voir comment ça fait + Nouveau perso avec un nom très très long pour voir comment ça fait 2 - 1 + 0