Plan view almost working

This commit is contained in:
Olivier Keshavjee 2015-06-04 02:51:37 +02:00
parent 8d7877e415
commit 245ea72eed
7 changed files with 121 additions and 113 deletions

View file

@ -126,6 +126,9 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.treePlanOutline.setItemDelegateForColumn(Outline.POV.value, self.treePlanOutlinePersoDelegate)
self.treePlanOutlineCompileDelegate = treeOutlineCompileDelegate()
self.treePlanOutline.setItemDelegateForColumn(Outline.compile.value, self.treePlanOutlineCompileDelegate)
self.treePlanOutlineStatusDelegate = treeOutlineStatusDelegate()
self.treePlanOutline.setItemDelegateForColumn(Outline.status.value, self.treePlanOutlineStatusDelegate)
self.cmbPlanPOV.setModels(self.mdlPersos, self.mdlOutline)
self.treePlanOutline.header().setSectionResizeMode(QHeaderView.ResizeToContents)
#self.treePlanOutline.header().setSectionResizeMode(QHeaderView.Interactive)
@ -142,6 +145,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.treePlanOutline.selectionModel().currentChanged.connect(self.mprPlan.setCurrentModelIndex)
self.treePlanOutline.selectionModel().currentChanged.connect(self.cmbPlanPOV.setCurrentModelIndex)
self.treeRedacOutline.setSelectionModel(self.treePlanOutline.selectionModel())
for c in range(1, self.mdlOutline.columnCount()):
self.treeRedacOutline.hideColumn(c)
@ -156,6 +160,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.btnPlanRemoveItem.clicked.connect(self.outlineRemoveItems)
self.cmbRedacPOV.setModels(self.mdlPersos, self.mdlOutline)
self.cmbRedacStatus.setModel(self.mdlOutline)
self.mprOutline = QDataWidgetMapper()
self.mprOutline.setModel(self.mdlOutline)
mapping = [
@ -172,6 +177,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.treeRedacOutline.selectionModel().currentChanged.connect(self.mprOutline.setCurrentModelIndex)
self.treeRedacOutline.selectionModel().currentChanged.connect(self.cmbRedacPOV.setCurrentModelIndex)
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()))

View file

@ -11,10 +11,14 @@ from enum import Enum
from lxml import etree as ET
class outlineModel(QAbstractItemModel):
newStatuses = pyqtSignal()
def __init__(self):
QAbstractItemModel.__init__(self)
self.rootItem = outlineItem("root", "folder")
self.generateStatuses()
def index(self, row, column, parent):
@ -71,6 +75,10 @@ class outlineModel(QAbstractItemModel):
def setData(self, index, value, role=Qt.EditRole):
item = index.internalPointer()
item.setData(index.column(), value)
if index.column() == Outline.status.value:
self.generateStatuses()
self.dataChanged.emit(index, index)
return True
@ -252,10 +260,34 @@ class outlineModel(QAbstractItemModel):
def loadFromXML(self, xml):
try:
root = ET.parse(xml)
self.rootItem = outlineItem(xml=ET.tostring(root))
self.rootItem = outlineItem(xml=ET.tostring(root))
self.generateStatuses()
except:
print("N'arrive pas à ouvrir {}".format(xml))
return
################# DIVERS #################
def generateStatuses(self, item=None):
if item == None:
self.statuses = [
"TODO",
"First draft",
"Second draft",
"Final"
]
item = self.rootItem
val = item.data(Outline.status.value)
if val and not val in self.statuses:
self.statuses.append(val)
self.newStatuses.emit()
for c in item.children():
self.generateStatuses(c)
class outlineItem():
@ -277,6 +309,9 @@ class outlineItem():
def childCount(self):
return len(self.childItems)
def children(self):
return self.childItems
def columnCount(self):
return len(Outline)

View file

