Many things working great now

This commit is contained in:
Olivier Keshavjee 2015-06-04 07:08:49 +02:00
parent 245ea72eed
commit d58ae6a662
10 changed files with 314 additions and 37 deletions

View file

@ -12,6 +12,7 @@ from ui.treeOutlineDelegates import *
from loadSave import *
from enums import *
from models.outlineModel import *
from models.persosProxyModel import *
class MainWindow(QMainWindow, Ui_MainWindow):
def __init__(self):
@ -84,10 +85,15 @@ class MainWindow(QMainWindow, Ui_MainWindow):
# Persos
self.mdlPersos = QStandardItemModel(0, 10)
self.mdlPersosProxy = persosProxyModel()
self.mdlPersosProxy.setSourceModel(self.mdlPersos)
self.mdlPersosInfos = QStandardItemModel(1, 0)
self.mdlPersosInfos.insertColumn(0, [QStandardItem("ID")])
self.mdlPersosInfos.setHorizontalHeaderLabels(["Description"])
self.lstPersos.setModel(self.mdlPersos)
#self.lstPersos.setModel(self.mdlPersos)
self.lstPersos.setModel(self.mdlPersosProxy)
self.tblPersoInfos.setModel(self.mdlPersosInfos)
self.tblPersoInfos.setRowHidden(0, True)
@ -114,7 +120,6 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.sldPersoImportance.importanceChanged.connect(self.mprPersos.submit)
self.mprPersos.setCurrentIndex(0)
self.lstPersos.selectionModel().currentChanged.connect(self.mprPersos.setCurrentModelIndex)
self.lstPersos.selectionModel().currentChanged.connect(self.changeCurrentPerso)
self.tabPersos.currentChanged.connect(self.resizePersosInfos)
@ -180,6 +185,8 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.treeRedacOutline.selectionModel().currentChanged.connect(self.cmbRedacStatus.setCurrentModelIndex)
self.treeRedacOutline.selectionModel().currentChanged.connect(lambda idx: self.lblRedacPOV.setHidden(idx.internalPointer().isFolder()))
self.treeRedacOutline.selectionModel().currentChanged.connect(lambda idx: self.cmbRedacPOV.setHidden(idx.internalPointer().isFolder()))
self.treePlanOutline.selectionModel().currentChanged.connect(lambda idx: self.lblPlanPOV.setHidden(idx.internalPointer().isFolder()))
self.treePlanOutline.selectionModel().currentChanged.connect(lambda idx: self.cmbPlanPOV.setHidden(idx.internalPointer().isFolder()))
#Debug
@ -260,12 +267,14 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.mdlPersos.setItem(i, Perso.ID.value, item)
def removePerso(self):
i = self.lstPersos.currentIndex()
i = self.mdlPersosProxy.mapToSource(self.lstPersos.currentIndex())
self.mdlPersos.takeRow(i.row())
self.mdlPersosInfos.takeColumn(i.row()+1)
def changeCurrentPerso(self, trash=None):
idx = self.lstPersos.currentIndex()
idx = self.mdlPersosProxy.mapToSource(self.lstPersos.currentIndex())
self.mprPersos.setCurrentModelIndex(idx)
pid = self.mdlPersos.item(idx.row(), Perso.ID.value).text()
for c in range(self.mdlPersosInfos.columnCount()):
pid2 = self.mdlPersosInfos.item(0, c).text()
@ -277,7 +286,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.tblPersoInfos.resizeColumnToContents(0)
w = self.tblPersoInfos.viewport().width()
w2 = self.tblPersoInfos.columnWidth(0)
current = self.lstPersos.currentIndex().row() + 1
current = self.mdlPersosProxy.mapToSource(self.lstPersos.currentIndex()).row() + 1
self.tblPersoInfos.setColumnWidth(current, w - w2)

View file

