Working on curstom Perso Model

This commit is contained in:
Olivier Keshavjee 2015-06-28 23:46:51 +02:00
parent be703ad060
commit 83552ef210
7 changed files with 420 additions and 163 deletions

View file

@ -8,8 +8,9 @@ from ui.helpLabel import helpLabel
from loadSave import *
from enums import *
from models.outlineModel import *
from models.persosModel import *
from models.plotModel import *
from models.persosProxyModel import *
#from models.persosProxyModel import *
from functions import *
from settingsWindow import *
import settings
@ -119,118 +120,134 @@ class MainWindow(QMainWindow, Ui_MainWindow):
# PERSOS
###############################################################################
def createPerso(self):
"""Creates a perso by adding a row in mdlPersos
and a column in mdlPersosInfos with same ID"""
p = QStandardItem(self.tr("New character"))
pid = self.getPersosID()
#self.checkPersosID() # Attributes a persoID (which is logically pid)
self.mdlPersos.appendRow([p, QStandardItem(pid), QStandardItem("0")])
#def createPerso(self):
#"""Creates a perso by adding a row in mdlPersos
#and a column in mdlPersosInfos with same ID"""
#p = QStandardItem(self.tr("New character"))
#pid = self.getPersosID()
##self.checkPersosID() # Attributes a persoID (which is logically pid)
#self.mdlPersos.appendRow([p, QStandardItem(pid), QStandardItem("0")])
self.setPersoColor(self.mdlPersos.rowCount() - 1,
randomColor(QColor(Qt.white)))
#self.setPersoColor(self.mdlPersos.rowCount() - 1,
#randomColor(QColor(Qt.white)))
# Add column in persos infos
self.mdlPersosInfos.insertColumn(self.mdlPersosInfos.columnCount(),
[QStandardItem(pid)])
self.mdlPersosInfos.setHorizontalHeaderItem(
self.mdlPersosInfos.columnCount() - 1,
QStandardItem("Valeur"))
## Add column in persos infos
#self.mdlPersosInfos.insertColumn(self.mdlPersosInfos.columnCount(),
#[QStandardItem(pid)])
#self.mdlPersosInfos.setHorizontalHeaderItem(
#self.mdlPersosInfos.columnCount() - 1,
#QStandardItem("Valeur"))
def getPersosID(self):
"""Returns an unused perso ID (row 1)."""
vals = []
for i in range(self.mdlPersos.rowCount()):
item = self.mdlPersos.item(i, Perso.ID.value)
if item and item.text():
vals.append(int(item.text()))
#def getPersosID(self):
#"""Returns an unused perso ID (row 1)."""
#vals = []
#for i in range(self.mdlPersos.rowCount()):
#item = self.mdlPersos.item(i, Perso.ID.value)
#if item and item.text():
#vals.append(int(item.text()))
k = 0
while k in vals:
k += 1
return str(k)
#k = 0
#while k in vals:
#k += 1
#return str(k)
def checkPersosID(self):
"""Checks whether some persos ID (row 1) are empty.
If so, assign an ID"""
for i in range(self.mdlPersos.rowCount()):
item = self.mdlPersos.item(i, Perso.ID.value)
if not item:
item = QStandardItem()
item.setText(self.getPersosID())
self.mdlPersos.setItem(i, Perso.ID.value, item)
#def checkPersosID(self):
#"""Checks whether some persos ID (row 1) are empty.
#If so, assign an ID"""
#for i in range(self.mdlPersos.rowCount()):
#item = self.mdlPersos.item(i, Perso.ID.value)
#if not item:
#item = QStandardItem()
#item.setText(self.getPersosID())
#self.mdlPersos.setItem(i, Perso.ID.value, item)
def removePerso(self):
if self.mdlPersosProxy:
i = self.mdlPersosProxy.mapToSource(self.lstPersos.currentIndex())
else:
i = self.lstPersos.currentIndex()
self.mdlPersos.takeRow(i.row())
self.mdlPersosInfos.takeColumn(i.row() + 1)
#def removePerso(self):
#if self.mdlPersosProxy:
#i = self.mdlPersosProxy.mapToSource(self.lstPersos.currentIndex())
#else:
#i = self.lstPersos.currentIndex()
#self.mdlPersos.takeRow(i.row())
#self.mdlPersosInfos.takeColumn(i.row() + 1)
def changeCurrentPerso(self, trash=None):
if self.mdlPersosProxy:
idx = self.mdlPersosProxy.mapToSource(self.lstPersos.currentIndex())
else:
idx = self.lstPersos.currentIndex()
index = self.lstPersos.currentPersoIndex()
self.mprPersos.setCurrentModelIndex(idx)
if not index.isValid():
self.tabPlot.setEnabled(False)
return
# Button color
self.updatePersoColor()
self.tabPersos.setEnabled(True)
# FIXME
#self.txtPlotName.setCurrentModelIndex(index)
#self.txtPlotDescription.setCurrentModelIndex(index)
#self.txtPlotResult.setCurrentModelIndex(index)
#self.sldPlotImportance.setCurrentModelIndex(index)
## Button color
self.mdlPersos.updatePersoColor(index)
#if self.mdlPersosProxy:
#idx = self.mdlPersosProxy.mapToSource(self.lstPersos.currentIndex())
#else:
#idx = self.lstPersos.currentIndex()
# detailed infos
pid = self.mdlPersos.item(idx.row(), Perso.ID.value).text()
for c in range(self.mdlPersosInfos.columnCount()):
pid2 = self.mdlPersosInfos.item(0, c).text()
self.tblPersoInfos.setColumnHidden(c, c != 0 and pid != pid2)
#self.mprPersos.setCurrentModelIndex(idx)
self.resizePersosInfos()
def updatePersoColor(self):
if self.mdlPersosProxy:
idx = self.mdlPersosProxy.mapToSource(self.lstPersos.currentIndex())
else:
idx = self.lstPersos.currentIndex()
## detailed infos
#pid = self.mdlPersos.item(idx.row(), Perso.ID.value).text()
#for c in range(self.mdlPersosInfos.columnCount()):
#pid2 = self.mdlPersosInfos.item(0, c).text()
#self.tblPersoInfos.setColumnHidden(c, c != 0 and pid != pid2)
icon = self.mdlPersos.item(idx.row()).icon()
color = iconColor(icon).name() if icon else ""
self.btnPersoColor.setStyleSheet("background:{};".format(color))
#self.resizePersosInfos()
def resizePersosInfos(self):
self.tblPersoInfos.resizeColumnToContents(0)
w = self.tblPersoInfos.viewport().width()
w2 = self.tblPersoInfos.columnWidth(0)
#def updatePersoColor(self):
#if self.mdlPersosProxy:
#idx = self.mdlPersosProxy.mapToSource(self.lstPersos.currentIndex())
#else:
#idx = self.lstPersos.currentIndex()
if self.mdlPersosProxy:
current = self.mdlPersosProxy.mapToSource(
self.lstPersos.currentIndex()).row() + 1
else:
current = self.lstPersos.currentIndex().row() + 1
#icon = self.mdlPersos.item(idx.row()).icon()
#color = iconColor(icon).name() if icon else ""
#self.btnPersoColor.setStyleSheet("background:{};".format(color))
self.tblPersoInfos.setColumnWidth(current, w - w2)
#def resizePersosInfos(self):
#self.tblPersoInfos.resizeColumnToContents(0)
#w = self.tblPersoInfos.viewport().width()
#w2 = self.tblPersoInfos.columnWidth(0)
def chosePersoColor(self):
if self.mdlPersosProxy:
idx = self.mdlPersosProxy.mapToSource(self.lstPersos.currentIndex())
else:
idx = self.lstPersos.currentIndex()
#if self.mdlPersosProxy:
#current = self.mdlPersosProxy.mapToSource(
#self.lstPersos.currentIndex()).row() + 1
#else:
#current = self.lstPersos.currentIndex().row() + 1
item = self.mdlPersos.item(idx.row(), Perso.name.value)
if item:
color = iconColor(item.icon())
else:
color = Qt.white
self.colorDialog = QColorDialog(color, self)
color = self.colorDialog.getColor(color)
if color.isValid():
self.setPersoColor(idx.row(), color)
self.updatePersoColor()
#self.tblPersoInfos.setColumnWidth(current, w - w2)
def setPersoColor(self, row, color):
px = QPixmap(32, 32)
px.fill(color)
self.mdlPersos.item(row, Perso.name.value).setIcon(QIcon(px))
#def chosePersoColor(self):
#if self.mdlPersosProxy:
#idx = self.mdlPersosProxy.mapToSource(self.lstPersos.currentIndex())
#else:
#idx = self.lstPersos.currentIndex()
#item = self.mdlPersos.item(idx.row(), Perso.name.value)
#if item:
#color = iconColor(item.icon())
#else:
#color = Qt.white
#self.colorDialog = QColorDialog(color, self)
#color = self.colorDialog.getColor(color)
#if color.isValid():
#self.setPersoColor(idx.row(), color)
#self.updatePersoColor()
#def setPersoColor(self, row, color):
#px = QPixmap(32, 32)
#px.fill(color)
#self.mdlPersos.item(row, Perso.name.value).setIcon(QIcon(px))
###############################################################################
# PLOTS
@ -349,7 +366,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.mdlFlatData.dataChanged.connect(self.startTimerNoChanges)
self.mdlOutline.dataChanged.connect(self.startTimerNoChanges)
self.mdlPersos.dataChanged.connect(self.startTimerNoChanges)
self.mdlPersosInfos.dataChanged.connect(self.startTimerNoChanges)
#self.mdlPersosInfos.dataChanged.connect(self.startTimerNoChanges)
self.mdlStatus.dataChanged.connect(self.startTimerNoChanges)
self.mdlLabels.dataChanged.connect(self.startTimerNoChanges)
@ -364,7 +381,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
#FIXME: set Window's name: project name
# Stuff
self.checkPersosID()
#self.checkPersosID() # Should'n be necessary any longer
# Show main Window
self.stack.setCurrentIndex(1)
@ -447,8 +464,8 @@ class MainWindow(QMainWindow, Ui_MainWindow):
"flatModel.xml"))
files.append((saveStandardItemModelXML(self.mdlPersos),
"perso.xml"))
files.append((saveStandardItemModelXML(self.mdlPersosInfos),
"persoInfos.xml"))
#files.append((saveStandardItemModelXML(self.mdlPersosInfos),
#"persoInfos.xml"))
files.append((saveStandardItemModelXML(self.mdlLabels),
"labels.xml"))
files.append((saveStandardItemModelXML(self.mdlStatus),
@ -470,9 +487,9 @@ class MainWindow(QMainWindow, Ui_MainWindow):
def loadEmptyDatas(self):
self.mdlFlatData = QStandardItemModel(self)
self.mdlPersos = QStandardItemModel(self)
self.mdlPersosProxy = persosProxyModel(self)
self.mdlPersosInfos = QStandardItemModel(self)
self.mdlPersos = persosModel(self)
#self.mdlPersosProxy = persosProxyModel(self)
#self.mdlPersosInfos = QStandardItemModel(self)
self.mdlLabels = QStandardItemModel(self)
self.mdlStatus = QStandardItemModel(self)
self.mdlPlots = plotModel(self)
@ -497,11 +514,11 @@ class MainWindow(QMainWindow, Ui_MainWindow):
errors.append("perso.xml")
if "persoInfos.xml" in files:
loadStandardItemModelXML(self.mdlPersosInfos,
files["persoInfos.xml"], fromString=True)
else:
errors.append("perso.xml")
#if "persoInfos.xml" in files:
#loadStandardItemModelXML(self.mdlPersosInfos,
#files["persoInfos.xml"], fromString=True)
#else:
#errors.append("perso.xml")
if "labels.xml" in files:
loadStandardItemModelXML(self.mdlLabels,
@ -550,9 +567,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
def makeUIConnections(self):
"Connections that have to be made once only, event when new project is loaded."
self.btnAddPerso.clicked.connect(self.createPerso, AUC)
self.btnRmPerso.clicked.connect(self.removePerso, AUC)
self.btnPersoColor.clicked.connect(self.chosePersoColor, AUC)
self.lstPersos.currentItemChanged.connect(self.changeCurrentPerso, AUC)
self.txtPlotFilter.textChanged.connect(self.lstPlots.setFilter, AUC)
self.lstPlots.currentItemChanged.connect(self.changeCurrentPlot, AUC)
@ -609,17 +624,22 @@ class MainWindow(QMainWindow, Ui_MainWindow):
widget.setCurrentModelIndex(self.mdlFlatData.index(0, col))
# Persos
if self.mdlPersosProxy:
self.mdlPersosProxy.setSourceModel(self.mdlPersos)
self.lstPersos.setModel(self.mdlPersosProxy)
else:
self.lstPersos.setModel(self.mdlPersos)
self.lstPersos.setPersosModel(self.mdlPersos)
self.btnAddPerso.clicked.connect(self.mdlPersos.addPerso, AUC)
self.btnRmPerso.clicked.connect(self.mdlPersos.removePerso, AUC)
self.btnPersoColor.clicked.connect(self.mdlPersos.chosePersoColor, AUC)
#if self.mdlPersosProxy:
#self.mdlPersosProxy.setSourceModel(self.mdlPersos)
#self.lstPersos.setModel(self.mdlPersosProxy)
#else:
#self.lstPersos.setModel(self.mdlPersos)
self.tblPersoInfos.setModel(self.mdlPersosInfos)
self.tblPersoInfos.setRowHidden(0, True)
self.btnPersoAddInfo.clicked.connect(lambda:
self.mdlPersosInfos.insertRow(self.mdlPersosInfos.rowCount()), AUC)
#self.tblPersoInfos.setModel(self.mdlPersosInfos)
#self.tblPersoInfos.setRowHidden(0, True)
#FIXME
#self.btnPersoAddInfo.clicked.connect(lambda:
#self.mdlPersosInfos.insertRow(self.mdlPersosInfos.rowCount()), AUC)
self.mprPersos = QDataWidgetMapper()
self.mprPersos.setModel(self.mdlPersos)
@ -643,8 +663,8 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.mprPersos.setCurrentIndex(0)
self.lstPersos.selectionModel().currentChanged.connect(
self.changeCurrentPerso, AUC)
self.tabPersos.currentChanged.connect(self.resizePersosInfos)
self.mdlPersos.updatePersoColor, AUC)
#self.tabPersos.currentChanged.connect(self.resizePersosInfos)
# Plots
self.lstPlots.setPlotModel(self.mdlPlots)
@ -712,7 +732,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.mdlFlatData.setVerticalHeaderLabels(["Infos générales", "Summary"])
self.tblDebugFlatData.setModel(self.mdlFlatData)
self.tblDebugPersos.setModel(self.mdlPersos)
self.tblDebugPersosInfos.setModel(self.mdlPersosInfos)
#self.tblDebugPersosInfos.setModel(self.mdlPersosInfos)
self.tblDebugPlots.setModel(self.mdlPlots)
self.tblDebugPlotsPersos.setModel(self.mdlPlots)
self.tblDebugSubPlots.setModel(self.mdlPlots)

125
src/models/persosModel.py Normal file
View file

@ -0,0 +1,125 @@
#!/usr/bin/env python
#--!-- coding: utf8 --!--
from qt import *
from enums import *
from functions import *
class persosModel(QStandardItemModel):
def __init__(self, parent):
QStandardItemModel.__init__(self, 0, 3, parent)
self.setHorizontalHeaderLabels([i.name for i in Plot])
self.mw = mainWindow()
#self._proxy = plotsProxyModel()
#self._proxy.setSourceModel(self)
###############################################################################
# QUERRIES
###############################################################################
def getPersosByImportance(self):
persos = [[], [], []]
for i in range(self.rowCount()):
importance = self.item(i, Perso.importance.value).text()
ID = self.item(i, Perso.ID.value).text()
persos[2-toInt(importance)].append(ID)
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
return None
def getIndexFromID(self, ID):
for i in range(self.rowCount()):
_ID = self.item(i, Perso.ID.value).text()
if _ID == ID or toInt(_ID) == ID:
return self.index(i, 0)
return QModelIndex()
def getPersoColorByID(self, ID):
idx = self.getIndexFromID(ID)
return self.getPersoColorName(idx)
def getPersoColorName(self, index):
icon = self.item(index.row()).icon()
return iconColor(icon).name() if icon else ""
def currentListIndex(self):
i = self.mw.lstPersos.currentIndex()
if i .isValid():
return i
else:
return None
def currentPersoIndex(self):
return self.mw.lstPersos.currentPersoIndex()
###############################################################################
# ADDING / REMOVING
###############################################################################
def addPerso(self):
"""Creates a perso by adding a row in mdlPersos
and a column in mdlPersosInfos with same ID"""
p = QStandardItem(self.tr("New character"))
self.setPersoColor(p, randomColor(QColor(Qt.white)))
pid = self.getUniqueID()
self.appendRow([p, QStandardItem(pid), QStandardItem("0")])
def getUniqueID(self, parent=QModelIndex()):
"""Returns an unused perso ID (row 1)."""
vals = []
for i in range(self.rowCount(parent)):
index = self.index(i, Perso.ID.value, parent)
if index.isValid() and index.data():
vals.append(int(index.data()))
k = 0
while k in vals:
k += 1
return str(k)
def removePerso(self):
index = self.currentPersoIndex()
self.takeRow(index.row())
def setPersoColor(self, item, color):
px = QPixmap(32, 32)
px.fill(color)
item.setIcon(QIcon(px))
def chosePersoColor(self):
idx = self.currentPersoIndex()
item = self.item(idx.row(), Perso.name.value)
if item:
color = iconColor(item.icon())
else:
color = Qt.white
self.colorDialog = QColorDialog(color, self)
color = self.colorDialog.getColor(color)
if color.isValid():
self.setPersoColor(item, color)
self.updatePersoColor(idx)
###############################################################################
# UI
###############################################################################
def updatePersoColor(self, idx):
#idx = self.currentPersoIndex()
color = self.getPersoColorName(idx)
self.mw.btnPersoColor.setStyleSheet("background:{};".format(color))
###############################################################################
# PERSO INFOS
###############################################################################
def addPersoInfo(self):
#FIXME
pass

View file

@ -4,7 +4,6 @@
from qt import *
from enums import *
from functions import *
from models.plotsProxyModel import *
class plotModel(QStandardItemModel):
@ -12,8 +11,6 @@ class plotModel(QStandardItemModel):
QStandardItemModel.__init__(self, 0, 3, parent)
self.setHorizontalHeaderLabels([i.name for i in Plot])
self.mw = mainWindow()
#self._proxy = plotsProxyModel()
#self._proxy.setSourceModel(self)
self.updatePlotPersoButton()
self.mw.mdlPersos.dataChanged.connect(self.updatePlotPersoButton)
@ -185,21 +182,4 @@ class plotModel(QStandardItemModel):
menus[2-imp].addAction(a)
mpr.mapped.connect(self.addPlotPerso)
self.mw.btnAddPlotPerso.setMenu(menu)
####################################################################################################
# PROXY MODEL (UNUSED) #
####################################################################################################
def viewModel(self):
"Returns proxy model if any, else self"
if self._proxy:
return self._proxy
else:
return self
def toSource(self, index):
if self._proxy:
return self._proxy.mapToSource(index)
else:
return index
self.mw.btnAddPlotPerso.setMenu(menu)

View file

@ -331,10 +331,11 @@ class Ui_MainWindow(object):
self.groupBox.setObjectName("groupBox")
self.verticalLayout_8 = QtWidgets.QVBoxLayout(self.groupBox)
self.verticalLayout_8.setObjectName("verticalLayout_8")
self.lstPersos = QtWidgets.QListView(self.groupBox)
self.lstPersos = persoTreeView(self.groupBox)
self.lstPersos.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
self.lstPersos.setDragEnabled(True)
self.lstPersos.setObjectName("lstPersos")
self.lstPersos.headerItem().setText(0, "1")
self.verticalLayout_8.addWidget(self.lstPersos)
self.horizontalLayout_14 = QtWidgets.QHBoxLayout()
self.horizontalLayout_14.setObjectName("horizontalLayout_14")
@ -1036,10 +1037,10 @@ class Ui_MainWindow(object):
self.retranslateUi(MainWindow)
self.stack.setCurrentIndex(1)
self.tabMain.setCurrentIndex(6)
self.tabMain.setCurrentIndex(2)
self.tabSummary.setCurrentIndex(0)
self.tabPersos.setCurrentIndex(0)
self.tabPlot.setCurrentIndex(1)
self.tabPlot.setCurrentIndex(0)
self.comboBox_2.setCurrentIndex(0)
self.stkPlotSummary.setCurrentIndex(0)
self.tabRedacInfos.setCurrentIndex(0)
@ -1175,12 +1176,13 @@ class Ui_MainWindow(object):
self.actCloseProject.setText(_translate("MainWindow", "Close project"))
from ui.views.plotTreeView import plotTreeView
from ui.views.metadataView import metadataView
from ui.welcome import welcome
from ui.views.basicItemView import basicItemView
from ui.views.textEditView import textEditView
from ui.views.outlineView import outlineView
from ui.sldImportance import sldImportance
from ui.views.treeView import treeView
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.welcome import welcome

View file

@ -109,7 +109,7 @@
<item>
<widget class="QTabWidget" name="tabMain">
<property name="currentIndex">
<number>6</number>
<number>2</number>
</property>
<property name="documentMode">
<bool>true</bool>
@ -663,13 +663,18 @@
</property>
<layout class="QVBoxLayout" name="verticalLayout_8">
<item>
<widget class="QListView" name="lstPersos">
<widget class="persoTreeView" name="lstPersos">
<property name="horizontalScrollBarPolicy">
<enum>Qt::ScrollBarAlwaysOff</enum>
</property>
<property name="dragEnabled">
<bool>true</bool>
</property>
<column>
<property name="text">
<string notr="true">1</string>
</property>
</column>
</widget>
</item>
<item>
@ -1075,7 +1080,7 @@
</widget>
<widget class="QTabWidget" name="tabPlot">
<property name="currentIndex">
<number>1</number>
<number>0</number>
</property>
<property name="documentMode">
<bool>true</bool>
@ -2045,6 +2050,11 @@
<header>ui.editors.mainEditor.h</header>
<container>1</container>
</customwidget>
<customwidget>
<class>persoTreeView</class>
<extends>QTreeWidget</extends>
<header>ui.views.persoTreeView.h</header>
</customwidget>
</customwidgets>
<resources/>
<connections>
@ -2145,7 +2155,4 @@
</hints>
</connection>
</connections>
<buttongroups>
<buttongroup name="buttonGroup"/>
</buttongroups>
</ui>

View file

@ -0,0 +1,121 @@
#!/usr/bin/env python
#--!-- coding: utf8 --!--
from qt import *
from enums import *
from functions import *
import settings
class persoTreeView(QTreeWidget):
def __init__(self, parent=None):
QTreeWidget.__init__(self, parent)
self._model = None
self._catRow = [-1, -1, -1]
self._filter = ""
self._lastID = -1
self._updating = False
self.setRootIsDecorated(False)
self.setIndentation(10)
self.setColumnCount(1)
self._rootItem = QTreeWidgetItem()
self.insertTopLevelItem(0, self._rootItem)
def setPersosModel(self, model):
self._model = model
self._model.dataChanged.connect(self.updateMaybe)
self._model.rowsInserted.connect(self.updateMaybe2)
self._model.rowsRemoved.connect(self.updateMaybe2)
self.updateItems()
def setFilter(self, text):
self._filter = text
self.updateItems()
def updateMaybe(self, topLeft, bottomRight):
if topLeft.parent() != QModelIndex():
return
if topLeft.column() <= Perso.name.value <= bottomRight.column():
# Update name
self.updateNames()
elif topLeft.column() <= Perso.importance.value <= bottomRight.column():
# Importance changed
self.updateItems()
def updateMaybe2(self, parent, first, last):
"Rows inserted or removed"
if parent == QModelIndex():
self.updateItems()
def updateNames(self):
for i in range(self.topLevelItemCount()):
item = self.topLevelItem(i)
for c in range(item.childCount()):
sub = item.child(c)
ID = sub.data(0, Qt.UserRole)
if ID:
name = self._model.getPersoNameByID(ID)
sub.setText(0, name)
def updateItems(self):
if not self._model:
return
if self.currentItem():
self._lastID = self.currentItem().data(0, Qt.UserRole)
self._updating = True
self.clear()
persos = self._model.getPersosByImportance()
h = [self.tr("Main"), self.tr("Secondary"), self.tr("Minor")]
for i in range(3):
cat = QTreeWidgetItem(self, [h[i]])
cat.setBackground(0, QBrush(QColor(Qt.blue).lighter(190)))
cat.setForeground(0, QBrush(Qt.darkBlue))
cat.setTextAlignment(0, Qt.AlignCenter)
f = cat.font(0)
f.setBold(True)
cat.setFont(0, f)
self.addTopLevelItem(cat)
#cat.setChildIndicatorPolicy(cat.DontShowIndicator)
for ID in persos[i]:
name = self._model.getPersoNameByID(ID)
if not self._filter.lower() in name.lower():
continue
item = QTreeWidgetItem(cat, [name])
item.setData(0, Qt.UserRole, ID)
px = QPixmap(32, 32)
color = QColor(self._model.getPersoColorByID(ID))
px.fill(color)
item.setIcon(0, QIcon(px))
if ID == self._lastID:
self.setCurrentItem(item)
self.expandAll()
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)
def currentPersoIndex(self):
ID = None
if self.currentItem():
ID = self.currentItem().data(0, Qt.UserRole)
return self._model.getIndexFromID(ID)
def mouseDoubleClickEvent(self, event):
item = self.currentItem()
# Catching double clicks to forbid collapsing of toplevel items
if item.parent():
QTreeWidget.mouseDoubleClickEvent(self, event)

View file

@ -5,8 +5,9 @@ from qt import *
from functions import *
from ui.welcome_ui import *
from models.outlineModel import *
from models.persosModel import *
from models.plotModel import *
from models.persosProxyModel import *
#from models.persosProxyModel import *
import settings
import locale
import imp
@ -320,13 +321,14 @@ class welcome(QWidget, Ui_welcome):
self.mw.mdlFlatData = QStandardItemModel(2, 8, self.mw)
# Persos
self.mw.mdlPersos = QStandardItemModel(0, 0, self.mw)
#self.mw.mdlPersos = QStandardItemModel(0, 0, self.mw)
self.mw.mdlPersos = persosModel(self.mw)
#self.mdlPersosProxy = None # persosProxyModel() # None
self.mw.mdlPersosProxy = persosProxyModel(self.mw)
#self.mw.mdlPersosProxy = persosProxyModel(self.mw)
self.mw.mdlPersosInfos = QStandardItemModel(1, 0, self.mw)
self.mw.mdlPersosInfos.insertColumn(0, [QStandardItem("ID")])
self.mw.mdlPersosInfos.setHorizontalHeaderLabels(["Description"])
#self.mw.mdlPersosInfos = QStandardItemModel(1, 0, self.mw)
#self.mw.mdlPersosInfos.insertColumn(0, [QStandardItem("ID")])
#self.mw.mdlPersosInfos.setHorizontalHeaderLabels(["Description"])
# Labels
self.mw.mdlLabels = QStandardItemModel(self.mw)