mirror of
https://github.com/olivierkes/manuskript.git
synced 2024-05-15 02:12:29 +12:00
Working on curstom Perso Model
This commit is contained in:
parent
be703ad060
commit
83552ef210
|
@ -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
125
src/models/persosModel.py
Normal 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
|
|
@ -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)
|
|
@ -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
|
||||
|
|
|
@ -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>
|
||||
|
|
121
src/ui/views/persoTreeView.py
Normal file
121
src/ui/views/persoTreeView.py
Normal 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)
|
||||
|
|
@ -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)
|
||||
|
|
Loading…
Reference in a new issue