@ -323,12 +323,17 @@ class outlineItem():
return self._data[Outline(column)]
else:
return None
elif role == Qt.DecorationRole and column == Outline.title.value:
if self.isFolder():
return QIcon.fromTheme("folder")
elif self.isScene():
return QIcon.fromTheme("document-new")
elif role == Qt.ForegroundRole and column == Outline.title.value:
if not self.isCompile():
return QBrush(Qt.gray)
elif role == Qt.CheckStateRole and column == Outline.compile.value:
if Outline(column) in self._data and self._data[Outline(column)]:
return Qt.Checked
@ -358,6 +363,9 @@ class outlineItem():
def isFolder(self):
return self._data[Outline.type] == "folder"
def isCompile(self):
return Outline.compile in self._data and self._data[Outline.compile]
def isScene(self):
return self._data[Outline.type] == "scene"

View file

@ -0,0 +1,163 @@
#!/usr/bin/env python
#--!-- coding: utf8 --!--
from __future__ import print_function
from __future__ import unicode_literals
from qt import *
from enums import *
from models.outlineModel import *
from enum import Enum
from lxml import etree as ET
class persosProxyModel(QAbstractProxyModel):
newStatuses = pyqtSignal()
def __init__(self, parent=None):
QAbstractProxyModel.__init__(self, parent)
self.rootItem = QStandardItem()
self.p1 = QStandardItem("Principal")
self.p2 = QStandardItem("Secondaire")
self.p3 = QStandardItem("Mineur")
self.cats = [
self.p1,
self.p2,
self.p3
]
def mapFromSource(self, sourceIndex):
if not sourceIndex.isValid():
return QModelIndex()
row = 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):
if not index.isValid():
return Qt.NoItemFlags
if index.isValid() and not self.mapToSource(index).isValid():
return Qt.NoItemFlags#Qt.ItemIsEnabled
else:
return Qt.ItemIsEnabled | Qt.ItemIsSelectable
def mapToSource(self, proxyIndex):
if not proxyIndex.isValid():
return QModelIndex()
row = proxyIndex.row()
if row == 0:
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()
return self.sourceModel().createIndex(row, proxyIndex.column(), item)
def setSourceModel(self, model):
QAbstractProxyModel.setSourceModel(self, model)
self.sourceModel().dataChanged.connect(self.mapModel)
self.sourceModel().rowsInserted.connect(self.mapModel)
self.sourceModel().rowsRemoved.connect(self.mapModel)
self.sourceModel().rowsMoved.connect(self.mapModel)
self.mapModel()
def mapModel(self):
self.beginResetModel()
src = self.sourceModel()
self._map = [[], [], []]
for i in range(src.rowCount()):
item = src.item(i, Perso.importance.value)
ID = src.item(i, Perso.ID.value)
if item:
imp = int(item.text())
else:
imp = 0
self._map[2-imp].append(i)
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()
else:
return self.sourceModel().data(self.mapToSource(index), role)
def index(self, row, column, parent):
n = self.numberOfPersosByImportance()
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
return self.createIndex(row, column, self.cats[p])
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()))
def parent(self, index=QModelIndex()):
return QModelIndex()
def rowCount(self, parent=QModelIndex()):
return self.sourceModel().rowCount(QModelIndex())+3
def columnCount(self, parent=QModelIndex()):
return self.sourceModel().columnCount(QModelIndex())
def item(self, row, col, parent=QModelIndex()):
idx = self.mapToSource(self.index(row, col, parent))
return self.sourceModel().item(idx.row(), idx.column())
#def setData(self, index, value, role=Qt.EditRole):
#pass

View file