@ -1,65 +0,0 @@
#!/usr/bin/env python
#--!-- coding: utf8 --!--
from __future__ import print_function
from __future__ import unicode_literals
from qt import *
from enums import *
class cmbPersoChoser(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()
#def setPOV(self, POV):
#idx = self.findData(POV)
#if idx <> -1:
#self.setCurrentIndex(idx)
#else:
#self.setCurrentIndex(0)
#print("cmbPersoChoser: POV {} not found.".format(POV))
#def getPOV(self):
#print("Getting data")
#return self.currentData()

View file

@ -713,7 +713,7 @@ class Ui_MainWindow(object):
self.label_9 = QtWidgets.QLabel(self.groupbox)
self.label_9.setObjectName("label_9")
self.horizontalLayout_11.addWidget(self.label_9)
self.cmbPlanPOV = cmbPersoChoser(self.groupbox)
self.cmbPlanPOV = cmbOutlinePersoChoser(self.groupbox)
self.cmbPlanPOV.setFrame(False)
self.cmbPlanPOV.setObjectName("cmbPlanPOV")
self.horizontalLayout_11.addWidget(self.cmbPlanPOV)
@ -860,20 +860,26 @@ class Ui_MainWindow(object):
self.lblRedacPOV = QtWidgets.QLabel(self.groupBox_4)
self.lblRedacPOV.setObjectName("lblRedacPOV")
self.formLayout_5.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.lblRedacPOV)
self.cmbRedacPOV = cmbPersoChoser(self.groupBox_4)
self.cmbRedacPOV = cmbOutlinePersoChoser(self.groupBox_4)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
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)
self.label_30.setObjectName("label_30")
self.formLayout_5.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label_30)
self.cmbRedacStatus = QtWidgets.QComboBox(self.groupBox_4)
self.cmbRedacStatus = cmbOutlineStatusChoser(self.groupBox_4)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.cmbRedacStatus.sizePolicy().hasHeightForWidth())
self.cmbRedacStatus.setSizePolicy(sizePolicy)
self.cmbRedacStatus.setFrame(False)
self.cmbRedacStatus.setObjectName("cmbRedacStatus")
self.cmbRedacStatus.addItem("")
self.cmbRedacStatus.addItem("")
self.cmbRedacStatus.addItem("")
self.cmbRedacStatus.addItem("")
self.formLayout_5.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.cmbRedacStatus)
self.label_32 = QtWidgets.QLabel(self.groupBox_4)
self.label_32.setObjectName("label_32")
@ -1039,7 +1045,7 @@ class Ui_MainWindow(object):
self.menubar.addAction(self.menu_Aide.menuAction())
self.retranslateUi(MainWindow)
self.tabMain.setCurrentIndex(5)
self.tabMain.setCurrentIndex(6)
self.tabSummary.setCurrentIndex(0)
self.tabPersos.setCurrentIndex(0)
self.tabPlot.setCurrentIndex(0)
@ -1161,10 +1167,6 @@ class Ui_MainWindow(object):
self.groupBox_4.setTitle(_translate("MainWindow", "Propriétés"))
self.lblRedacPOV.setText(_translate("MainWindow", "POV"))
self.label_30.setText(_translate("MainWindow", "Status"))
self.cmbRedacStatus.setItemText(0, _translate("MainWindow", "TODO"))
self.cmbRedacStatus.setItemText(1, _translate("MainWindow", "First draft"))
self.cmbRedacStatus.setItemText(2, _translate("MainWindow", "Second draft"))
self.cmbRedacStatus.setItemText(3, _translate("MainWindow", "Final"))
self.label_32.setText(_translate("MainWindow", "Compile"))
self.groupBox_5.setTitle(_translate("MainWindow", "Résumé de la scène"))
self.txtRedacSummarySentance.setPlaceholderText(_translate("MainWindow", "Résumé de la scène en une ligne"))
@ -1210,5 +1212,6 @@ class Ui_MainWindow(object):
self.actShowHelp.setShortcut(_translate("MainWindow", "Ctrl+Shift+B"))
from ui.collapsibleGroupBox import collapsibleGroupBox
from ui.cmbPersoChoser import cmbPersoChoser
from ui.cmbOutlineStatusChoser import cmbOutlineStatusChoser
from ui.sldImportance import sldImportance
from ui.cmbOutlinePersoChoser import cmbOutlinePersoChoser

View file

