mirror of
https://github.com/olivierkes/manuskript.git
synced 2024-05-18 20:02:32 +12:00
Plan view almost working
This commit is contained in:
parent
8d7877e415
commit
245ea72eed
|
@ -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()))
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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()
|
|
@ -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
|
||||
|
|
|
@ -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/>
|
||||
|
|
|
@ -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)
|
|
@ -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 "comptoir" / "abreuvoir"" 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 "comptoir" / "abreuvoir"" compile="2" text="Le texte. 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"/>
|
||||
|
|
Loading…
Reference in a new issue