@ -0,0 +1,53 @@
#!/usr/bin/env python
#--!-- coding: utf8 --!--
from __future__ import print_function
from __future__ import unicode_literals
from qt import *
from enums import *
class cmbOutlinePersoChoser(QComboBox):
def __init__(self, parent=None):
QComboBox.__init__(self, parent)
self.activated[int].connect(self.changed)
self.currentModelIndex = None
def setModels(self, mdlPersos, mdlOutline):
self.mdlPersos = mdlPersos
self.mdlPersos.dataChanged.connect(self.updateItems)
self.mdlOutline = mdlOutline
self.mdlOutline.dataChanged.connect(self.updateSelectedItem)
def updateSelectedItem(self, idx1=None, idx2=None):
if not self.currentModelIndex:
self.setCurrentIndex(0)
else:
item = self.currentModelIndex.internalPointer()
POV = item.data(Outline.POV)
idx = self.findData(POV)
if idx <> -1:
self.setCurrentIndex(idx)
else:
self.setCurrentIndex(0)
def changed(self, idx):
if self.currentModelIndex:
modelIndex = self.mdlOutline.index(self.currentModelIndex.row(), Outline.POV.value, self.currentModelIndex.parent())
self.mdlOutline.setData(modelIndex, self.currentData())
def setCurrentModelIndex(self, idx):
self.currentModelIndex = idx
self.updateSelectedItem()
def updateItems(self):
self.clear()
self.addItem("")
for i in range(self.mdlPersos.rowCount()):
try:
self.addItem(self.mdlPersos.item(i, Perso.name.value).text(), self.mdlPersos.item(i, Perso.ID.value).text())
except:
pass
if self.currentModelIndex:
self.updateSelectedItem()

View file

@ -0,0 +1,52 @@
#!/usr/bin/env python
#--!-- coding: utf8 --!--
from __future__ import print_function
from __future__ import unicode_literals
from qt import *
from enums import *
class cmbOutlineStatusChoser(QComboBox):
def __init__(self, parent=None):
QComboBox.__init__(self, parent)
self.activated[int].connect(self.changed)
self.currentModelIndex = None
self.setEditable(True)
self.setAutoFillBackground(True)
def setModel(self, mdlOutline):
self.mdlOutline = mdlOutline
self.mdlOutline.dataChanged.connect(self.updateItems)
self.mdlOutline.dataChanged.connect(self.updateSelectedItem)
self.mdlOutline.newStatuses.connect(self.updateItems)
self.updateItems()
def updateSelectedItem(self, idx1=None, idx2=None):
if not self.currentModelIndex:
self.setCurrentIndex(0)
else:
item = self.currentModelIndex.internalPointer()
self.setCurrentIndex(self.findText(item.data(Outline.status.value)))
def changed(self, idx):
if self.currentModelIndex:
modelIndex = self.mdlOutline.index(self.currentModelIndex.row(), Outline.status.value, self.currentModelIndex.parent())
self.mdlOutline.setData(modelIndex, self.currentText())
def setCurrentModelIndex(self, idx):
self.currentModelIndex = idx
self.updateSelectedItem()
def updateItems(self):
self.clear()
self.addItem("")
for status in self.mdlOutline.statuses:
self.addItem(status)
if self.currentModelIndex:
self.updateSelectedItem()

View file

