From 123952ccaac400fe63b86c994a45a5acb11bf244 Mon Sep 17 00:00:00 2001 From: Olivier Keshavjee Date: Thu, 4 Jun 2015 20:22:37 +0200 Subject: [PATCH] UI Improvements and minors corrections --- TODO.t2t | 5 +- src/enums.py | 3 + src/functions.py | 8 + src/mainWindow.py | 33 ++-- src/models/outlineModel.py | 30 +++- src/ui/chkOutlineCompile.py | 45 ++++++ src/ui/cmbOutlinePersoChoser.py | 2 +- src/ui/mainWindow.py | 140 ++++++++++------ src/ui/mainWindow.ui | 276 +++++++++++++++++++++----------- src/ui/treeOutlineDelegates.py | 4 +- test_project/outline.xml | 31 +--- 11 files changed, 386 insertions(+), 191 deletions(-) create mode 100644 src/functions.py create mode 100644 src/ui/chkOutlineCompile.py diff --git a/TODO.t2t b/TODO.t2t index c314ad5..b1f7b5f 100644 --- a/TODO.t2t +++ b/TODO.t2t @@ -3,4 +3,7 @@ Features - Coach (entrer le nombre de mot viser, se fixer des objectifs quotidiens / hebdomadaires (en temps, ou en mots, min ou max), faire des statistiques) - Différents modes: simple (que le outliner / rédacteur), snowflake strict (cache les éléments tant que le précédent n'a pas été accompli), snowflake souple (tout est affiché mais permet de naviger, avec conseils) -- Boîte à sable: endroit pour expérimenter, des scenes particulières ou des perso en situations spéciales. Avec suggestions de thèmes / lieux / ... \ No newline at end of file +- Boîte à sable: endroit pour expérimenter, des scenes particulières ou des perso en situations spéciales. Avec suggestions de thèmes / lieux / ... + +Outline: +- Afficher le nombre de mots, et la cible, et une barre de progressions \ No newline at end of file diff --git a/src/enums.py b/src/enums.py index 46fcc5b..f226aba 100644 --- a/src/enums.py +++ b/src/enums.py @@ -36,3 +36,6 @@ class Outline(Enum): status = 7 compile = 8 text = 9 + wordCount = 10 + goal = 11 + goalPercentage = 12 diff --git a/src/functions.py b/src/functions.py new file mode 100644 index 0000000..498d45f --- /dev/null +++ b/src/functions.py @@ -0,0 +1,8 @@ +#!/usr/bin/env python +#--!-- coding: utf8 --!-- + +from __future__ import print_function +from __future__ import unicode_literals + +def wordCount(text): + return len(text.strip().split(" ")) if text else 0 \ No newline at end of file diff --git a/src/mainWindow.py b/src/mainWindow.py index 220e512..863464b 100644 --- a/src/mainWindow.py +++ b/src/mainWindow.py @@ -13,6 +13,7 @@ from loadSave import * from enums import * from models.outlineModel import * from models.persosProxyModel import * +from functions import * class MainWindow(QMainWindow, Ui_MainWindow): def __init__(self): @@ -148,16 +149,20 @@ class MainWindow(QMainWindow, Ui_MainWindow): ] for w, i in mapping: self.mprPlan.addMapping(w, i) + + self.treePlanOutline.selectionModel().currentChanged.connect(lambda idx: self.mprPlan.setRootIndex(idx.parent())) 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) self.treePlanOutline.hideColumn(c) - for c in [Outline.POV.value, Outline.status.value, Outline.compile.value]: + for c in [Outline.POV.value, Outline.status.value, Outline.compile.value, Outline.wordCount.value, Outline.goal.value, Outline.goalPercentage.value]: self.treePlanOutline.showColumn(c) + self.btnRedacAddFolder.clicked.connect(lambda: self.outlineAddItem("folder")) self.btnPlanAddFolder.clicked.connect(lambda: self.outlineAddItem("folder")) self.btnRedacAddScene.clicked.connect(lambda: self.outlineAddItem("scene")) @@ -167,6 +172,8 @@ class MainWindow(QMainWindow, Ui_MainWindow): self.cmbRedacPOV.setModels(self.mdlPersos, self.mdlOutline) self.cmbRedacStatus.setModel(self.mdlOutline) + #self.chkRedacCompile.setModel(self.mdlOutline) + self.mprOutline = QDataWidgetMapper() self.mprOutline.setModel(self.mdlOutline) mapping = [ @@ -174,16 +181,18 @@ class MainWindow(QMainWindow, Ui_MainWindow): (self.txtRedacSummarySentance, Outline.summarySentance.value), (self.txtRedacSummaryFull, Outline.summaryFull.value), (self.txtRedacNotes, Outline.notes.value), - (self.cmbRedacStatus, Outline.status.value), - (self.chkRedacCompile, Outline.compile.value), - (self.txtRedacTitle, Outline.title.value) + (self.txtRedacTitle, Outline.title.value), + (self.txtRedacGoal, Outline.goal.value) ] for w, i in mapping: self.mprOutline.addMapping(w, i) + self.treeRedacOutline.selectionModel().currentChanged.connect(lambda idx: self.mprOutline.setRootIndex(idx.parent())) 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(self.chkRedacCompile.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())) @@ -351,9 +360,6 @@ class MainWindow(QMainWindow, Ui_MainWindow): if i == 6: # step 8 - scene list self.tabMain.setCurrentIndex(3) - - - "Updates word counts over tabs" def wordCount(self, i): src= { @@ -370,7 +376,7 @@ class MainWindow(QMainWindow, Ui_MainWindow): 3:self.lblSummaryWCFull }[i] - wc = len(src.toPlainText().strip().split(" ")) if src.toPlainText() else 0 + wc = wordCount(src.toPlainText()) if i in [2, 3]: pages = " (~{} pages)".format(int(wc / 25) / 10.) else: pages = "" lbl.setText("Mots: {}{}".format(wc, pages)) @@ -382,11 +388,14 @@ class MainWindow(QMainWindow, Ui_MainWindow): self.splitterPersos.setStretchFactor(1, 75) self.splitterPlot.setStretchFactor(0, 20) - self.splitterPlot.setStretchFactor(1, 40) - self.splitterPlot.setStretchFactor(2, 40) + self.splitterPlot.setStretchFactor(1, 60) + self.splitterPlot.setStretchFactor(2, 30) + + self.splitterOutlineH.setStretchFactor(0, 25) + self.splitterOutlineH.setStretchFactor(1, 75) + self.splitterOutlineV.setStretchFactor(0, 75) + self.splitterOutlineV.setStretchFactor(1, 25) - self.splitterPlan.setStretchFactor(0, 25) - self.splitterPlan.setStretchFactor(1, 75) self.splitterRedac.setStretchFactor(0, 20) self.splitterRedac.setStretchFactor(1, 60) diff --git a/src/models/outlineModel.py b/src/models/outlineModel.py index de02a2c..d9cd01d 100644 --- a/src/models/outlineModel.py +++ b/src/models/outlineModel.py @@ -10,6 +10,8 @@ from enums import * from enum import Enum from lxml import etree as ET +from functions import * + class outlineModel(QAbstractItemModel): newStatuses = pyqtSignal() @@ -74,7 +76,7 @@ class outlineModel(QAbstractItemModel): def setData(self, index, value, role=Qt.EditRole): item = index.internalPointer() - item.setData(index.column(), value) + item.setData(index.column(), value, role) if index.column() == Outline.status.value: self.generateStatuses() @@ -316,9 +318,13 @@ class outlineItem(): return len(Outline) def data(self, column, role=Qt.DisplayRole): + + #print("Data: ", column, role) + if role == Qt.DisplayRole or role == Qt.EditRole: if column == Outline.compile.value: return self.data(column, Qt.CheckStateRole) + elif Outline(column) in self._data: return self._data[Outline(column)] else: @@ -340,7 +346,23 @@ class outlineItem(): else: return Qt.Unchecked - def setData(self, column, data): + def setData(self, column, data, role=Qt.DisplayRole): + if role not in [Qt.DisplayRole, Qt.EditRole, Qt.CheckStateRole]: + print(column, column == Outline.text.value, data, role) + return + + if column == Outline.text.value: + wc = wordCount(data) + self.setData(Outline.wordCount.value, wc) + + if column in [Outline.wordCount.value, Outline.goal.value]: + wc = self.data(Outline.wordCount.value) + goal = self.data(Outline.goal.value) + if goal and wc: + self.setData(Outline.goalPercentage.value, int(wc) / float(goal)) + else: + self.setData(Outline.goalPercentage.value, "0") + self._data[Outline(column)] = data def row(self): @@ -373,7 +395,7 @@ class outlineItem(): item = ET.Element("outlineItem") for attrib in Outline: - val = self.data(attrib) + val = self.data(attrib.value) if val: item.set(attrib.name, unicode(val)) @@ -387,7 +409,7 @@ class outlineItem(): for k in root.attrib: if k in Outline.__members__: - self._data[Outline.__members__[k]] = unicode(root.attrib[k]) + self.setData(Outline.__members__[k].value, unicode(root.attrib[k])) for child in root: item = outlineItem(xml=ET.tostring(child)) diff --git a/src/ui/chkOutlineCompile.py b/src/ui/chkOutlineCompile.py new file mode 100644 index 0000000..321a761 --- /dev/null +++ b/src/ui/chkOutlineCompile.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python +#--!-- coding: utf8 --!-- + +from __future__ import print_function +from __future__ import unicode_literals + +from qt import * +from enums import * + +# Because I have trouble with QDataWidgetMapper and the checkbox, I don't know why. + +class chkOutlineCompile(QCheckBox): + + def __init__(self, parent=None): + QCheckBox.__init__(self, parent) + self.stateChanged.connect(self.changed) + self.currentModelIndex = None + + def setModel(self, mdlOutline): + self.mdlOutline = mdlOutline + self.mdlOutline.dataChanged.connect(self.updateSelectedItem) + + def setCurrentModelIndex(self, idx): + self.currentModelIndex = idx + self.updateSelectedItem() + + def updateSelectedItem(self, idx1=None, idx2=None): + if not self.currentModelIndex: + self.setChecked(False) + self.setEnabled(False) + else: + self.setEnabled(True) + item = self.currentModelIndex.internalPointer() + c = item.data(Outline.compile) + if c: + c = int(c) + else: + c = Qt.Unchecked + self.setCheckState(c) + + def changed(self, state): + if self.currentModelIndex: + mdl = self.currentModelIndex.model() + modelIndex = mdl.index(self.currentModelIndex.row(), Outline.compile.value, self.currentModelIndex.parent()) + mdl.setData(modelIndex, state) \ No newline at end of file diff --git a/src/ui/cmbOutlinePersoChoser.py b/src/ui/cmbOutlinePersoChoser.py index ae25000..197c706 100644 --- a/src/ui/cmbOutlinePersoChoser.py +++ b/src/ui/cmbOutlinePersoChoser.py @@ -25,7 +25,7 @@ class cmbOutlinePersoChoser(QComboBox): self.setCurrentIndex(0) else: item = self.currentModelIndex.internalPointer() - POV = item.data(Outline.POV) + POV = item.data(Outline.POV.value) idx = self.findData(POV) if idx <> -1: self.setCurrentIndex(idx) diff --git a/src/ui/mainWindow.py b/src/ui/mainWindow.py index 40dec65..32e3ee9 100644 --- a/src/ui/mainWindow.py +++ b/src/ui/mainWindow.py @@ -486,6 +486,7 @@ class Ui_MainWindow(object): self.horizontalLayout_15.addWidget(self.btnPlotShowSummary) self.verticalLayout_10.addLayout(self.horizontalLayout_15) self.tabPlot = QtWidgets.QTabWidget(self.splitterPlot) + self.tabPlot.setDocumentMode(True) self.tabPlot.setObjectName("tabPlot") self.infos_2 = QtWidgets.QWidget() self.infos_2.setObjectName("infos_2") @@ -678,11 +679,10 @@ class Ui_MainWindow(object): self.lytTabOutline.setObjectName("lytTabOutline") self.verticalLayout_27 = QtWidgets.QVBoxLayout(self.lytTabOutline) self.verticalLayout_27.setObjectName("verticalLayout_27") - self.splitterPlan = QtWidgets.QSplitter(self.lytTabOutline) - self.splitterPlan.setOrientation(QtCore.Qt.Horizontal) - self.splitterPlan.setChildrenCollapsible(False) - self.splitterPlan.setObjectName("splitterPlan") - self.treeWidget_2 = QtWidgets.QTreeWidget(self.splitterPlan) + self.splitterOutlineH = QtWidgets.QSplitter(self.lytTabOutline) + self.splitterOutlineH.setOrientation(QtCore.Qt.Horizontal) + self.splitterOutlineH.setObjectName("splitterOutlineH") + self.treeWidget_2 = QtWidgets.QTreeWidget(self.splitterOutlineH) self.treeWidget_2.setDragEnabled(True) self.treeWidget_2.setDragDropMode(QtWidgets.QAbstractItemView.DragOnly) self.treeWidget_2.setObjectName("treeWidget_2") @@ -692,57 +692,62 @@ class Ui_MainWindow(object): item_0 = QtWidgets.QTreeWidgetItem(self.treeWidget_2) item_1 = QtWidgets.QTreeWidgetItem(item_0) item_1 = QtWidgets.QTreeWidgetItem(item_0) - self.layoutWidget = QtWidgets.QWidget(self.splitterPlan) - self.layoutWidget.setObjectName("layoutWidget") - self.verticalLayout_14 = QtWidgets.QVBoxLayout(self.layoutWidget) + self.widget = QtWidgets.QWidget(self.splitterOutlineH) + self.widget.setObjectName("widget") + self.verticalLayout_14 = QtWidgets.QVBoxLayout(self.widget) self.verticalLayout_14.setContentsMargins(0, 0, 0, 0) self.verticalLayout_14.setObjectName("verticalLayout_14") - self.treePlanOutline = QtWidgets.QTreeView(self.layoutWidget) + self.splitterOutlineV = QtWidgets.QSplitter(self.widget) + self.splitterOutlineV.setOrientation(QtCore.Qt.Vertical) + self.splitterOutlineV.setObjectName("splitterOutlineV") + self.treePlanOutline = QtWidgets.QTreeView(self.splitterOutlineV) self.treePlanOutline.setDragEnabled(True) self.treePlanOutline.setDragDropMode(QtWidgets.QAbstractItemView.DragDrop) self.treePlanOutline.setDefaultDropAction(QtCore.Qt.MoveAction) self.treePlanOutline.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection) self.treePlanOutline.setObjectName("treePlanOutline") - self.verticalLayout_14.addWidget(self.treePlanOutline) - self.groupbox = QtWidgets.QGroupBox(self.layoutWidget) - self.groupbox.setObjectName("groupbox") - self.verticalLayout_13 = QtWidgets.QVBoxLayout(self.groupbox) + self.frame = QtWidgets.QFrame(self.splitterOutlineV) + self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel) + self.frame.setFrameShadow(QtWidgets.QFrame.Raised) + self.frame.setObjectName("frame") + self.verticalLayout_13 = QtWidgets.QVBoxLayout(self.frame) self.verticalLayout_13.setObjectName("verticalLayout_13") self.horizontalLayout_11 = QtWidgets.QHBoxLayout() self.horizontalLayout_11.setObjectName("horizontalLayout_11") - self.lblPlanPOV = QtWidgets.QLabel(self.groupbox) + self.lblPlanPOV = QtWidgets.QLabel(self.frame) + self.lblPlanPOV.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) self.lblPlanPOV.setObjectName("lblPlanPOV") self.horizontalLayout_11.addWidget(self.lblPlanPOV) - self.cmbPlanPOV = cmbOutlinePersoChoser(self.groupbox) + self.cmbPlanPOV = cmbOutlinePersoChoser(self.frame) self.cmbPlanPOV.setFrame(False) self.cmbPlanPOV.setObjectName("cmbPlanPOV") self.horizontalLayout_11.addWidget(self.cmbPlanPOV) self.verticalLayout_13.addLayout(self.horizontalLayout_11) - self.txtPlanSummarySentance = QtWidgets.QLineEdit(self.groupbox) + self.txtPlanSummarySentance = QtWidgets.QLineEdit(self.frame) self.txtPlanSummarySentance.setObjectName("txtPlanSummarySentance") self.verticalLayout_13.addWidget(self.txtPlanSummarySentance) - self.label_9 = QtWidgets.QLabel(self.groupbox) + self.label_9 = QtWidgets.QLabel(self.frame) self.label_9.setObjectName("label_9") self.verticalLayout_13.addWidget(self.label_9) - self.txtPlanSummaryFull = QtWidgets.QPlainTextEdit(self.groupbox) + self.txtPlanSummaryFull = QtWidgets.QPlainTextEdit(self.frame) self.txtPlanSummaryFull.setObjectName("txtPlanSummaryFull") self.verticalLayout_13.addWidget(self.txtPlanSummaryFull) - self.verticalLayout_14.addWidget(self.groupbox) + self.verticalLayout_14.addWidget(self.splitterOutlineV) self.horizontalLayout_18 = QtWidgets.QHBoxLayout() self.horizontalLayout_18.setObjectName("horizontalLayout_18") - self.btnPlanAddFolder = QtWidgets.QPushButton(self.layoutWidget) + self.btnPlanAddFolder = QtWidgets.QPushButton(self.widget) self.btnPlanAddFolder.setText("") icon = QtGui.QIcon.fromTheme("folder-new") self.btnPlanAddFolder.setIcon(icon) self.btnPlanAddFolder.setObjectName("btnPlanAddFolder") self.horizontalLayout_18.addWidget(self.btnPlanAddFolder) - self.btnPlanAddScene = QtWidgets.QPushButton(self.layoutWidget) + self.btnPlanAddScene = QtWidgets.QPushButton(self.widget) self.btnPlanAddScene.setText("") icon = QtGui.QIcon.fromTheme("document-new") self.btnPlanAddScene.setIcon(icon) self.btnPlanAddScene.setObjectName("btnPlanAddScene") self.horizontalLayout_18.addWidget(self.btnPlanAddScene) - self.btnPlanRemoveItem = QtWidgets.QPushButton(self.layoutWidget) + self.btnPlanRemoveItem = QtWidgets.QPushButton(self.widget) self.btnPlanRemoveItem.setText("") icon = QtGui.QIcon.fromTheme("list-remove") self.btnPlanRemoveItem.setIcon(icon) @@ -750,30 +755,32 @@ class Ui_MainWindow(object): self.horizontalLayout_18.addWidget(self.btnPlanRemoveItem) spacerItem8 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_18.addItem(spacerItem8) - self.pushButton_23 = QtWidgets.QPushButton(self.layoutWidget) - self.pushButton_23.setText("") + self.btnPlanShowDetails = QtWidgets.QPushButton(self.widget) + self.btnPlanShowDetails.setText("") icon = QtGui.QIcon.fromTheme("text-x-generic") - self.pushButton_23.setIcon(icon) - self.pushButton_23.setCheckable(True) - self.pushButton_23.setChecked(True) - self.pushButton_23.setObjectName("pushButton_23") - self.horizontalLayout_18.addWidget(self.pushButton_23) + self.btnPlanShowDetails.setIcon(icon) + self.btnPlanShowDetails.setCheckable(True) + self.btnPlanShowDetails.setChecked(True) + self.btnPlanShowDetails.setObjectName("btnPlanShowDetails") + self.horizontalLayout_18.addWidget(self.btnPlanShowDetails) self.verticalLayout_14.addLayout(self.horizontalLayout_18) - self.verticalLayout_27.addWidget(self.splitterPlan) + self.verticalLayout_27.addWidget(self.splitterOutlineH) self.tabMain.addTab(self.lytTabOutline, "") self.lytTabRedac = QtWidgets.QWidget() self.lytTabRedac.setObjectName("lytTabRedac") self.verticalLayout_28 = QtWidgets.QVBoxLayout(self.lytTabRedac) + self.verticalLayout_28.setSpacing(0) + self.verticalLayout_28.setContentsMargins(0, 0, 0, 0) self.verticalLayout_28.setObjectName("verticalLayout_28") self.splitterRedac = QtWidgets.QSplitter(self.lytTabRedac) self.splitterRedac.setOrientation(QtCore.Qt.Horizontal) self.splitterRedac.setObjectName("splitterRedac") - self.layoutWidget1 = QtWidgets.QWidget(self.splitterRedac) - self.layoutWidget1.setObjectName("layoutWidget1") - self.verticalLayout_19 = QtWidgets.QVBoxLayout(self.layoutWidget1) + self.layoutWidget = QtWidgets.QWidget(self.splitterRedac) + self.layoutWidget.setObjectName("layoutWidget") + self.verticalLayout_19 = QtWidgets.QVBoxLayout(self.layoutWidget) self.verticalLayout_19.setContentsMargins(0, 0, 0, 0) self.verticalLayout_19.setObjectName("verticalLayout_19") - self.treeRedacOutline = QtWidgets.QTreeView(self.layoutWidget1) + self.treeRedacOutline = QtWidgets.QTreeView(self.layoutWidget) self.treeRedacOutline.setDragDropMode(QtWidgets.QAbstractItemView.DragDrop) self.treeRedacOutline.setDefaultDropAction(QtCore.Qt.MoveAction) self.treeRedacOutline.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection) @@ -781,19 +788,19 @@ class Ui_MainWindow(object): self.verticalLayout_19.addWidget(self.treeRedacOutline) self.horizontalLayout_31 = QtWidgets.QHBoxLayout() self.horizontalLayout_31.setObjectName("horizontalLayout_31") - self.btnRedacAddFolder = QtWidgets.QPushButton(self.layoutWidget1) + self.btnRedacAddFolder = QtWidgets.QPushButton(self.layoutWidget) self.btnRedacAddFolder.setText("") icon = QtGui.QIcon.fromTheme("folder-new") self.btnRedacAddFolder.setIcon(icon) self.btnRedacAddFolder.setObjectName("btnRedacAddFolder") self.horizontalLayout_31.addWidget(self.btnRedacAddFolder) - self.btnRedacAddScene = QtWidgets.QPushButton(self.layoutWidget1) + self.btnRedacAddScene = QtWidgets.QPushButton(self.layoutWidget) self.btnRedacAddScene.setText("") icon = QtGui.QIcon.fromTheme("document-new") self.btnRedacAddScene.setIcon(icon) self.btnRedacAddScene.setObjectName("btnRedacAddScene") self.horizontalLayout_31.addWidget(self.btnRedacAddScene) - self.btnRedacRemoveItem = QtWidgets.QPushButton(self.layoutWidget1) + self.btnRedacRemoveItem = QtWidgets.QPushButton(self.layoutWidget) self.btnRedacRemoveItem.setText("") icon = QtGui.QIcon.fromTheme("list-remove") self.btnRedacRemoveItem.setIcon(icon) @@ -802,12 +809,12 @@ class Ui_MainWindow(object): spacerItem9 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_31.addItem(spacerItem9) self.verticalLayout_19.addLayout(self.horizontalLayout_31) - self.layoutWidget2 = QtWidgets.QWidget(self.splitterRedac) - self.layoutWidget2.setObjectName("layoutWidget2") - self.verticalLayout_16 = QtWidgets.QVBoxLayout(self.layoutWidget2) + self.layoutWidget1 = QtWidgets.QWidget(self.splitterRedac) + self.layoutWidget1.setObjectName("layoutWidget1") + self.verticalLayout_16 = QtWidgets.QVBoxLayout(self.layoutWidget1) self.verticalLayout_16.setContentsMargins(0, 0, 0, 0) self.verticalLayout_16.setObjectName("verticalLayout_16") - self.txtRedacTitle = QtWidgets.QLineEdit(self.layoutWidget2) + self.txtRedacTitle = QtWidgets.QLineEdit(self.layoutWidget1) font = QtGui.QFont() font.setBold(True) font.setWeight(75) @@ -817,12 +824,12 @@ class Ui_MainWindow(object): self.txtRedacTitle.setFrame(False) self.txtRedacTitle.setObjectName("txtRedacTitle") self.verticalLayout_16.addWidget(self.txtRedacTitle) - self.txtRedacText = QtWidgets.QPlainTextEdit(self.layoutWidget2) + self.txtRedacText = QtWidgets.QPlainTextEdit(self.layoutWidget1) self.txtRedacText.setObjectName("txtRedacText") self.verticalLayout_16.addWidget(self.txtRedacText) self.horizontalLayout_19 = QtWidgets.QHBoxLayout() self.horizontalLayout_19.setObjectName("horizontalLayout_19") - self.pushButton_20 = QtWidgets.QPushButton(self.layoutWidget2) + self.pushButton_20 = QtWidgets.QPushButton(self.layoutWidget1) self.pushButton_20.setText("") icon = QtGui.QIcon.fromTheme("text-x-generic") self.pushButton_20.setIcon(icon) @@ -832,7 +839,7 @@ class Ui_MainWindow(object): self.horizontalLayout_19.addWidget(self.pushButton_20) spacerItem10 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_19.addItem(spacerItem10) - self.pushButton_19 = QtWidgets.QPushButton(self.layoutWidget2) + self.pushButton_19 = QtWidgets.QPushButton(self.layoutWidget1) self.pushButton_19.setText("") icon = QtGui.QIcon.fromTheme("edit-find") self.pushButton_19.setIcon(icon) @@ -849,6 +856,7 @@ class Ui_MainWindow(object): self.tab_17.setObjectName("tab_17") self.verticalLayout_20 = QtWidgets.QVBoxLayout(self.tab_17) self.verticalLayout_20.setSizeConstraint(QtWidgets.QLayout.SetMaximumSize) + self.verticalLayout_20.setContentsMargins(0, 0, 0, 0) self.verticalLayout_20.setObjectName("verticalLayout_20") self.groupBox_4 = collapsibleGroupBox(self.tab_17) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) @@ -856,9 +864,11 @@ class Ui_MainWindow(object): sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.groupBox_4.sizePolicy().hasHeightForWidth()) self.groupBox_4.setSizePolicy(sizePolicy) + self.groupBox_4.setFlat(True) self.groupBox_4.setCheckable(True) self.groupBox_4.setObjectName("groupBox_4") self.formLayout_5 = QtWidgets.QFormLayout(self.groupBox_4) + self.formLayout_5.setContentsMargins(0, 0, 0, 0) self.formLayout_5.setObjectName("formLayout_5") self.lblRedacPOV = QtWidgets.QLabel(self.groupBox_4) self.lblRedacPOV.setObjectName("lblRedacPOV") @@ -869,6 +879,7 @@ 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) @@ -881,22 +892,40 @@ class Ui_MainWindow(object): sizePolicy.setHeightForWidth(self.cmbRedacStatus.sizePolicy().hasHeightForWidth()) self.cmbRedacStatus.setSizePolicy(sizePolicy) self.cmbRedacStatus.setEditable(True) + self.cmbRedacStatus.setFrame(False) self.cmbRedacStatus.setObjectName("cmbRedacStatus") self.formLayout_5.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.cmbRedacStatus) self.label_32 = QtWidgets.QLabel(self.groupBox_4) self.label_32.setObjectName("label_32") self.formLayout_5.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.label_32) - self.chkRedacCompile = QtWidgets.QCheckBox(self.groupBox_4) + self.chkRedacCompile = chkOutlineCompile(self.groupBox_4) self.chkRedacCompile.setText("") self.chkRedacCompile.setObjectName("chkRedacCompile") self.formLayout_5.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.chkRedacCompile) + self.label_29 = QtWidgets.QLabel(self.groupBox_4) + self.label_29.setObjectName("label_29") + self.formLayout_5.setWidget(3, QtWidgets.QFormLayout.LabelRole, self.label_29) + self.txtRedacGoal = QtWidgets.QLineEdit(self.groupBox_4) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.txtRedacGoal.sizePolicy().hasHeightForWidth()) + self.txtRedacGoal.setSizePolicy(sizePolicy) + self.txtRedacGoal.setAutoFillBackground(False) + self.txtRedacGoal.setStyleSheet("border-radius: 6px;") + self.txtRedacGoal.setFrame(False) + self.txtRedacGoal.setObjectName("txtRedacGoal") + self.formLayout_5.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.txtRedacGoal) self.verticalLayout_20.addWidget(self.groupBox_4) self.groupBox_5 = collapsibleGroupBox(self.tab_17) + self.groupBox_5.setFlat(True) self.groupBox_5.setCheckable(True) self.groupBox_5.setObjectName("groupBox_5") self.verticalLayout_22 = QtWidgets.QVBoxLayout(self.groupBox_5) + self.verticalLayout_22.setContentsMargins(0, 0, 0, 0) self.verticalLayout_22.setObjectName("verticalLayout_22") self.txtRedacSummarySentance = QtWidgets.QLineEdit(self.groupBox_5) + self.txtRedacSummarySentance.setInputMask("") self.txtRedacSummarySentance.setObjectName("txtRedacSummarySentance") self.verticalLayout_22.addWidget(self.txtRedacSummarySentance) self.txtRedacSummaryFull = QtWidgets.QPlainTextEdit(self.groupBox_5) @@ -904,9 +933,11 @@ class Ui_MainWindow(object): self.verticalLayout_22.addWidget(self.txtRedacSummaryFull) self.verticalLayout_20.addWidget(self.groupBox_5) self.groupBox_6 = collapsibleGroupBox(self.tab_17) + self.groupBox_6.setFlat(True) self.groupBox_6.setCheckable(True) self.groupBox_6.setObjectName("groupBox_6") self.horizontalLayout_29 = QtWidgets.QHBoxLayout(self.groupBox_6) + self.horizontalLayout_29.setContentsMargins(0, 0, 0, 0) self.horizontalLayout_29.setObjectName("horizontalLayout_29") self.txtRedacNotes = QtWidgets.QPlainTextEdit(self.groupBox_6) self.txtRedacNotes.setObjectName("txtRedacNotes") @@ -916,10 +947,13 @@ class Ui_MainWindow(object): self.tab_18 = QtWidgets.QWidget() self.tab_18.setObjectName("tab_18") self.verticalLayout_21 = QtWidgets.QVBoxLayout(self.tab_18) + self.verticalLayout_21.setContentsMargins(0, 0, 0, 0) self.verticalLayout_21.setObjectName("verticalLayout_21") self.groupBox_3 = QtWidgets.QGroupBox(self.tab_18) + self.groupBox_3.setFlat(True) self.groupBox_3.setObjectName("groupBox_3") self.verticalLayout_15 = QtWidgets.QVBoxLayout(self.groupBox_3) + self.verticalLayout_15.setContentsMargins(0, 0, 0, 0) self.verticalLayout_15.setObjectName("verticalLayout_15") self.lineEdit_3 = QtWidgets.QLineEdit(self.groupBox_3) self.lineEdit_3.setObjectName("lineEdit_3") @@ -1047,18 +1081,18 @@ class Ui_MainWindow(object): self.menubar.addAction(self.menu_Aide.menuAction()) self.retranslateUi(MainWindow) - self.tabMain.setCurrentIndex(2) + self.tabMain.setCurrentIndex(6) self.tabSummary.setCurrentIndex(0) self.tabPersos.setCurrentIndex(0) self.tabPlot.setCurrentIndex(0) - self.comboBox_2.setCurrentIndex(1) + self.comboBox_2.setCurrentIndex(0) self.stkPlotSummary.setCurrentIndex(1) self.tabWidget_2.setCurrentIndex(0) self.tabWidget.setCurrentIndex(3) self.pushButton_16.toggled['bool'].connect(self.plainTextEdit_7.setVisible) - self.pushButton_23.toggled['bool'].connect(self.groupbox.setVisible) self.btnPlotShowSummary.toggled['bool'].connect(self.grpPlotSummary.setVisible) self.comboBox_2.currentIndexChanged['int'].connect(self.stkPlotSummary.setCurrentIndex) + self.btnPlanShowDetails.toggled['bool'].connect(self.frame.setVisible) QtCore.QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): @@ -1149,7 +1183,7 @@ class Ui_MainWindow(object): self.grpPlotSummary.setTitle(_translate("MainWindow", "Résumé")) self.comboBox_2.setItemText(0, _translate("MainWindow", "Un paragraphe")) self.comboBox_2.setItemText(1, _translate("MainWindow", "Une page")) - self.comboBox_2.setItemText(2, _translate("MainWindow", "4 pages")) + self.comboBox_2.setItemText(2, _translate("MainWindow", "Complet")) self.tabMain.setTabText(self.tabMain.indexOf(self.lytTabPlot), _translate("MainWindow", "Intrigues")) self.tabMain.setTabText(self.tabMain.indexOf(self.tab_5), _translate("MainWindow", "Contexte")) self.treeWidget_2.headerItem().setText(0, _translate("MainWindow", "Liste de scènes")) @@ -1162,15 +1196,16 @@ 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")) self.lblPlanPOV.setText(_translate("MainWindow", "POV")) self.txtPlanSummarySentance.setPlaceholderText(_translate("MainWindow", "Résumé de la scène en une ligne")) - self.label_9.setText(_translate("MainWindow", "Résumé en quelques phrases")) + self.label_9.setText(_translate("MainWindow", "Résumé en quelques phrases:")) self.tabMain.setTabText(self.tabMain.indexOf(self.lytTabOutline), _translate("MainWindow", "Plan")) self.groupBox_4.setTitle(_translate("MainWindow", "Propriétés")) self.lblRedacPOV.setText(_translate("MainWindow", "POV")) self.label_30.setText(_translate("MainWindow", "Status")) self.label_32.setText(_translate("MainWindow", "Compile")) + self.label_29.setText(_translate("MainWindow", "Goal")) + self.txtRedacGoal.setPlaceholderText(_translate("MainWindow", "Nombre de mots")) 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")) self.groupBox_6.setTitle(_translate("MainWindow", "Notes pour la scène")) @@ -1214,7 +1249,8 @@ class Ui_MainWindow(object): self.actShowHelp.setText(_translate("MainWindow", "Afficher les &bulles d\'aide")) self.actShowHelp.setShortcut(_translate("MainWindow", "Ctrl+Shift+B")) -from ui.cmbOutlinePersoChoser import cmbOutlinePersoChoser from ui.cmbOutlineStatusChoser import cmbOutlineStatusChoser from ui.sldImportance import sldImportance from ui.collapsibleGroupBox import collapsibleGroupBox +from ui.chkOutlineCompile import chkOutlineCompile +from ui.cmbOutlinePersoChoser import cmbOutlinePersoChoser diff --git a/src/ui/mainWindow.ui b/src/ui/mainWindow.ui index efda77c..bc8de3f 100644 --- a/src/ui/mainWindow.ui +++ b/src/ui/mainWindow.ui @@ -18,7 +18,7 @@ - 2 + 6 true @@ -935,6 +935,9 @@ 0 + + true + Informations générales @@ -1202,7 +1205,7 @@ - 1 + 0 false @@ -1219,7 +1222,7 @@ - 4 pages + Complet @@ -1281,13 +1284,10 @@ - + Qt::Horizontal - - false - true @@ -1331,66 +1331,75 @@ - + - - - true + + + Qt::Vertical - - QAbstractItemView::DragDrop - - - Qt::MoveAction - - - QAbstractItemView::ExtendedSelection - - - - - - - Détails - - - - - - - - POV - - - - - - - false - - - - - - - - - Résumé de la scène en une ligne - - - - - - - Résumé en quelques phrases - - - - - - - + + + true + + + QAbstractItemView::DragDrop + + + Qt::MoveAction + + + QAbstractItemView::ExtendedSelection + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + + + POV + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + false + + + + + + + + + Résumé de la scène en une ligne + + + + + + + Résumé en quelques phrases: + + + + + + + + @@ -1445,7 +1454,7 @@ - + @@ -1475,6 +1484,12 @@ Rédaction + + 0 + + + 0 + @@ -1647,6 +1662,9 @@ QLayout::SetMaximumSize + + 0 + @@ -1658,10 +1676,16 @@ Propriétés + + true + true + + 0 + @@ -1677,6 +1701,9 @@ 0 + + false + @@ -1697,6 +1724,9 @@ true + + false + @@ -1707,12 +1737,41 @@ - + + + + + Goal + + + + + + + + 0 + 0 + + + + false + + + border-radius: 6px; + + + false + + + Nombre de mots + + + @@ -1721,12 +1780,21 @@ Résumé de la scène + + true + true + + 0 + + + + Résumé de la scène en une ligne @@ -1743,10 +1811,16 @@ Notes pour la scène + + true + true + + 0 + @@ -1760,12 +1834,21 @@ Tools + + 0 + Aide mémoire + + true + + + 0 + @@ -2045,6 +2128,11 @@ QComboBox
ui.cmbOutlineStatusChoser.h
+ + chkOutlineCompile + QCheckBox +
ui.chkOutlineCompile.h
+
@@ -2055,28 +2143,12 @@ setVisible(bool) - 117 - 124 + 436 + 127 - 105 - 88 - - - - - pushButton_23 - toggled(bool) - groupbox - setVisible(bool) - - - 111 - 102 - - - 111 - 102 + 436 + 120 @@ -2087,12 +2159,12 @@ setVisible(bool) - 111 - 102 + 332 + 762 - 111 - 102 + 860 + 170 @@ -2103,12 +2175,28 @@ setCurrentIndex(int) - 111 - 102 + 868 + 129 - 111 - 102 + 868 + 232 + + + + + btnPlanShowDetails + toggled(bool) + frame + setVisible(bool) + + + 505 + 617 + + + 508 + 566 diff --git a/src/ui/treeOutlineDelegates.py b/src/ui/treeOutlineDelegates.py index 16dd960..c295954 100644 --- a/src/ui/treeOutlineDelegates.py +++ b/src/ui/treeOutlineDelegates.py @@ -48,8 +48,8 @@ class treeOutlineCompileDelegate(QStyledItemDelegate): def __init__(self, parent=None): QStyledItemDelegate.__init__(self, parent) - def displayText(self, value, locale): - return "" + #def displayText(self, value, locale): + #return "" class treeOutlineStatusDelegate(QStyledItemDelegate): diff --git a/test_project/outline.xml b/test_project/outline.xml index 2f55492..f7beed6 100644 --- a/test_project/outline.xml +++ b/test_project/outline.xml @@ -1,30 +1,11 @@ - - - - - - - - - - - - - - - - - - - - - - - - + + + + + - +