@ -18,7 +18,7 @@
<item>
<widget class="QTabWidget" name="tabMain">
<property name="currentIndex">
<number>5</number>
<number>6</number>
</property>
<property name="documentMode">
<bool>true</bool>
@ -1365,7 +1365,7 @@
</widget>
</item>
<item>
<widget class="cmbPersoChoser" name="cmbPlanPOV">
<widget class="cmbOutlinePersoChoser" name="cmbPlanPOV">
<property name="frame">
<bool>false</bool>
</property>
@ -1663,7 +1663,13 @@
</widget>
</item>
<item row="0" column="1">
<widget class="cmbPersoChoser" name="cmbRedacPOV">
<widget class="cmbOutlinePersoChoser" name="cmbRedacPOV">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="frame">
<bool>false</bool>
</property>
@ -1677,30 +1683,16 @@
</widget>
</item>
<item row="1" column="1">
<widget class="QComboBox" name="cmbRedacStatus">
<widget class="cmbOutlineStatusChoser" name="cmbRedacStatus">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="frame">
<bool>false</bool>
</property>
<item>
<property name="text">
<string>TODO</string>
</property>
</item>
<item>
<property name="text">
<string>First draft</string>
</property>
</item>
<item>
<property name="text">
<string>Second draft</string>
</property>
</item>
<item>
<property name="text">
<string>Final</string>
</property>
</item>
</widget>
</item>
<item row="2" column="0">
@ -2040,9 +2032,14 @@
<container>1</container>
</customwidget>
<customwidget>
<class>cmbPersoChoser</class>
<class>cmbOutlinePersoChoser</class>
<extends>QComboBox</extends>
<header>ui.cmbPersoChoser.h</header>
<header>ui.cmbOutlinePersoChoser.h</header>
</customwidget>
<customwidget>
<class>cmbOutlineStatusChoser</class>
<extends>QComboBox</extends>
<header>ui.cmbOutlineStatusChoser.h</header>
</customwidget>
</customwidgets>
<resources/>

View file

@ -12,6 +12,10 @@ class treeOutlinePersoDelegate(QStyledItemDelegate):
def __init__(self, mdlPersos, parent=None):
QStyledItemDelegate.__init__(self, parent)
self.mdlPersos = mdlPersos
def sizeHint(self, option, index):
s = QStyledItemDelegate.sizeHint(self, option, index)
return s + QSize(18, 0)
def createEditor(self, parent, option, index):
item = index.internalPointer()
@ -20,6 +24,7 @@ class treeOutlinePersoDelegate(QStyledItemDelegate):
editor = QComboBox(parent)
editor.setAutoFillBackground(True)
editor.setFrame(False)
return editor
def setEditorData(self, editor, index):
@ -44,4 +49,31 @@ class treeOutlineCompileDelegate(QStyledItemDelegate):
QStyledItemDelegate.__init__(self, parent)
def displayText(self, value, locale):
return ""
return ""
class treeOutlineStatusDelegate(QStyledItemDelegate):
def __init__(self, parent=None):
QStyledItemDelegate.__init__(self, parent)
def sizeHint(self, option, index):
s = QStyledItemDelegate.sizeHint(self, option, index)
return s + QSize(18, 0)
def createEditor(self, parent, option, index):
editor = QComboBox(parent)
editor.setAutoFillBackground(True)
editor.setEditable(True)
editor.setFrame(False)
return editor
def setEditorData(self, editor, index):
statuses = index.model().statuses
editor.addItem("")
for status in statuses:
editor.addItem(status)
editor.setCurrentIndex(editor.findText(index.data()))
def setModelData(self, editor, model, index):
val = editor.currentText()
model.setData(index, val)

View file

@ -1,13 +1,13 @@
<?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="0" compile="2"/>
<outlineItem title="Nouveau" type="folder" status="First draft" compile="2">
<outlineItem title="NouveauNouveauNouveauNouveauNouveauNouveau asd asd s Franchement?" type="scene" summarySentance="Texte" POV="2" status="TODO" compile="2"/>
<outlineItem title="Nouveau" type="folder" compile="2">
<outlineItem title="Nouveau" type="scene" POV="2" 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;" status="TODO" compile="2">
<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>
<outlineItem title="Nouveau" type="folder">
<outlineItem title="Nouveau" type="folder" status="Second draft *">
<outlineItem title="Nouveau" type="folder">
<outlineItem title="Nouveau" type="folder"/>
<outlineItem title="Nouveau" type="folder"/>
@ -15,9 +15,9 @@
<outlineItem title="Nouveau" type="folder"/>
</outlineItem>
</outlineItem>
<outlineItem title="Nouveau" type="folder"/>
<outlineItem title="Nouveau" type="folder"/>
<outlineItem title="Nouveau" type="folder">
<outlineItem title="Nouveau" type="folder" status="TODO"/>
<outlineItem title="Nouveau" type="folder" status="First draft"/>
<outlineItem title="Nouveau" type="folder" status="First draft">
<outlineItem title="Nouveau" type="scene"/>
<outlineItem title="Nouveau" type="scene"/>
<outlineItem title="Nouveau" type="scene"/>