@ -268,7 +268,6 @@ class Ui_MainWindow(object):
self.verticalLayout_8.setObjectName("verticalLayout_8")
self.lstPersos = QtWidgets.QListView(self.groupBox)
self.lstPersos.setDragEnabled(True)
self.lstPersos.setDragDropMode(QtWidgets.QAbstractItemView.InternalMove)
self.lstPersos.setObjectName("lstPersos")
self.verticalLayout_8.addWidget(self.lstPersos)
self.horizontalLayout_14 = QtWidgets.QHBoxLayout()
@ -710,9 +709,9 @@ class Ui_MainWindow(object):
self.verticalLayout_13.setObjectName("verticalLayout_13")
self.horizontalLayout_11 = QtWidgets.QHBoxLayout()
self.horizontalLayout_11.setObjectName("horizontalLayout_11")
self.label_9 = QtWidgets.QLabel(self.groupbox)
self.label_9.setObjectName("label_9")
self.horizontalLayout_11.addWidget(self.label_9)
self.lblPlanPOV = QtWidgets.QLabel(self.groupbox)
self.lblPlanPOV.setObjectName("lblPlanPOV")
self.horizontalLayout_11.addWidget(self.lblPlanPOV)
self.cmbPlanPOV = cmbOutlinePersoChoser(self.groupbox)
self.cmbPlanPOV.setFrame(False)
self.cmbPlanPOV.setObjectName("cmbPlanPOV")
@ -866,7 +865,6 @@ class Ui_MainWindow(object):
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.cmbRedacPOV.sizePolicy().hasHeightForWidth())
self.cmbRedacPOV.setSizePolicy(sizePolicy)
self.cmbRedacPOV.setFrame(False)
self.cmbRedacPOV.setObjectName("cmbRedacPOV")
self.formLayout_5.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.cmbRedacPOV)
self.label_30 = QtWidgets.QLabel(self.groupBox_4)
@ -878,7 +876,7 @@ class Ui_MainWindow(object):
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.cmbRedacStatus.sizePolicy().hasHeightForWidth())
self.cmbRedacStatus.setSizePolicy(sizePolicy)
self.cmbRedacStatus.setFrame(False)
self.cmbRedacStatus.setEditable(True)
self.cmbRedacStatus.setObjectName("cmbRedacStatus")
self.formLayout_5.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.cmbRedacStatus)
self.label_32 = QtWidgets.QLabel(self.groupBox_4)
@ -1045,7 +1043,7 @@ class Ui_MainWindow(object):
self.menubar.addAction(self.menu_Aide.menuAction())
self.retranslateUi(MainWindow)
self.tabMain.setCurrentIndex(6)
self.tabMain.setCurrentIndex(2)
self.tabSummary.setCurrentIndex(0)
self.tabPersos.setCurrentIndex(0)
self.tabPlot.setCurrentIndex(0)
@ -1160,8 +1158,8 @@ class Ui_MainWindow(object):
self.treeWidget_2.topLevelItem(1).child(0).setText(0, _translate("MainWindow", "Scène 1"))
self.treeWidget_2.topLevelItem(1).child(1).setText(0, _translate("MainWindow", "Scène 2"))
self.treeWidget_2.setSortingEnabled(__sortingEnabled)
self.groupbox.setTitle(_translate("MainWindow", "Détails de la scène"))
self.label_9.setText(_translate("MainWindow", "POV"))
self.groupbox.setTitle(_translate("MainWindow", "Détails"))
self.lblPlanPOV.setText(_translate("MainWindow", "POV"))
self.txtPlanSummarySentance.setPlaceholderText(_translate("MainWindow", "Résumé de la scène en une ligne"))
self.tabMain.setTabText(self.tabMain.indexOf(self.lytTabOutline), _translate("MainWindow", "Plan"))
self.groupBox_4.setTitle(_translate("MainWindow", "Propriétés"))
@ -1211,7 +1209,7 @@ class Ui_MainWindow(object):
self.actShowHelp.setText(_translate("MainWindow", "Afficher les &bulles d\'aide"))
self.actShowHelp.setShortcut(_translate("MainWindow", "Ctrl+Shift+B"))
from ui.collapsibleGroupBox import collapsibleGroupBox
from ui.cmbOutlineStatusChoser import cmbOutlineStatusChoser
from ui.sldImportance import sldImportance
from ui.cmbOutlineStatusChoser import cmbOutlineStatusChoser
from ui.collapsibleGroupBox import collapsibleGroupBox
from ui.cmbOutlinePersoChoser import cmbOutlinePersoChoser

View file

