From 245ea72eed19b302b8dc8e791304ec62e115c62e Mon Sep 17 00:00:00 2001 From: Olivier Keshavjee Date: Thu, 4 Jun 2015 02:51:37 +0200 Subject: [PATCH] Plan view almost working --- src/mainWindow.py | 6 ++++ src/models/outlineModel.py | 37 ++++++++++++++++++- src/ui/cmbPersoChoser.py | 65 ---------------------------------- src/ui/mainWindow.py | 29 ++++++++------- src/ui/mainWindow.ui | 49 ++++++++++++------------- src/ui/treeOutlineDelegates.py | 34 +++++++++++++++++- test_project/outline.xml | 14 ++++---- 7 files changed, 121 insertions(+), 113 deletions(-) delete mode 100644 src/ui/cmbPersoChoser.py diff --git a/src/mainWindow.py b/src/mainWindow.py index 0f9607dc..82619f31 100644 --- a/src/mainWindow.py +++ b/src/mainWindow.py @@ -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())) diff --git a/src/models/outlineModel.py b/src/models/outlineModel.py index f9b94974..24dbe13f 100644 --- a/src/models/outlineModel.py +++ b/src/models/outlineModel.py @@ -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) diff --git a/src/ui/cmbPersoChoser.py b/src/ui/cmbPersoChoser.py deleted file mode 100644 index f4df80d8..00000000 --- a/src/ui/cmbPersoChoser.py +++ /dev/null @@ -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() \ No newline at end of file diff --git a/src/ui/mainWindow.py b/src/ui/mainWindow.py index 340cd393..83055005 100644 --- a/src/ui/mainWindow.py +++ b/src/ui/mainWindow.py @@ -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 diff --git a/src/ui/mainWindow.ui b/src/ui/mainWindow.ui index 5494b03c..3b27b409 100644 --- a/src/ui/mainWindow.ui +++ b/src/ui/mainWindow.ui @@ -18,7 +18,7 @@ - 5 + 6 true @@ -1365,7 +1365,7 @@ - + false @@ -1663,7 +1663,13 @@ - + + + + 0 + 0 + + false @@ -1677,30 +1683,16 @@ - + + + + 0 + 0 + + false - - - TODO - - - - - First draft - - - - - Second draft - - - - - Final - - @@ -2040,9 +2032,14 @@ 1 - cmbPersoChoser + cmbOutlinePersoChoser QComboBox -
ui.cmbPersoChoser.h
+
ui.cmbOutlinePersoChoser.h
+
+ + cmbOutlineStatusChoser + QComboBox +
ui.cmbOutlineStatusChoser.h
diff --git a/src/ui/treeOutlineDelegates.py b/src/ui/treeOutlineDelegates.py index bd282100..16dd9603 100644 --- a/src/ui/treeOutlineDelegates.py +++ b/src/ui/treeOutlineDelegates.py @@ -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 "" \ No newline at end of file + 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) \ No newline at end of file diff --git a/test_project/outline.xml b/test_project/outline.xml index d0972a29..81e4b3b1 100644 --- a/test_project/outline.xml +++ b/test_project/outline.xml @@ -1,13 +1,13 @@ - - + + - + - + @@ -15,9 +15,9 @@ - - - + + +