From 0e28825649f01b0ec5496cfc2f74382aaf6ee7e0 Mon Sep 17 00:00:00 2001 From: Olivier Keshavjee Date: Mon, 29 Jun 2015 10:22:18 +0200 Subject: [PATCH] Custom perso model, mostly working --- src/functions.py | 4 +- src/mainWindow.py | 69 +++++++++++++++++++-------- src/models/persosModel.py | 28 ++++++++--- src/models/plotModel.py | 19 +++----- src/models/references.py | 6 +-- src/ui/mainWindow.py | 58 +++++++++++----------- src/ui/mainWindow.ui | 42 ++++++++-------- src/ui/views/cmbOutlinePersoChoser.py | 16 ++----- src/ui/views/outlineBasics.py | 10 ++-- src/ui/views/outlineDelegates.py | 35 +++++--------- src/ui/views/persoTreeView.py | 18 +++++-- 11 files changed, 163 insertions(+), 142 deletions(-) diff --git a/src/functions.py b/src/functions.py index ad5b090..6a78d7f 100644 --- a/src/functions.py +++ b/src/functions.py @@ -108,8 +108,8 @@ def outlineItemColors(item): colors["POV"] = QColor(Qt.transparent) POV = item.data(Outline.POV.value) for i in range(mw.mdlPersos.rowCount()): - if mw.mdlPersos.item(i, Perso.ID.value).text() == POV: - colors["POV"] = iconColor(mw.mdlPersos.item(i, 0).icon()) + if mw.mdlPersos.ID(i) == POV: + colors["POV"] = iconColor(mw.mdlPersos.icon(i)) # Label lbl = item.data(Outline.label.value) diff --git a/src/mainWindow.py b/src/mainWindow.py index 0dabb47..c263668 100644 --- a/src/mainWindow.py +++ b/src/mainWindow.py @@ -178,11 +178,20 @@ class MainWindow(QMainWindow, Ui_MainWindow): return self.tabPersos.setEnabled(True) - # FIXME - #self.txtPlotName.setCurrentModelIndex(index) - #self.txtPlotDescription.setCurrentModelIndex(index) - #self.txtPlotResult.setCurrentModelIndex(index) - #self.sldPlotImportance.setCurrentModelIndex(index) + + for w in [ + self.txtPersoName, + self.sldPersoImportance, + self.txtPersoMotivation, + self.txtPersoGoal, + self.txtPersoConflict, + self.txtPersoEpiphany, + self.txtPersoSummarySentance, + self.txtPersoSummaryPara, + self.txtPersoSummaryFull, + self.txtPersoNotes, + ]: + w.setCurrentModelIndex(index) ## Button color self.mdlPersos.updatePersoColor(index) @@ -440,7 +449,7 @@ class MainWindow(QMainWindow, Ui_MainWindow): self.saveDatas() # closeEvent - QMainWindow.closeEvent(self, event) + #QMainWindow.closeEvent(self, event) # Causin segfaults? def startTimerNoChanges(self): if settings.autoSaveNoChanges: @@ -640,11 +649,32 @@ class MainWindow(QMainWindow, Ui_MainWindow): #FIXME #self.btnPersoAddInfo.clicked.connect(lambda: #self.mdlPersosInfos.insertRow(self.mdlPersosInfos.rowCount()), AUC) - self.mprPersos = QDataWidgetMapper() - self.mprPersos.setModel(self.mdlPersos) + + #self.mprPersos = QDataWidgetMapper() + #self.mprPersos.setModel(self.mdlPersos) - mapping = [ + #mapping = [ + #(self.txtPersoName, Perso.name.value), + #(self.txtPersoMotivation, Perso.motivation.value), + #(self.txtPersoGoal, Perso.goal.value), + #(self.txtPersoConflict, Perso.conflict.value), + #(self.txtPersoEpiphany, Perso.epiphany.value), + #(self.txtPersoSummarySentance, Perso.summarySentance.value), + #(self.txtPersoSummaryPara, Perso.summaryPara.value), + #(self.txtPersoSummaryFull, Perso.summaryFull.value), + #(self.txtPersoNotes, Perso.notes.value) + #] + #for w, i in mapping: + #self.mprPersos.addMapping(w, i) + #self.mprPersos.addMapping(self.sldPersoImportance, + #Perso.importance.value, "importance") + #self.sldPersoImportance.importanceChanged.connect(self.mprPersos.submit, AUC) + #self.tabMain.currentChanged.connect(self.mprPersos.submit, AUC) + #self.mprPersos.setCurrentIndex(0) + + for w, c in [ (self.txtPersoName, Perso.name.value), + (self.sldPersoImportance, Perso.importance.value), (self.txtPersoMotivation, Perso.motivation.value), (self.txtPersoGoal, Perso.goal.value), (self.txtPersoConflict, Perso.conflict.value), @@ -653,17 +683,13 @@ class MainWindow(QMainWindow, Ui_MainWindow): (self.txtPersoSummaryPara, Perso.summaryPara.value), (self.txtPersoSummaryFull, Perso.summaryFull.value), (self.txtPersoNotes, Perso.notes.value) - ] - for w, i in mapping: - self.mprPersos.addMapping(w, i) - self.mprPersos.addMapping(self.sldPersoImportance, - Perso.importance.value, "importance") - self.sldPersoImportance.importanceChanged.connect(self.mprPersos.submit, AUC) - self.tabMain.currentChanged.connect(self.mprPersos.submit, AUC) - - self.mprPersos.setCurrentIndex(0) - self.lstPersos.selectionModel().currentChanged.connect( - self.mdlPersos.updatePersoColor, AUC) + ]: + w.setModel(self.mdlPersos) + w.setColumn(c) + self.tabPersos.setEnabled(False) + + #self.lstPersos.selectionModel().currentChanged.connect( + #self.mdlPersos.updatePersoColor, AUC) #self.tabPersos.currentChanged.connect(self.resizePersosInfos) # Plots @@ -688,7 +714,8 @@ class MainWindow(QMainWindow, Ui_MainWindow): w.setColumn(c) self.tabPlot.setEnabled(False) - + self.mdlPlots.updatePlotPersoButton() + self.mdlPersos.dataChanged.connect(self.mdlPlots.updatePlotPersoButton) self.lstOutlinePlots.setPlotModel(self.mdlPlots) self.lstOutlinePlots.setShowSubPlot(True) diff --git a/src/models/persosModel.py b/src/models/persosModel.py index 0bcb101..1ecdcf8 100644 --- a/src/models/persosModel.py +++ b/src/models/persosModel.py @@ -15,7 +15,23 @@ class persosModel(QStandardItemModel): #self._proxy.setSourceModel(self) ############################################################################### -# QUERRIES +# PERSOS QUERRIES +############################################################################### + + def name(self, row): + return self.item(row, Perso.name.value).text() + + def icon(self, row): + return self.item(row, Perso.name.value).icon() + + def ID(self, row): + return self.item(row, Perso.ID.value).text() + + def importance(self, row): + return self.item(row, Perso.importance.value).text() + +############################################################################### +# GENERAL QUERRIES ############################################################################### def getPersosByImportance(self): @@ -27,11 +43,9 @@ class persosModel(QStandardItemModel): return persos def getPersoNameByID(self, ID): - for i in range(self.rowCount()): - _ID = self.item(i, Perso.ID.value).text() - if _ID == ID or toInt(_ID) == ID: - name = self.item(i, Perso.name.value).text() - return name + index = self.getIndexFromID(ID) + if index.isValid(): + return self.name(index.row()) return None def getIndexFromID(self, ID): @@ -100,7 +114,7 @@ class persosModel(QStandardItemModel): color = iconColor(item.icon()) else: color = Qt.white - self.colorDialog = QColorDialog(color, self) + self.colorDialog = QColorDialog(color, self.mw) color = self.colorDialog.getColor(color) if color.isValid(): self.setPersoColor(item, color) diff --git a/src/models/plotModel.py b/src/models/plotModel.py index 0eb940c..eee884a 100644 --- a/src/models/plotModel.py +++ b/src/models/plotModel.py @@ -13,7 +13,6 @@ class plotModel(QStandardItemModel): self.mw = mainWindow() self.updatePlotPersoButton() - self.mw.mdlPersos.dataChanged.connect(self.updatePlotPersoButton) #################################################################################################### # QUERIES # @@ -168,18 +167,14 @@ class plotModel(QStandardItemModel): mpr = QSignalMapper(menu) for i in range(self.mw.mdlPersos.rowCount()): - if self.mw.mdlPersos.item(i, Perso.ID.value): - a = QAction(self.mw.mdlPersos.item(i, Perso.name.value).text(), menu) - a.triggered.connect(mpr.map) - mpr.setMapping(a, int(self.mw.mdlPersos.item(i, Perso.ID.value).text())) + a = QAction(self.mw.mdlPersos.name(i), menu) + a.setIcon(self.mw.mdlPersos.icon(i)) + a.triggered.connect(mpr.map) + mpr.setMapping(a, int(self.mw.mdlPersos.ID(i))) + + imp = toInt(self.mw.mdlPersos.importance(i)) - imp = self.mw.mdlPersos.item(i, Perso.importance.value) - if imp: - imp = toInt(imp.text()) - else: - imp = 0 - - menus[2-imp].addAction(a) + menus[2-imp].addAction(a) mpr.mapped.connect(self.addPlotPerso) self.mw.btnAddPlotPerso.setMenu(menu) \ No newline at end of file diff --git a/src/models/references.py b/src/models/references.py index 77ef4bb..2c496ff 100644 --- a/src/models/references.py +++ b/src/models/references.py @@ -53,10 +53,10 @@ def openReference(ref): mw = mainWindow() for i in range(mw.mdlPersos.rowCount()): - if mw.mdlPersos.item(i, Perso.ID.value).text() == _ref: + if mw.mdlPersos.ID(i) == _ref: mw.tabMain.setCurrentIndex(2) - # FIXME: update after creating a custom persomodel - #mw.lstPersos.setCurrentRow(i) + item = mw.lstPersos.getItemByID(_ref) + mw.lstPersos.setCurrentItem(item) return True print("Ref not found") diff --git a/src/ui/mainWindow.py b/src/ui/mainWindow.py index bb15ddb..836ebf5 100644 --- a/src/ui/mainWindow.py +++ b/src/ui/mainWindow.py @@ -372,39 +372,21 @@ class Ui_MainWindow(object): self.label_4 = QtWidgets.QLabel(self.infos) self.label_4.setObjectName("label_4") self.formLayout.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.label_4) - self.txtPersoMotivation = QtWidgets.QPlainTextEdit(self.infos) - self.txtPersoMotivation.setObjectName("txtPersoMotivation") - self.formLayout.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.txtPersoMotivation) self.label_5 = QtWidgets.QLabel(self.infos) self.label_5.setObjectName("label_5") self.formLayout.setWidget(3, QtWidgets.QFormLayout.LabelRole, self.label_5) - self.txtPersoGoal = QtWidgets.QPlainTextEdit(self.infos) - self.txtPersoGoal.setObjectName("txtPersoGoal") - self.formLayout.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.txtPersoGoal) self.label_6 = QtWidgets.QLabel(self.infos) self.label_6.setObjectName("label_6") self.formLayout.setWidget(4, QtWidgets.QFormLayout.LabelRole, self.label_6) - self.txtPersoConflict = QtWidgets.QPlainTextEdit(self.infos) - self.txtPersoConflict.setObjectName("txtPersoConflict") - self.formLayout.setWidget(4, QtWidgets.QFormLayout.FieldRole, self.txtPersoConflict) self.label_7 = QtWidgets.QLabel(self.infos) self.label_7.setObjectName("label_7") self.formLayout.setWidget(5, QtWidgets.QFormLayout.LabelRole, self.label_7) - self.txtPersoEpiphany = QtWidgets.QPlainTextEdit(self.infos) - self.txtPersoEpiphany.setObjectName("txtPersoEpiphany") - self.formLayout.setWidget(5, QtWidgets.QFormLayout.FieldRole, self.txtPersoEpiphany) self.label_24 = QtWidgets.QLabel(self.infos) self.label_24.setObjectName("label_24") self.formLayout.setWidget(6, QtWidgets.QFormLayout.LabelRole, self.label_24) - self.txtPersoSummarySentance = QtWidgets.QPlainTextEdit(self.infos) - self.txtPersoSummarySentance.setObjectName("txtPersoSummarySentance") - self.formLayout.setWidget(6, QtWidgets.QFormLayout.FieldRole, self.txtPersoSummarySentance) self.label_8 = QtWidgets.QLabel(self.infos) self.label_8.setObjectName("label_8") self.formLayout.setWidget(7, QtWidgets.QFormLayout.LabelRole, self.label_8) - self.txtPersoSummaryPara = QtWidgets.QPlainTextEdit(self.infos) - self.txtPersoSummaryPara.setObjectName("txtPersoSummaryPara") - self.formLayout.setWidget(7, QtWidgets.QFormLayout.FieldRole, self.txtPersoSummaryPara) self.horizontalLayout_21 = QtWidgets.QHBoxLayout() self.horizontalLayout_21.setObjectName("horizontalLayout_21") spacerItem10 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) @@ -425,7 +407,7 @@ class Ui_MainWindow(object): self.formLayout.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.sldPersoImportance) self.horizontalLayout_3 = QtWidgets.QHBoxLayout() self.horizontalLayout_3.setObjectName("horizontalLayout_3") - self.txtPersoName = QtWidgets.QLineEdit(self.infos) + self.txtPersoName = lineEditView(self.infos) self.txtPersoName.setObjectName("txtPersoName") self.horizontalLayout_3.addWidget(self.txtPersoName) self.btnPersoColor = QtWidgets.QPushButton(self.infos) @@ -433,12 +415,30 @@ class Ui_MainWindow(object): self.btnPersoColor.setObjectName("btnPersoColor") self.horizontalLayout_3.addWidget(self.btnPersoColor) self.formLayout.setLayout(0, QtWidgets.QFormLayout.FieldRole, self.horizontalLayout_3) + self.txtPersoMotivation = textEditView(self.infos) + self.txtPersoMotivation.setObjectName("txtPersoMotivation") + self.formLayout.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.txtPersoMotivation) + self.txtPersoGoal = textEditView(self.infos) + self.txtPersoGoal.setObjectName("txtPersoGoal") + self.formLayout.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.txtPersoGoal) + self.txtPersoConflict = textEditView(self.infos) + self.txtPersoConflict.setObjectName("txtPersoConflict") + self.formLayout.setWidget(4, QtWidgets.QFormLayout.FieldRole, self.txtPersoConflict) + self.txtPersoEpiphany = textEditView(self.infos) + self.txtPersoEpiphany.setObjectName("txtPersoEpiphany") + self.formLayout.setWidget(5, QtWidgets.QFormLayout.FieldRole, self.txtPersoEpiphany) + self.txtPersoSummarySentance = textEditView(self.infos) + self.txtPersoSummarySentance.setObjectName("txtPersoSummarySentance") + self.formLayout.setWidget(6, QtWidgets.QFormLayout.FieldRole, self.txtPersoSummarySentance) + self.txtPersoSummaryPara = textEditView(self.infos) + self.txtPersoSummaryPara.setObjectName("txtPersoSummaryPara") + self.formLayout.setWidget(7, QtWidgets.QFormLayout.FieldRole, self.txtPersoSummaryPara) self.tabPersos.addTab(self.infos, "") self.tab_11 = QtWidgets.QWidget() self.tab_11.setObjectName("tab_11") self.verticalLayout_17 = QtWidgets.QVBoxLayout(self.tab_11) self.verticalLayout_17.setObjectName("verticalLayout_17") - self.txtPersoSummaryFull = QtWidgets.QPlainTextEdit(self.tab_11) + self.txtPersoSummaryFull = textEditView(self.tab_11) self.txtPersoSummaryFull.setObjectName("txtPersoSummaryFull") self.verticalLayout_17.addWidget(self.txtPersoSummaryFull) self.horizontalLayout_22 = QtWidgets.QHBoxLayout() @@ -456,7 +456,7 @@ class Ui_MainWindow(object): self.tab_19.setObjectName("tab_19") self.horizontalLayout_30 = QtWidgets.QHBoxLayout(self.tab_19) self.horizontalLayout_30.setObjectName("horizontalLayout_30") - self.txtPersoNotes = QtWidgets.QPlainTextEdit(self.tab_19) + self.txtPersoNotes = textEditView(self.tab_19) self.txtPersoNotes.setObjectName("txtPersoNotes") self.horizontalLayout_30.addWidget(self.txtPersoNotes) self.tabPersos.addTab(self.tab_19, "") @@ -1176,13 +1176,13 @@ class Ui_MainWindow(object): self.actCloseProject.setText(_translate("MainWindow", "Close project")) from ui.views.plotTreeView import plotTreeView -from ui.views.outlineView import outlineView -from ui.views.persoTreeView import persoTreeView from ui.views.lineEditView import lineEditView -from ui.views.textEditView import textEditView -from ui.sldImportance import sldImportance -from ui.editors.mainEditor import mainEditor -from ui.views.metadataView import metadataView -from ui.views.basicItemView import basicItemView -from ui.views.treeView import treeView +from ui.views.outlineView import outlineView from ui.welcome import welcome +from ui.views.treeView import treeView +from ui.views.basicItemView import basicItemView +from ui.views.textEditView import textEditView +from ui.views.metadataView import metadataView +from ui.views.persoTreeView import persoTreeView +from ui.editors.mainEditor import mainEditor +from ui.sldImportance import sldImportance diff --git a/src/ui/mainWindow.ui b/src/ui/mainWindow.ui index 61eb826..dbae62f 100644 --- a/src/ui/mainWindow.ui +++ b/src/ui/mainWindow.ui @@ -748,9 +748,6 @@ - - - @@ -758,9 +755,6 @@ - - - @@ -768,9 +762,6 @@ - - - @@ -778,9 +769,6 @@ - - - @@ -788,9 +776,6 @@ - - - @@ -798,9 +783,6 @@ - - - @@ -842,7 +824,7 @@ - + @@ -853,6 +835,24 @@ + + + + + + + + + + + + + + + + + + @@ -861,7 +861,7 @@ - + @@ -899,7 +899,7 @@ - + diff --git a/src/ui/views/cmbOutlinePersoChoser.py b/src/ui/views/cmbOutlinePersoChoser.py index 372006d..722575b 100644 --- a/src/ui/views/cmbOutlinePersoChoser.py +++ b/src/ui/views/cmbOutlinePersoChoser.py @@ -31,25 +31,17 @@ class cmbOutlinePersoChoser(QComboBox): for importance in range(3): self.addItem(l[importance]) - # FIXME: segfault sometimes on QBrush next line self.setItemData(self.count()-1, QBrush(QColor(Qt.darkBlue)), Qt.ForegroundRole) self.setItemData(self.count()-1, QBrush(QColor(Qt.blue).lighter(190)), Qt.BackgroundRole) item = self.model().item(self.count()-1) item.setFlags(Qt.ItemIsEnabled) for i in range(self.mdlPersos.rowCount()): - imp = self.mdlPersos.item(i, Perso.importance.value) - if imp: - imp = toInt(imp.text()) - else: - imp = 0 + imp = toInt(self.mdlPersos.importance(i)) + if not 2-imp == importance: continue - item = self.mdlPersos.item(i, Perso.name.value) - item2 = self.mdlPersos.item(i, Perso.ID.value) - - if item and item2: # Otherwise error while loading - self.addItem(item.icon(), item.text(), item2.text()) - self.setItemData(i+1, item.text(), Qt.ToolTipRole) + self.addItem(self.mdlPersos.icon(i), self.mdlPersos.name(i), self.mdlPersos.ID(i)) + self.setItemData(self.count() - 1, self.mdlPersos.name(i), Qt.ToolTipRole) self._various = False diff --git a/src/ui/views/outlineBasics.py b/src/ui/views/outlineBasics.py index 472c987..9166960 100644 --- a/src/ui/views/outlineBasics.py +++ b/src/ui/views/outlineBasics.py @@ -79,15 +79,11 @@ class outlineBasics(QAbstractItemView): mpr = QSignalMapper(self.menuPOV) for i in range(mw.mdlPersos.rowCount()): - a = QAction(mw.mdlPersos.item(i, Perso.name.value).text(), self.menuPOV) + a = QAction(mw.mdlPersos.icon(i), mw.mdlPersos.name(i), self.menuPOV) a.triggered.connect(mpr.map) - mpr.setMapping(a, int(mw.mdlPersos.item(i, Perso.ID.value).text())) + mpr.setMapping(a, int(mw.mdlPersos.ID(i))) - imp = mw.mdlPersos.item(i, Perso.importance.value) - if imp: - imp = toInt(imp.text()) - else: - imp = 0 + imp = toInt(mw.mdlPersos.importance(i)) menus[2-imp].addAction(a) diff --git a/src/ui/views/outlineDelegates.py b/src/ui/views/outlineDelegates.py index beb86b3..b1ac288 100644 --- a/src/ui/views/outlineDelegates.py +++ b/src/ui/views/outlineDelegates.py @@ -98,7 +98,7 @@ class outlinePersoDelegate(QStyledItemDelegate): item = QModelIndex() for i in range(self.mdlPersos.rowCount()): - if self.mdlPersos.item(i, Perso.ID.value).text() == index.data(Perso.name.value): + if self.mdlPersos.ID(i) == index.data(): item = self.mdlPersos.index(i, Perso.name.value) opt = QStyleOptionViewItem(option) @@ -124,30 +124,23 @@ class outlinePersoDelegate(QStyledItemDelegate): def setEditorData(self, editor, index): #editor.addItem("") editor.addItem(QIcon.fromTheme("edit-delete"), self.tr("None")) - #for i in range(self.mdlPersos.rowCount()): - #editor.addItem(self.mdlPersos.item(i, Perso.name.value).text(), self.mdlPersos.item(i, Perso.ID.value).text()) - #editor.setItemData(i+1, self.mdlPersos.item(i, Perso.name.value).text(), Qt.ToolTipRole) l = [self.tr("Main"), self.tr("Secondary"), self.tr("Minor")] for importance in range(3): editor.addItem(l[importance]) - editor.setItemData(editor.count()-1, QBrush(Qt.darkBlue), Qt.ForegroundRole) - editor.setItemData(editor.count()-1, QBrush(QColor(Qt.blue).lighter(190)), Qt.BackgroundRole) - item = editor.model().item(editor.count()-1) + editor.setItemData(editor.count() - 1, QBrush(Qt.darkBlue), Qt.ForegroundRole) + editor.setItemData(editor.count() - 1, QBrush(QColor(Qt.blue).lighter(190)), Qt.BackgroundRole) + item = editor.model().item(editor.count() - 1) item.setFlags(Qt.ItemIsEnabled) for i in range(self.mdlPersos.rowCount()): - imp = self.mdlPersos.item(i, Perso.importance.value) - if imp: - imp = toInt(imp.text()) - else: - imp = 0 + imp = toInt(self.mdlPersos.importance(i)) if not 2-imp == importance: continue - try: - editor.addItem(self.mdlPersos.item(i, Perso.name.value).icon(), self.mdlPersos.item(i, Perso.name.value).text(), self.mdlPersos.item(i, Perso.ID.value).text()) - editor.setItemData(i+1, self.mdlPersos.item(i, Perso.name.value).text(), Qt.ToolTipRole) - except: - pass + #try: + editor.addItem(self.mdlPersos.icon(i), self.mdlPersos.name(i), self.mdlPersos.ID(i)) + editor.setItemData(editor.count() - 1, self.mdlPersos.name(i), Qt.ToolTipRole) + #except: + #pass editor.setCurrentIndex(editor.findData(index.data())) editor.showPopup() @@ -156,12 +149,6 @@ class outlinePersoDelegate(QStyledItemDelegate): val = editor.currentData() model.setData(index, val) - #def displayText(self, value, locale): - #for i in range(self.mdlPersos.rowCount()): - #if self.mdlPersos.item(i, Perso.ID.value).text() == value: - #return self.mdlPersos.item(i, Perso.name.value).text() - #return "" - def paint(self, painter, option, index): ##option.rect.setWidth(option.rect.width() - 18) #QStyledItemDelegate.paint(self, painter, option, index) @@ -169,7 +156,7 @@ class outlinePersoDelegate(QStyledItemDelegate): item = QModelIndex() for i in range(self.mdlPersos.rowCount()): - if self.mdlPersos.item(i, Perso.ID.value).text() == index.data(Perso.name.value): + if self.mdlPersos.ID(i) == index.data(): item = self.mdlPersos.index(i, Perso.name.value) opt = QStyleOptionViewItem(option) diff --git a/src/ui/views/persoTreeView.py b/src/ui/views/persoTreeView.py index 01f99e6..2f6c16e 100644 --- a/src/ui/views/persoTreeView.py +++ b/src/ui/views/persoTreeView.py @@ -17,6 +17,8 @@ class persoTreeView(QTreeWidget): self._updating = False self.setRootIsDecorated(False) self.setIndentation(10) + self.setHeaderHidden(True) + self.setIconSize(QSize(24, 24)) self.setColumnCount(1) self._rootItem = QTreeWidgetItem() @@ -46,7 +48,7 @@ class persoTreeView(QTreeWidget): self.updateItems() def updateMaybe2(self, parent, first, last): - "Rows inserted or removed" + #Rows inserted or removed, we update only if they are topLevel rows. if parent == QModelIndex(): self.updateItems() @@ -58,8 +60,14 @@ class persoTreeView(QTreeWidget): sub = item.child(c) ID = sub.data(0, Qt.UserRole) if ID: + # Update name name = self._model.getPersoNameByID(ID) sub.setText(0, name) + # Update icon + px = QPixmap(32, 32) + color = QColor(self._model.getPersoColorByID(ID)) + px.fill(color) + sub.setIcon(0, QIcon(px)) def updateItems(self): if not self._model: @@ -102,9 +110,11 @@ class persoTreeView(QTreeWidget): self._updating = False def getItemByID(self, ID): - for i in range(self.topLevelItemCount()): - if self.topLevelItem(i).data(0, Qt.UserRole) == ID: - return self.topLevelItem(i) + for t in range(self.topLevelItemCount()): + for i in range(self.topLevelItem(t).childCount()): + item = self.topLevelItem(t).child(i) + if item.data(0, Qt.UserRole) == ID: + return item def currentPersoIndex(self): ID = None