@ -18,7 +18,7 @@
<item>
<widget class="QTabWidget" name="tabMain">
<property name="currentIndex">
<number>6</number>
<number>2</number>
</property>
<property name="documentMode">
<bool>true</bool>
@ -506,9 +506,6 @@
<property name="dragEnabled">
<bool>true</bool>
</property>
<property name="dragDropMode">
<enum>QAbstractItemView::InternalMove</enum>
</property>
</widget>
</item>
<item>
@ -1352,13 +1349,13 @@
<item>
<widget class="QGroupBox" name="groupbox">
<property name="title">
<string>Détails de la scène</string>
<string>Détails</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_13">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_11">
<item>
<widget class="QLabel" name="label_9">
<widget class="QLabel" name="lblPlanPOV">
<property name="text">
<string>POV</string>
</property>
@ -1670,9 +1667,6 @@
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="frame">
<bool>false</bool>
</property>
</widget>
</item>
<item row="1" column="0">
@ -1690,8 +1684,8 @@
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="frame">
<bool>false</bool>
<property name="editable">
<bool>true</bool>
</property>
</widget>
</item>

View file

@ -1,21 +1,21 @@
<?xml version='1.0' encoding='UTF-8'?>
<outlineItem title="root" type="folder">
<outlineItem title="NouveauNouveauNouveauNouveauNouveauNouveau asd asd s Franchement?" type="scene" summarySentance="Texte" POV="2" status="TODO" compile="2"/>
<outlineItem title="NouveauNouveauNouveauNouveauNouveauNouveau asd asd s Franchement?" type="scene" summarySentance="Texte" POV="2" status="Second draft" compile="2"/>
<outlineItem title="Nouveau" type="folder" compile="2">
<outlineItem title="Nouveau" type="scene" POV="2" compile="2"/>
<outlineItem title="Nouveau" type="scene" POV="2" status="First draft" compile="2"/>
</outlineItem>
<outlineItem title="éüæ" type="folder" summarySentance="Il arrive au comptoir" summaryFull="Il arrive au comptoir après avoir garé son cheval, et mange une grosse glace à la vanille." notes="Utiliser un jeu de mot sur &quot;comptoir&quot; / &quot;abreuvoir&quot;" compile="2" text="Le texte.&#10;&#10;De l'histoire.">
<outlineItem title="Nouveau" type="scene" POV="1" status="TODO" compile="True" text="Le texte du truc."/>
<outlineItem title="Nouveau" type="scene" POV="0" status="TODO" compile="2" text="Le texte du truc."/>
</outlineItem>
<outlineItem title="Nouveau" type="folder" status="Second draft *">
<outlineItem title="Nouveau" type="folder" status="Second draft" compile="True">
<outlineItem title="Nouveau" type="folder">
<outlineItem title="Nouveau" type="folder"/>
<outlineItem title="Nouveau" type="folder"/>
<outlineItem title="Nouveau" type="folder" compile="2"/>
<outlineItem title="Nouveau" type="folder"/>
<outlineItem title="Nouveau" type="folder"/>
</outlineItem>
</outlineItem>
<outlineItem title="Nouveau" type="folder" status="TODO"/>
<outlineItem title="Nouveau" type="folder" status="TODO" compile="2"/>
<outlineItem title="Nouveau" type="folder" status="First draft"/>
<outlineItem title="Nouveau" type="folder" status="First draft">
<outlineItem title="Nouveau" type="scene"/>

View file

@ -40,7 +40,7 @@ Pour voir.</col>
<row row="1">
<col col="0">Ginette</col>
<col col="1">1</col>
<col col="2"/>
<col col="2">1</col>
<col col="3"/>
<col col="4"/>
<col col="5"/>
@ -53,7 +53,7 @@ Pour voir.</col>
<row row="2">
<col col="0">Nouveau perso avec un nom pas très long</col>
<col col="1">2</col>
<col col="2"/>
<col col="2">0</col>
<col col="3"/>
<col col="4"/>
<col col="5"/>

View file

@ -24,12 +24,12 @@
<col col="0">Age</col>
<col col="1">42</col>
<col col="2">12</col>
<col col="3"/>
<col col="3">11</col>
</row>
<row row="2">
<col col="0">Animal préféré</col>
<col col="1">Pingouin</col>
<col col="2">Crevette aquatique</col>
<col col="2"/>
<col col="3"/>
</row>
</data>