diff --git a/TODO.t2t b/TODO.t2t index 8a802de..73bcb8b 100644 --- a/TODO.t2t +++ b/TODO.t2t @@ -1,5 +1,8 @@ +Name: +- Digiscript? + 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) diff --git a/makefile b/makefile index d15ed54..afd549a 100644 --- a/makefile +++ b/makefile @@ -9,7 +9,7 @@ run: $(UIs) python3 src/main.py debug: $(UIs) - gdb --args python src/main.py + gdb --args python3 src/main.py lineprof: kernprof -l -v src/main.py diff --git a/src/functions.py b/src/functions.py index 418b5be..17a2b17 100644 --- a/src/functions.py +++ b/src/functions.py @@ -22,7 +22,7 @@ def toFloat(text): return 0. def toString(text): - if text == None: + if text in [None, "None"]: return "" else: return str(text) diff --git a/src/loadSave.py b/src/loadSave.py index a0a18fe..ad35da2 100644 --- a/src/loadSave.py +++ b/src/loadSave.py @@ -1,15 +1,14 @@ #!/usr/bin/env python #--!-- coding: utf8 --!-- - - - from qt import * from functions import * from lxml import etree as ET def saveStandardItemModelXML(mdl, xml): + root = ET.Element("model") + root.attrib["version"] = qApp.applicationVersion() # Header header = ET.SubElement(root, "header") @@ -47,7 +46,6 @@ def saveStandardItemModelXML(mdl, xml): def loadStandardItemModelXML(mdl, xml): - print(qApp.tr("Loading {}... ").format(xml), end="") try: diff --git a/src/main.py b/src/main.py index e5334b9..0a7f879 100644 --- a/src/main.py +++ b/src/main.py @@ -3,13 +3,15 @@ import sys from qt import * +_version = "0.1" def run(): app = QApplication(sys.argv) app.setOrganizationName("Theologeek") app.setOrganizationDomain("www.theologeek.ch") app.setApplicationName("snowFlaqe") - + app.setApplicationVersion("0.1") + app.setStyle("Fusion") ### Translation process diff --git a/src/mainWindow.py b/src/mainWindow.py index 341cad6..1df6540 100644 --- a/src/mainWindow.py +++ b/src/mainWindow.py @@ -163,26 +163,16 @@ class MainWindow(QMainWindow, Ui_MainWindow): self.treePlanOutline.setModelPersos(self.mdlPersos) self.treePlanOutline.setModelLabels(self.mdlLabels) self.treePlanOutline.setModelStatus(self.mdlStatus) - self.viewRedacProperties.setModels(self.mdlOutline, self.mdlPersos, self.mdlLabels, self.mdlStatus) + self.redacMetadata.setModels(self.mdlOutline, self.mdlPersos, self.mdlLabels, self.mdlStatus) + self.outlineItemEditor.setModels(self.mdlOutline, self.mdlPersos, self.mdlLabels, self.mdlStatus) self.treePlanOutline.setModel(self.mdlOutline) - self.cmbPlanPOV.setModels(self.mdlPersos, self.mdlOutline) self.redacEditor.setModel(self.mdlOutline) - self.mprPlan = QDataWidgetMapper() - self.mprPlan.setModel(self.mdlOutline) - mapping = [ - (self.txtPlanSummarySentance, Outline.summarySentance.value), - (self.txtPlanSummaryFull, Outline.summaryFull.value), - (self.txtOutlineGoal, Outline.setGoal.value) - ] - 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.tabMain.currentChanged.connect(self.mprPlan.submit) + self.treePlanOutline.selectionModel().selectionChanged.connect( + lambda: self.outlineItemEditor.selectionChanged(self.treePlanOutline)) + self.treePlanOutline.clicked.connect( + lambda: self.outlineItemEditor.selectionChanged(self.treePlanOutline)) self.treeRedacOutline.setSelectionModel(self.treePlanOutline.selectionModel()) @@ -193,30 +183,15 @@ class MainWindow(QMainWindow, Ui_MainWindow): self.btnRedacRemoveItem.clicked.connect(self.outlineRemoveItems) self.btnPlanRemoveItem.clicked.connect(self.outlineRemoveItems) - self.mprOutline = QDataWidgetMapper() - self.mprOutline.setModel(self.mdlOutline) - mapping = [ - (self.txtRedacSummarySentance, Outline.summarySentance.value), - (self.txtRedacSummaryFull, Outline.summaryFull.value), - (self.txtRedacNotes, Outline.notes.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().selectionChanged.connect( - lambda: self.viewRedacProperties.selectionChanged(self.treeRedacOutline)) + lambda: self.redacMetadata.selectionChanged(self.treeRedacOutline)) self.treeRedacOutline.clicked.connect( - lambda: self.viewRedacProperties.selectionChanged(self.treeRedacOutline)) + lambda: self.redacMetadata.selectionChanged(self.treeRedacOutline)) #self.treeRedacOutline.selectionModel().currentChanged.connect(self.redacEditor.setCurrentModelIndex) self.treeRedacOutline.selectionModel().selectionChanged.connect(self.redacEditor.setView) self.treeRedacOutline.selectionModel().currentChanged.connect(self.redacEditor.txtRedacText.setCurrentModelIndex) - self.tabMain.currentChanged.connect(self.mprOutline.submit) - self.treeRedacOutline.selectionModel().selectionChanged.connect(self.outlineSelectionChanged) self.treeRedacOutline.selectionModel().selectionChanged.connect(self.outlineSelectionChanged) self.treePlanOutline.selectionModel().selectionChanged.connect(self.outlineSelectionChanged) @@ -264,7 +239,6 @@ class MainWindow(QMainWindow, Ui_MainWindow): else: hidden = False - self.btnRedacFolderText.setHidden(hidden) self.btnRedacFolderCork.setHidden(hidden) self.btnRedacFolderOutline.setHidden(hidden) @@ -484,6 +458,8 @@ class MainWindow(QMainWindow, Ui_MainWindow): self.menuTools.addMenu(self.menuDict) self.actSpellcheck.toggled.connect(self.redacEditor.toggleSpellcheck) + self.actSpellcheck.toggled.connect(self.redacMetadata.toggleSpellcheck) + self.actSpellcheck.toggled.connect(self.outlineItemEditor.toggleSpellcheck) self.dictChanged.connect(self.redacEditor.setDict) diff --git a/src/ui/editors/editorWidget.py b/src/ui/editors/editorWidget.py index 999274f..723937b 100644 --- a/src/ui/editors/editorWidget.py +++ b/src/ui/editors/editorWidget.py @@ -1,13 +1,10 @@ #!/usr/bin/env python #--!-- coding: utf8 --!-- - - - from qt import * from enums import * from ui.editors.editorWidget_ui import * -from ui.editors.customTextEdit import * +from ui.views.textEditView import * from functions import * class editorWidget(QWidget, Ui_editorWidget_ui): @@ -147,9 +144,9 @@ class editorWidget(QWidget, Ui_editorWidget_ui): self.corkView.setModel(self._model) self.corkView.setRootIndex(index) self.corkView.selectionModel().selectionChanged.connect( - lambda: mainWindow().viewRedacProperties.selectionChanged(self.corkView)) + lambda: mainWindow().redacMetadata.selectionChanged(self.corkView)) self.corkView.clicked.connect( - lambda: mainWindow().viewRedacProperties.selectionChanged(self.corkView)) + lambda: mainWindow().redacMetadata.selectionChanged(self.corkView)) elif item.isFolder() and self.folderView == "outline": @@ -160,9 +157,9 @@ class editorWidget(QWidget, Ui_editorWidget_ui): self.outlineView.setModel(self._model) self.outlineView.setRootIndex(index) self.outlineView.selectionModel().selectionChanged.connect( - lambda: mainWindow().viewRedacProperties.selectionChanged(self.outlineView)) + lambda: mainWindow().redacMetadata.selectionChanged(self.outlineView)) self.outlineView.clicked.connect( - lambda: mainWindow().viewRedacProperties.selectionChanged(self.outlineView)) + lambda: mainWindow().redacMetadata.selectionChanged(self.outlineView)) else: diff --git a/src/ui/editors/editorWidget_ui.py b/src/ui/editors/editorWidget_ui.py index ba4030c..3ae3cc3 100644 --- a/src/ui/editors/editorWidget_ui.py +++ b/src/ui/editors/editorWidget_ui.py @@ -22,7 +22,7 @@ class Ui_editorWidget_ui(object): self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.scene) self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0) self.horizontalLayout_2.setObjectName("horizontalLayout_2") - self.txtRedacText = customTextEdit(self.scene) + self.txtRedacText = textEditView(self.scene) self.txtRedacText.setObjectName("txtRedacText") self.horizontalLayout_2.addWidget(self.txtRedacText) self.stack.addWidget(self.scene) @@ -63,13 +63,13 @@ class Ui_editorWidget_ui(object): self.verticalLayout_2.addWidget(self.stack) self.retranslateUi(editorWidget_ui) - self.stack.setCurrentIndex(2) + self.stack.setCurrentIndex(0) QtCore.QMetaObject.connectSlotsByName(editorWidget_ui) def retranslateUi(self, editorWidget_ui): _translate = QtCore.QCoreApplication.translate editorWidget_ui.setWindowTitle(_translate("editorWidget_ui", "Form")) -from ui.editors.customTextEdit import customTextEdit +from ui.views.textEditView import textEditView from ui.views.outlineView import outlineView from ui.views.corkView import corkView diff --git a/src/ui/editors/editorWidget_ui.ui b/src/ui/editors/editorWidget_ui.ui index 92ed5fb..3ccda8c 100644 --- a/src/ui/editors/editorWidget_ui.ui +++ b/src/ui/editors/editorWidget_ui.ui @@ -20,7 +20,7 @@ - 2 + 0 @@ -28,7 +28,7 @@ 0 - + @@ -88,9 +88,9 @@ - customTextEdit + textEditView QTextEdit -
ui.editors.customTextEdit.h
+
ui.views.textEditView.h
outlineView diff --git a/src/ui/editors/t2tHighlighter.py b/src/ui/editors/t2tHighlighter.py index 8ed7745..ac60faa 100644 --- a/src/ui/editors/t2tHighlighter.py +++ b/src/ui/editors/t2tHighlighter.py @@ -26,6 +26,7 @@ class t2tHighlighter (QSyntaxHighlighter): # Stupid variable that fixes the loss of QTextBlockUserData. self.thisDocument = editor.document() + self.style = t2tHighlighterStyle(self.editor, style) self.inDocRules = [] diff --git a/src/ui/mainWindow.py b/src/ui/mainWindow.py index 9e23229..54de993 100644 --- a/src/ui/mainWindow.py +++ b/src/ui/mainWindow.py @@ -33,19 +33,19 @@ class Ui_MainWindow(object): self.label_10 = QtWidgets.QLabel(self.grpBookInfos) self.label_10.setObjectName("label_10") self.formLayout_3.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label_10) - self.txtGeneralTitle = QtWidgets.QLineEdit(self.grpBookInfos) + self.txtGeneralTitle = lineEditView(self.grpBookInfos) self.txtGeneralTitle.setObjectName("txtGeneralTitle") self.formLayout_3.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.txtGeneralTitle) self.label_11 = QtWidgets.QLabel(self.grpBookInfos) self.label_11.setObjectName("label_11") self.formLayout_3.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label_11) - self.txtGeneralSubtitle = QtWidgets.QLineEdit(self.grpBookInfos) + self.txtGeneralSubtitle = lineEditView(self.grpBookInfos) self.txtGeneralSubtitle.setObjectName("txtGeneralSubtitle") self.formLayout_3.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.txtGeneralSubtitle) self.label_12 = QtWidgets.QLabel(self.grpBookInfos) self.label_12.setObjectName("label_12") self.formLayout_3.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.label_12) - self.txtGeneralSerie = QtWidgets.QLineEdit(self.grpBookInfos) + self.txtGeneralSerie = lineEditView(self.grpBookInfos) self.txtGeneralSerie.setObjectName("txtGeneralSerie") self.formLayout_3.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.txtGeneralSerie) self.label_13 = QtWidgets.QLabel(self.grpBookInfos) @@ -53,7 +53,7 @@ class Ui_MainWindow(object): self.formLayout_3.setWidget(3, QtWidgets.QFormLayout.LabelRole, self.label_13) self.horizontalLayout_25 = QtWidgets.QHBoxLayout() self.horizontalLayout_25.setObjectName("horizontalLayout_25") - self.txtGeneralVolume = QtWidgets.QLineEdit(self.grpBookInfos) + self.txtGeneralVolume = lineEditView(self.grpBookInfos) self.txtGeneralVolume.setObjectName("txtGeneralVolume") self.horizontalLayout_25.addWidget(self.txtGeneralVolume) spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) @@ -62,13 +62,13 @@ class Ui_MainWindow(object): self.label_14 = QtWidgets.QLabel(self.grpBookInfos) self.label_14.setObjectName("label_14") self.formLayout_3.setWidget(4, QtWidgets.QFormLayout.LabelRole, self.label_14) - self.txtGeneralGenre = QtWidgets.QLineEdit(self.grpBookInfos) + self.txtGeneralGenre = lineEditView(self.grpBookInfos) self.txtGeneralGenre.setObjectName("txtGeneralGenre") self.formLayout_3.setWidget(4, QtWidgets.QFormLayout.FieldRole, self.txtGeneralGenre) self.label_16 = QtWidgets.QLabel(self.grpBookInfos) self.label_16.setObjectName("label_16") self.formLayout_3.setWidget(5, QtWidgets.QFormLayout.LabelRole, self.label_16) - self.txtGeneralLicense = QtWidgets.QLineEdit(self.grpBookInfos) + self.txtGeneralLicense = lineEditView(self.grpBookInfos) self.txtGeneralLicense.setObjectName("txtGeneralLicense") self.formLayout_3.setWidget(5, QtWidgets.QFormLayout.FieldRole, self.txtGeneralLicense) self.horizontalLayout_26.addWidget(self.grpBookInfos) @@ -80,13 +80,13 @@ class Ui_MainWindow(object): self.label_15 = QtWidgets.QLabel(self.grpAuthor) self.label_15.setObjectName("label_15") self.formLayout_4.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label_15) - self.txtGeneralAuthor = QtWidgets.QLineEdit(self.grpAuthor) + self.txtGeneralAuthor = lineEditView(self.grpAuthor) self.txtGeneralAuthor.setObjectName("txtGeneralAuthor") self.formLayout_4.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.txtGeneralAuthor) self.label_19 = QtWidgets.QLabel(self.grpAuthor) self.label_19.setObjectName("label_19") self.formLayout_4.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label_19) - self.txtGeneralEmail = QtWidgets.QLineEdit(self.grpAuthor) + self.txtGeneralEmail = lineEditView(self.grpAuthor) self.txtGeneralEmail.setObjectName("txtGeneralEmail") self.formLayout_4.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.txtGeneralEmail) self.cmbStyle = QtWidgets.QComboBox(self.grpAuthor) @@ -109,7 +109,7 @@ class Ui_MainWindow(object): self.label = QtWidgets.QLabel(self.tab_14) self.label.setObjectName("label") self.verticalLayout_5.addWidget(self.label) - self.txtSummarySentance = QtWidgets.QPlainTextEdit(self.tab_14) + self.txtSummarySentance = textEditView(self.tab_14) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) @@ -138,7 +138,7 @@ class Ui_MainWindow(object): self.label_21 = QtWidgets.QLabel(self.tab_13) self.label_21.setObjectName("label_21") self.verticalLayout.addWidget(self.label_21) - self.txtSummarySentance_2 = QtWidgets.QPlainTextEdit(self.tab_13) + self.txtSummarySentance_2 = textEditView(self.tab_13) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) @@ -160,7 +160,7 @@ class Ui_MainWindow(object): self.label_2 = QtWidgets.QLabel(self.tab_13) self.label_2.setObjectName("label_2") self.verticalLayout_2.addWidget(self.label_2) - self.txtSummaryPara = QtWidgets.QPlainTextEdit(self.tab_13) + self.txtSummaryPara = textEditView(self.tab_13) self.txtSummaryPara.setObjectName("txtSummaryPara") self.verticalLayout_2.addWidget(self.txtSummaryPara) self.lblSummaryWCPara = QtWidgets.QLabel(self.tab_13) @@ -185,7 +185,7 @@ class Ui_MainWindow(object): self.label_22 = QtWidgets.QLabel(self.tabWidgetPage1) self.label_22.setObjectName("label_22") self.verticalLayout_6.addWidget(self.label_22) - self.txtSummaryPara_2 = QtWidgets.QPlainTextEdit(self.tabWidgetPage1) + self.txtSummaryPara_2 = textEditView(self.tabWidgetPage1) self.txtSummaryPara_2.setReadOnly(True) self.txtSummaryPara_2.setObjectName("txtSummaryPara_2") self.verticalLayout_6.addWidget(self.txtSummaryPara_2) @@ -207,7 +207,7 @@ class Ui_MainWindow(object): self.label_17 = QtWidgets.QLabel(self.tabWidgetPage1) self.label_17.setObjectName("label_17") self.verticalLayout_3.addWidget(self.label_17) - self.txtSummaryPage = QtWidgets.QPlainTextEdit(self.tabWidgetPage1) + self.txtSummaryPage = textEditView(self.tabWidgetPage1) self.txtSummaryPage.setObjectName("txtSummaryPage") self.verticalLayout_3.addWidget(self.txtSummaryPage) self.lblSummaryWCPage = QtWidgets.QLabel(self.tabWidgetPage1) @@ -225,9 +225,8 @@ class Ui_MainWindow(object): self.label_23 = QtWidgets.QLabel(self.tabWidgetPage2) self.label_23.setObjectName("label_23") self.verticalLayout_7.addWidget(self.label_23) - self.txtSummaryPage_2 = QtWidgets.QPlainTextEdit(self.tabWidgetPage2) + self.txtSummaryPage_2 = textEditView(self.tabWidgetPage2) self.txtSummaryPage_2.setReadOnly(True) - self.txtSummaryPage_2.setPlainText("") self.txtSummaryPage_2.setObjectName("txtSummaryPage_2") self.verticalLayout_7.addWidget(self.txtSummaryPage_2) self.btnStepSeven = QtWidgets.QPushButton(self.tabWidgetPage2) @@ -246,7 +245,7 @@ class Ui_MainWindow(object): self.label_20 = QtWidgets.QLabel(self.tabWidgetPage2) self.label_20.setObjectName("label_20") self.verticalLayout_4.addWidget(self.label_20) - self.txtSummaryFull = QtWidgets.QPlainTextEdit(self.tabWidgetPage2) + self.txtSummaryFull = textEditView(self.tabWidgetPage2) self.txtSummaryFull.setObjectName("txtSummaryFull") self.verticalLayout_4.addWidget(self.txtSummaryFull) self.lblSummaryWCFull = QtWidgets.QLabel(self.tabWidgetPage2) @@ -649,8 +648,7 @@ class Ui_MainWindow(object): self.page.setObjectName("page") self.horizontalLayout_6 = QtWidgets.QHBoxLayout(self.page) self.horizontalLayout_6.setObjectName("horizontalLayout_6") - self.txtPlotSummaryPara = QtWidgets.QPlainTextEdit(self.page) - self.txtPlotSummaryPara.setReadOnly(True) + self.txtPlotSummaryPara = textEditView(self.page) self.txtPlotSummaryPara.setObjectName("txtPlotSummaryPara") self.horizontalLayout_6.addWidget(self.txtPlotSummaryPara) self.stkPlotSummary.addWidget(self.page) @@ -658,8 +656,7 @@ class Ui_MainWindow(object): self.page_2.setObjectName("page_2") self.horizontalLayout_10 = QtWidgets.QHBoxLayout(self.page_2) self.horizontalLayout_10.setObjectName("horizontalLayout_10") - self.txtPlotSummaryPage = QtWidgets.QPlainTextEdit(self.page_2) - self.txtPlotSummaryPage.setReadOnly(True) + self.txtPlotSummaryPage = textEditView(self.page_2) self.txtPlotSummaryPage.setObjectName("txtPlotSummaryPage") self.horizontalLayout_10.addWidget(self.txtPlotSummaryPage) self.stkPlotSummary.addWidget(self.page_2) @@ -667,8 +664,7 @@ class Ui_MainWindow(object): self.page_3.setObjectName("page_3") self.horizontalLayout_13 = QtWidgets.QHBoxLayout(self.page_3) self.horizontalLayout_13.setObjectName("horizontalLayout_13") - self.txtPlotSummaryFull = QtWidgets.QPlainTextEdit(self.page_3) - self.txtPlotSummaryFull.setReadOnly(True) + self.txtPlotSummaryFull = textEditView(self.page_3) self.txtPlotSummaryFull.setObjectName("txtPlotSummaryFull") self.horizontalLayout_13.addWidget(self.txtPlotSummaryFull) self.stkPlotSummary.addWidget(self.page_3) @@ -716,44 +712,9 @@ class Ui_MainWindow(object): 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") - spacerItem8 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) - self.horizontalLayout_11.addItem(spacerItem8) - 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.frame) - self.cmbPlanPOV.setFrame(False) - self.cmbPlanPOV.setObjectName("cmbPlanPOV") - self.horizontalLayout_11.addWidget(self.cmbPlanPOV) - self.lblPlanGoal = QtWidgets.QLabel(self.frame) - self.lblPlanGoal.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) - self.lblPlanGoal.setObjectName("lblPlanGoal") - self.horizontalLayout_11.addWidget(self.lblPlanGoal) - self.txtOutlineGoal = QtWidgets.QLineEdit(self.frame) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.txtOutlineGoal.sizePolicy().hasHeightForWidth()) - self.txtOutlineGoal.setSizePolicy(sizePolicy) - self.txtOutlineGoal.setAutoFillBackground(False) - self.txtOutlineGoal.setStyleSheet("border-radius: 6px;") - self.txtOutlineGoal.setFrame(False) - self.txtOutlineGoal.setObjectName("txtOutlineGoal") - self.horizontalLayout_11.addWidget(self.txtOutlineGoal) - self.verticalLayout_13.addLayout(self.horizontalLayout_11) - self.txtPlanSummarySentance = QtWidgets.QLineEdit(self.frame) - self.txtPlanSummarySentance.setText("") - self.txtPlanSummarySentance.setObjectName("txtPlanSummarySentance") - self.verticalLayout_13.addWidget(self.txtPlanSummarySentance) - 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.frame) - self.txtPlanSummaryFull.setObjectName("txtPlanSummaryFull") - self.verticalLayout_13.addWidget(self.txtPlanSummaryFull) + self.outlineItemEditor = basicItemView(self.frame) + self.outlineItemEditor.setObjectName("outlineItemEditor") + self.verticalLayout_13.addWidget(self.outlineItemEditor) self.verticalLayout_14.addWidget(self.splitterOutlineV) self.horizontalLayout_18 = QtWidgets.QHBoxLayout() self.horizontalLayout_18.setObjectName("horizontalLayout_18") @@ -775,8 +736,8 @@ class Ui_MainWindow(object): self.btnPlanRemoveItem.setIcon(icon) self.btnPlanRemoveItem.setObjectName("btnPlanRemoveItem") self.horizontalLayout_18.addWidget(self.btnPlanRemoveItem) - spacerItem9 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) - self.horizontalLayout_18.addItem(spacerItem9) + spacerItem8 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) + self.horizontalLayout_18.addItem(spacerItem8) self.btnPlanShowDetails = QtWidgets.QPushButton(self.layoutWidget) self.btnPlanShowDetails.setText("") icon = QtGui.QIcon.fromTheme("text-x-generic") @@ -823,8 +784,8 @@ class Ui_MainWindow(object): self.btnRedacRemoveItem.setIcon(icon) self.btnRedacRemoveItem.setObjectName("btnRedacRemoveItem") self.horizontalLayout_31.addWidget(self.btnRedacRemoveItem) - spacerItem10 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) - self.horizontalLayout_31.addItem(spacerItem10) + spacerItem9 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) + self.horizontalLayout_31.addItem(spacerItem9) self.verticalLayout_30.addLayout(self.horizontalLayout_31) self.layoutWidget1 = QtWidgets.QWidget(self.splitterRedac) self.layoutWidget1.setObjectName("layoutWidget1") @@ -871,8 +832,8 @@ class Ui_MainWindow(object): self.sldCorkSizeFactor.setOrientation(QtCore.Qt.Horizontal) self.sldCorkSizeFactor.setObjectName("sldCorkSizeFactor") self.horizontalLayout_19.addWidget(self.sldCorkSizeFactor) - spacerItem11 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) - self.horizontalLayout_19.addItem(spacerItem11) + spacerItem10 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) + self.horizontalLayout_19.addItem(spacerItem10) self.lblRedacWC = QtWidgets.QLabel(self.layoutWidget1) self.lblRedacWC.setMinimumSize(QtCore.QSize(10, 0)) self.lblRedacWC.setText("") @@ -909,49 +870,9 @@ class Ui_MainWindow(object): self.verticalLayout_20.setSizeConstraint(QtWidgets.QLayout.SetMaximumSize) self.verticalLayout_20.setContentsMargins(0, 0, 0, 0) self.verticalLayout_20.setObjectName("verticalLayout_20") - self.groupBox_4 = collapsibleGroupBox2(self.tab_17) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) - sizePolicy.setHorizontalStretch(0) - 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.verticalLayout_28 = QtWidgets.QVBoxLayout(self.groupBox_4) - self.verticalLayout_28.setContentsMargins(0, 0, 0, 0) - self.verticalLayout_28.setObjectName("verticalLayout_28") - self.viewRedacProperties = propertiesView(self.groupBox_4) - self.viewRedacProperties.setMinimumSize(QtCore.QSize(0, 50)) - self.viewRedacProperties.setObjectName("viewRedacProperties") - self.verticalLayout_28.addWidget(self.viewRedacProperties) - self.verticalLayout_20.addWidget(self.groupBox_4) - self.groupBox_5 = collapsibleGroupBox2(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) - self.txtRedacSummaryFull.setObjectName("txtRedacSummaryFull") - self.verticalLayout_22.addWidget(self.txtRedacSummaryFull) - self.verticalLayout_20.addWidget(self.groupBox_5) - self.groupBox_6 = collapsibleGroupBox2(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") - self.horizontalLayout_29.addWidget(self.txtRedacNotes) - self.verticalLayout_20.addWidget(self.groupBox_6) + self.redacMetadata = metadataView(self.tab_17) + self.redacMetadata.setObjectName("redacMetadata") + self.verticalLayout_20.addWidget(self.redacMetadata) self.tabRedacInfos.addTab(self.tab_17, "") self.tab_18 = QtWidgets.QWidget() self.tab_18.setObjectName("tab_18") @@ -1121,12 +1042,12 @@ class Ui_MainWindow(object): self.menubar.addAction(self.menuHelp.menuAction()) self.retranslateUi(MainWindow) - self.tabMain.setCurrentIndex(6) - self.tabSummary.setCurrentIndex(0) + self.tabMain.setCurrentIndex(1) + self.tabSummary.setCurrentIndex(3) self.tabPersos.setCurrentIndex(0) self.tabPlot.setCurrentIndex(0) self.comboBox_2.setCurrentIndex(0) - self.stkPlotSummary.setCurrentIndex(1) + self.stkPlotSummary.setCurrentIndex(0) self.tabRedacInfos.setCurrentIndex(0) self.tabWidget.setCurrentIndex(4) self.pushButton_16.toggled['bool'].connect(self.plainTextEdit_7.setVisible) @@ -1238,21 +1159,12 @@ 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.lblPlanPOV.setText(_translate("MainWindow", "POV:")) - self.lblPlanGoal.setText(_translate("MainWindow", "Goal:")) - self.txtOutlineGoal.setPlaceholderText(_translate("MainWindow", "Word count")) - self.txtPlanSummarySentance.setPlaceholderText(_translate("MainWindow", "One line scene summary")) - self.label_9.setText(_translate("MainWindow", "Few sentences summary:")) self.tabMain.setTabText(self.tabMain.indexOf(self.lytTabOutline), _translate("MainWindow", "Outline")) self.btnRedacFolderText.setText(_translate("MainWindow", "Text")) self.btnRedacFolderCork.setText(_translate("MainWindow", "Cork")) self.btnRedacFolderOutline.setText(_translate("MainWindow", "Outline")) self.btnRedacFullscreen.setShortcut(_translate("MainWindow", "F11")) - self.groupBox_4.setTitle(_translate("MainWindow", "Properties")) - self.groupBox_5.setTitle(_translate("MainWindow", "Scene summary")) - self.txtRedacSummarySentance.setPlaceholderText(_translate("MainWindow", "One line scene summary")) - self.groupBox_6.setTitle(_translate("MainWindow", "Notes")) - self.tabRedacInfos.setTabText(self.tabRedacInfos.indexOf(self.tab_17), _translate("MainWindow", "Scene")) + self.tabRedacInfos.setTabText(self.tabRedacInfos.indexOf(self.tab_17), _translate("MainWindow", "Metadata")) self.groupBox_3.setTitle(_translate("MainWindow", "Cheat sheet")) self.lineEdit_3.setPlaceholderText(_translate("MainWindow", "Filter")) __sortingEnabled = self.listWidget_5.isSortingEnabled() @@ -1299,10 +1211,11 @@ class Ui_MainWindow(object): self.actLabels.setText(_translate("MainWindow", "Labels...")) self.actStatus.setText(_translate("MainWindow", "Status...")) -from ui.views.outlineView import outlineView -from ui.editors.editorWidget import editorWidget -from ui.views.propertiesView import propertiesView -from ui.collapsibleGroupBox2 import collapsibleGroupBox2 -from ui.sldImportance import sldImportance -from ui.views.cmbOutlinePersoChoser import cmbOutlinePersoChoser +from ui.views.metadataView import metadataView from ui.views.treeView import treeView +from ui.views.lineEditView import lineEditView +from ui.views.outlineView import outlineView +from ui.views.basicItemView import basicItemView +from ui.sldImportance import sldImportance +from ui.editors.editorWidget import editorWidget +from ui.views.textEditView import textEditView diff --git a/src/ui/mainWindow.ui b/src/ui/mainWindow.ui index 0ec7879..50920af 100644 --- a/src/ui/mainWindow.ui +++ b/src/ui/mainWindow.ui @@ -18,7 +18,7 @@ - 6 + 1 true @@ -53,7 +53,7 @@ - + @@ -63,7 +63,7 @@ - + @@ -73,7 +73,7 @@ - + @@ -85,7 +85,7 @@ - + @@ -110,7 +110,7 @@ - + @@ -120,7 +120,7 @@ - + @@ -148,7 +148,7 @@
- + @@ -158,7 +158,7 @@ - + @@ -181,7 +181,7 @@ QTabWidget::West - 0 + 3 @@ -196,7 +196,7 @@ - + 0 @@ -254,7 +254,7 @@ - + 0 @@ -298,7 +298,7 @@ - + @@ -351,7 +351,7 @@ - + true @@ -401,7 +401,7 @@ - + @@ -429,13 +429,10 @@ - + true - - - @@ -469,7 +466,7 @@ - + @@ -1233,38 +1230,26 @@ - 1 + 0 - - - true - - + - - - true - - + - - - true - - + @@ -1367,90 +1352,7 @@ - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - POV: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - false - - - - - - - Goal: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 0 - 0 - - - - false - - - border-radius: 6px; - - - false - - - Word count - - - - - - - - - - - - One line scene summary - - - - - - - Few sentences summary: - - - - - + @@ -1795,9 +1697,9 @@ - Scene + Metadata - + QLayout::SetMaximumSize @@ -1805,90 +1707,7 @@ 0 - - - - 0 - 0 - - - - Properties - - - true - - - true - - - - 0 - - - - - - 0 - 50 - - - - - - - - - - - Scene summary - - - true - - - true - - - - 0 - - - - - - - - One line scene summary - - - - - - - - - - - - - Notes - - - true - - - true - - - - 0 - - - - - - + @@ -2230,43 +2049,48 @@ + + textEditView + QTextEdit +
ui.views.textEditView.h
+
+ + outlineView + QTreeView +
ui.views.outlineView.h
+
sldImportance QWidget
ui.sldImportance.h
1
- - cmbOutlinePersoChoser - QComboBox -
ui.views.cmbOutlinePersoChoser.h
-
editorWidget QWidget
ui.editors.editorWidget.h
1
- - collapsibleGroupBox2 - QGroupBox -
ui.collapsibleGroupBox2.h
- 1 -
- - outlineView - QTreeView -
ui.views.outlineView.h
-
treeView QTreeView
ui.views.treeView.h
- propertiesView + lineEditView + QLineEdit +
ui.views.lineEditView.h
+
+ + metadataView QWidget -
ui.views.propertiesView.h
+
ui.views.metadataView.h
+ 1 +
+ + basicItemView + QWidget +
ui.views.basicItemView.h
1
diff --git a/src/ui/views/basicItemView.py b/src/ui/views/basicItemView.py new file mode 100644 index 0000000..44acf03 --- /dev/null +++ b/src/ui/views/basicItemView.py @@ -0,0 +1,61 @@ +#!/usr/bin/env python +#--!-- coding: utf8 --!-- + +from qt import * +from enums import * +from ui.views.basicItemView_ui import * + +class basicItemView(QWidget, Ui_basicItemView): + + def __init__(self, parent=None): + QWidget.__init__(self) + self.setupUi(self) + self.txtSummarySentance.setColumn(Outline.summarySentance.value) + self.txtSummaryFull.setColumn(Outline.summaryFull.value) + + def setModels(self, mdlOutline, mdlPersos, mdlLabels, mdlStatus): + self.cmbPOV.setModels(mdlPersos, mdlOutline) + self.txtSummarySentance.setModel(mdlOutline) + self.txtSummaryFull.setModel(mdlOutline) + self.txtGoal.setModel(mdlOutline) + + def getIndexes(self, sourceView): + "Returns a list of indexes from list of QItemSelectionRange" + indexes = [] + + for i in sourceView.selectionModel().selection().indexes(): + if i.column() != 0: + continue + + if i not in indexes: + indexes.append(i) + + return indexes + + def selectionChanged(self, sourceView): + + indexes = self.getIndexes(sourceView) + + if len(indexes) == 0: + self.setEnabled(False) + + elif len(indexes) == 1: + self.setEnabled(True) + idx = indexes[0] + self.txtSummarySentance.setCurrentModelIndex(idx) + self.txtSummaryFull.setCurrentModelIndex(idx) + self.cmbPOV.setCurrentModelIndex(idx) + self.txtGoal.setCurrentModelIndex(idx) + + else: + self.setEnabled(True) + self.txtSummarySentance.setCurrentModelIndexes(indexes) + self.txtSummaryFull.setCurrentModelIndexes(indexes) + self.cmbPOV.setCurrentModelIndexes(indexes) + self.txtGoal.setCurrentModelIndexes(indexes) + + + def toggleSpellcheck(self, v): + self.txtSummaryFull.toggleSpellcheck(v) + + \ No newline at end of file diff --git a/src/ui/views/basicItemView_ui.py b/src/ui/views/basicItemView_ui.py new file mode 100644 index 0000000..4bdc31d --- /dev/null +++ b/src/ui/views/basicItemView_ui.py @@ -0,0 +1,71 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'src/ui/views/basicItemView_ui.ui' +# +# Created by: PyQt5 UI code generator 5.4.1 +# +# WARNING! All changes made in this file will be lost! + +from PyQt5 import QtCore, QtGui, QtWidgets + +class Ui_basicItemView(object): + def setupUi(self, basicItemView): + basicItemView.setObjectName("basicItemView") + basicItemView.resize(400, 425) + self.verticalLayout = QtWidgets.QVBoxLayout(basicItemView) + self.verticalLayout.setContentsMargins(0, 0, 0, 0) + self.verticalLayout.setObjectName("verticalLayout") + self.horizontalLayout_11 = QtWidgets.QHBoxLayout() + self.horizontalLayout_11.setObjectName("horizontalLayout_11") + spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) + self.horizontalLayout_11.addItem(spacerItem) + self.lblPlanPOV = QtWidgets.QLabel(basicItemView) + self.lblPlanPOV.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.lblPlanPOV.setObjectName("lblPlanPOV") + self.horizontalLayout_11.addWidget(self.lblPlanPOV) + self.cmbPOV = cmbOutlinePersoChoser(basicItemView) + self.cmbPOV.setFrame(False) + self.cmbPOV.setObjectName("cmbPOV") + self.horizontalLayout_11.addWidget(self.cmbPOV) + self.lblGoal = QtWidgets.QLabel(basicItemView) + self.lblGoal.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.lblGoal.setObjectName("lblGoal") + self.horizontalLayout_11.addWidget(self.lblGoal) + self.txtGoal = lineEditView(basicItemView) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.txtGoal.sizePolicy().hasHeightForWidth()) + self.txtGoal.setSizePolicy(sizePolicy) + self.txtGoal.setAutoFillBackground(False) + self.txtGoal.setStyleSheet("border-radius: 6px;") + self.txtGoal.setFrame(False) + self.txtGoal.setObjectName("txtGoal") + self.horizontalLayout_11.addWidget(self.txtGoal) + self.verticalLayout.addLayout(self.horizontalLayout_11) + self.txtSummarySentance = lineEditView(basicItemView) + self.txtSummarySentance.setText("") + self.txtSummarySentance.setObjectName("txtSummarySentance") + self.verticalLayout.addWidget(self.txtSummarySentance) + self.label_9 = QtWidgets.QLabel(basicItemView) + self.label_9.setObjectName("label_9") + self.verticalLayout.addWidget(self.label_9) + self.txtSummaryFull = textEditView(basicItemView) + self.txtSummaryFull.setObjectName("txtSummaryFull") + self.verticalLayout.addWidget(self.txtSummaryFull) + + self.retranslateUi(basicItemView) + QtCore.QMetaObject.connectSlotsByName(basicItemView) + + def retranslateUi(self, basicItemView): + _translate = QtCore.QCoreApplication.translate + basicItemView.setWindowTitle(_translate("basicItemView", "Form")) + self.lblPlanPOV.setText(_translate("basicItemView", "POV:")) + self.lblGoal.setText(_translate("basicItemView", "Goal:")) + self.txtGoal.setPlaceholderText(_translate("basicItemView", "Word count")) + self.txtSummarySentance.setPlaceholderText(_translate("basicItemView", "One line scene summary")) + self.label_9.setText(_translate("basicItemView", "Few sentences summary:")) + +from ui.views.cmbOutlinePersoChoser import cmbOutlinePersoChoser +from ui.views.textEditView import textEditView +from ui.views.lineEditView import lineEditView diff --git a/src/ui/views/basicItemView_ui.ui b/src/ui/views/basicItemView_ui.ui new file mode 100644 index 0000000..0b5b2c1 --- /dev/null +++ b/src/ui/views/basicItemView_ui.ui @@ -0,0 +1,127 @@ + + + basicItemView + + + + 0 + 0 + 400 + 425 + + + + Form + + + + 0 + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + POV: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + false + + + + + + + Goal: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + false + + + border-radius: 6px; + + + false + + + Word count + + + + + + + + + + + + One line scene summary + + + + + + + Few sentences summary: + + + + + + + + + + + textEditView + QTextEdit +
ui.views.textEditView.h
+
+ + cmbOutlinePersoChoser + QComboBox +
ui.views.cmbOutlinePersoChoser.h
+
+ + lineEditView + QLineEdit +
ui.views.lineEditView.h
+
+
+ + +
diff --git a/src/ui/views/lineEditView.py b/src/ui/views/lineEditView.py index ce4e7b5..a4d6dc0 100644 --- a/src/ui/views/lineEditView.py +++ b/src/ui/views/lineEditView.py @@ -80,10 +80,10 @@ class lineEditView(QLineEdit): self.updateText() def updateText(self): - if self._index: - item = self._index.internalPointer() - txt = toString(item.data(self._column)) + #item = self._index.internalPointer() + #txt = toString(item.data(self._column)) + txt = toString(self._model.data(self._index)) if self.text() != txt: self.setText(txt) @@ -92,7 +92,7 @@ class lineEditView(QLineEdit): same = True for i in self._indexes: item = i.internalPointer() - t.append(str(item.data(self._column))) + t.append(toString(item.data(self._column))) for t2 in t[1:]: if t2 != t[0]: diff --git a/src/ui/views/metadataView.py b/src/ui/views/metadataView.py new file mode 100644 index 0000000..4e414e9 --- /dev/null +++ b/src/ui/views/metadataView.py @@ -0,0 +1,62 @@ +#!/usr/bin/env python +#--!-- coding: utf8 --!-- + +from qt import * +from enums import * +from ui.views.metadataView_ui import * + +class metadataView(QWidget, Ui_metadataView): + + def __init__(self, parent=None): + QWidget.__init__(self) + self.setupUi(self) + self.txtSummarySentance.setColumn(Outline.summarySentance.value) + self.txtSummaryFull.setColumn(Outline.summaryFull.value) + self.txtNotes.setColumn(Outline.notes.value) + + def setModels(self, mdlOutline, mdlPersos, mdlLabels, mdlStatus): + self.properties.setModels(mdlOutline, mdlPersos, mdlLabels, mdlStatus) + self.txtSummarySentance.setModel(mdlOutline) + self.txtSummaryFull.setModel(mdlOutline) + self.txtNotes.setModel(mdlOutline) + + def getIndexes(self, sourceView): + "Returns a list of indexes from list of QItemSelectionRange" + indexes = [] + + for i in sourceView.selectionModel().selection().indexes(): + if i.column() != 0: + continue + + if i not in indexes: + indexes.append(i) + + return indexes + + def selectionChanged(self, sourceView): + + indexes = self.getIndexes(sourceView) + + if len(indexes) == 0: + self.setEnabled(False) + + elif len(indexes) == 1: + self.setEnabled(True) + idx = indexes[0] + self.txtSummarySentance.setCurrentModelIndex(idx) + self.txtSummaryFull.setCurrentModelIndex(idx) + self.txtNotes.setCurrentModelIndex(idx) + + else: + self.setEnabled(True) + self.txtSummarySentance.setCurrentModelIndexes(indexes) + self.txtSummaryFull.setCurrentModelIndexes(indexes) + self.txtNotes.setCurrentModelIndexes(indexes) + + self.properties.selectionChanged(sourceView) + + def toggleSpellcheck(self, v): + self.txtNotes.toggleSpellcheck(v) + self.txtSummaryFull.toggleSpellcheck(v) + + \ No newline at end of file diff --git a/src/ui/views/metadataView_ui.py b/src/ui/views/metadataView_ui.py new file mode 100644 index 0000000..de80768 --- /dev/null +++ b/src/ui/views/metadataView_ui.py @@ -0,0 +1,76 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'src/ui/views/metadataView_ui.ui' +# +# Created by: PyQt5 UI code generator 5.4.1 +# +# WARNING! All changes made in this file will be lost! + +from PyQt5 import QtCore, QtGui, QtWidgets + +class Ui_metadataView(object): + def setupUi(self, metadataView): + metadataView.setObjectName("metadataView") + metadataView.resize(400, 425) + self.verticalLayout = QtWidgets.QVBoxLayout(metadataView) + self.verticalLayout.setContentsMargins(0, 0, 0, 0) + self.verticalLayout.setObjectName("verticalLayout") + self.groupBox_4 = collapsibleGroupBox2(metadataView) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + 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.verticalLayout_28 = QtWidgets.QVBoxLayout(self.groupBox_4) + self.verticalLayout_28.setContentsMargins(0, 0, 0, 0) + self.verticalLayout_28.setObjectName("verticalLayout_28") + self.properties = propertiesView(self.groupBox_4) + self.properties.setMinimumSize(QtCore.QSize(0, 50)) + self.properties.setObjectName("properties") + self.verticalLayout_28.addWidget(self.properties) + self.verticalLayout.addWidget(self.groupBox_4) + self.groupBox_5 = collapsibleGroupBox2(metadataView) + 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.txtSummarySentance = lineEditView(self.groupBox_5) + self.txtSummarySentance.setInputMask("") + self.txtSummarySentance.setObjectName("txtSummarySentance") + self.verticalLayout_22.addWidget(self.txtSummarySentance) + self.txtSummaryFull = textEditView(self.groupBox_5) + self.txtSummaryFull.setObjectName("txtSummaryFull") + self.verticalLayout_22.addWidget(self.txtSummaryFull) + self.verticalLayout.addWidget(self.groupBox_5) + self.groupBox_6 = collapsibleGroupBox2(metadataView) + 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.txtNotes = textEditView(self.groupBox_6) + self.txtNotes.setObjectName("txtNotes") + self.horizontalLayout_29.addWidget(self.txtNotes) + self.verticalLayout.addWidget(self.groupBox_6) + + self.retranslateUi(metadataView) + QtCore.QMetaObject.connectSlotsByName(metadataView) + + def retranslateUi(self, metadataView): + _translate = QtCore.QCoreApplication.translate + metadataView.setWindowTitle(_translate("metadataView", "Form")) + self.groupBox_4.setTitle(_translate("metadataView", "Properties")) + self.groupBox_5.setTitle(_translate("metadataView", "Summary")) + self.txtSummarySentance.setPlaceholderText(_translate("metadataView", "One line scene summary")) + self.groupBox_6.setTitle(_translate("metadataView", "Notes")) + +from ui.views.lineEditView import lineEditView +from ui.collapsibleGroupBox2 import collapsibleGroupBox2 +from ui.views.textEditView import textEditView +from ui.views.propertiesView import propertiesView diff --git a/src/ui/views/metadataView_ui.ui b/src/ui/views/metadataView_ui.ui new file mode 100644 index 0000000..97a8d6f --- /dev/null +++ b/src/ui/views/metadataView_ui.ui @@ -0,0 +1,134 @@ + + + metadataView + + + + 0 + 0 + 400 + 425 + + + + Form + + + + 0 + + + + + + 0 + 0 + + + + Properties + + + true + + + true + + + + 0 + + + + + + 0 + 50 + + + + + + + + + + + Summary + + + true + + + true + + + + 0 + + + + + + + + One line scene summary + + + + + + + + + + + + + Notes + + + true + + + true + + + + 0 + + + + + + + + + + + + textEditView + QTextEdit +
ui.views.textEditView.h
+
+ + collapsibleGroupBox2 + QGroupBox +
ui.collapsibleGroupBox2.h
+ 1 +
+ + propertiesView + QWidget +
ui.views.propertiesView.h
+ 1 +
+ + lineEditView + QLineEdit +
ui.views.lineEditView.h
+
+
+ + +
diff --git a/src/ui/editors/customTextEdit.py b/src/ui/views/textEditView.py similarity index 56% rename from src/ui/editors/customTextEdit.py rename to src/ui/views/textEditView.py index cc009e5..2e08e40 100644 --- a/src/ui/editors/customTextEdit.py +++ b/src/ui/views/textEditView.py @@ -1,27 +1,34 @@ #!/usr/bin/env python #--!-- coding: utf8 --!-- - - - from qt import * from enums import * from ui.editors.t2tHighlighter import * +from functions import * + try: import enchant except ImportError: enchant = None -class customTextEdit(QTextEdit): +class textEditView(QTextEdit): def __init__(self, parent=None, index=None, html=None, spellcheck=True, dict="", autoResize=False): QTextEdit.__init__(self, parent) - self.currentIndex = None - self.item = None + self._column = Outline.text.value + self._index = None + self._indexes = None + self._placeholderText = None + self._updating = False + self._item = None + self._update = False + self._highlighting = True + self.spellcheck = spellcheck self.currentDict = dict self.highlighter = None + self._autoResize = autoResize if index: self.setCurrentModelIndex(index) @@ -29,18 +36,29 @@ class customTextEdit(QTextEdit): elif html: self.document().setHtml(html) self.setReadOnly(True) + + self.setAutoResize(self._autoResize) + + def setModel(self, model): + self._model = model + self._model.dataChanged.connect(self.update) - self.autoResize = autoResize - if autoResize: - self.document().contentsChanged.connect(self.sizeChange) - self.heightMin = 0 - self.heightMax = 65000 - self.sizeChange() + def setColumn(self, col): + self._column = col + + def setHighlighting(self, val): + self._highlighting = val def setCurrentModelIndex(self, index): + self._indexes = None if index.isValid(): - self.currentIndex = index - self.item = index.internalPointer() + if index.column() != self._column: + index = index.sibling(index.row(), self._column) + self._index = index + self._item = index.internalPointer() + if self._placeholderText != None: + self.setPlaceholderText(self._placeholderText) + self._model = index.model() self.document().contentsChanged.connect(self.submit) self._model.dataChanged.connect(self.update) @@ -50,7 +68,7 @@ class customTextEdit(QTextEdit): self.highlightWord = "" self.highligtCS = False - if not self.highlighter: + if self._highlighting and not self.highlighter: self.highlighter = t2tHighlighter(self) # Spellchecking @@ -59,23 +77,82 @@ class customTextEdit(QTextEdit): else: self.spellcheck = False - def submit(self): - if self.toPlainText() != self.item.data(Outline.text.value): - #self._model.setData(self.item.index(), self.toPlainText(), Outline.text.value) - self.item.setData(Outline.text.value, self.toPlainText()) + def setCurrentModelIndexes(self, indexes): + self._index = None + self._indexes = [] + + for i in indexes: + if i.isValid(): + if i.column() != self._column: + i = i.sibling(i.row(), self._column) + self._indexes.append(i) + + self.document().contentsChanged.connect(self.submit) + self.updateText() def update(self, topLeft, bottomRight): - if topLeft.row() <= self.currentIndex.row() <= bottomRight.row(): - self.updateText() + if self._update: + return + + elif self._index: + if topLeft.row() <= self._index.row() <= bottomRight.row(): + self.updateText() + + elif self._indexes: + update = False + for i in self._indexes: + if topLeft.row() <= i.row() <= bottomRight.row(): + update = True + if update: + self.updateText() def updateText(self): - if self.item: - if self.toPlainText() != self.item.data(Outline.text.value): - self.document().setPlainText(self.item.data(Outline.text.value)) + if self._index: + if self.toPlainText() != toString(self._model.data(self._index)): + self.document().setPlainText(toString(self._model.data(self._index))) + + elif self._indexes: + t = [] + same = True + for i in self._indexes: + item = i.internalPointer() + t.append(toString(item.data(self._column))) + + for t2 in t[1:]: + if t2 != t[0]: + same = False + break + + if same: + self.document().setPlainText(t[0]) + else: + self.document().setPlainText("") + + if not self._placeholderText: + self._placeholderText = self.placeholderText() + + self.setPlaceholderText(self.tr("Various")) + def submit(self): + if self._index: + #item = self._index.internalPointer() + if self.toPlainText() != self._model.data(self._index): + self._model.setData(self._index, self.toPlainText()) + + elif self._indexes: + self._updating = True + for i in self._indexes: + item = i.internalPointer() + if self.toPlainText() != toString(item.data(self._column)): + self._model.setData(i, self.toPlainText()) + self._updating = False + + # ----------------------------------------------------------------------------------------------------- + # Resize stuff + def resizeEvent(self, e): QTextEdit.resizeEvent(self, e) - if self.autoResize: + if self._autoResize: self.sizeChange() def sizeChange(self): @@ -83,6 +160,13 @@ class customTextEdit(QTextEdit): if self.heightMin <= docHeight <= self.heightMax: self.setMinimumHeight(docHeight) + def setAutoResize(self, val): + self._autoResize = val + if self._autoResize: + self.document().contentsChanged.connect(self.sizeChange) + self.heightMin = 0 + self.heightMax = 65000 + self.sizeChange() # ----------------------------------------------------------------------------------------------------- # Spellchecking based on http://john.nachtimwald.com/2009/08/22/qplaintextedit-with-in-line-spell-check/ @@ -93,7 +177,8 @@ class customTextEdit(QTextEdit): def toggleSpellcheck(self, v): self.spellcheck = v - self.highlighter.rehighlight() + if self.highlighter: + self.highlighter.rehighlight() def mousePressEvent(self, event): if event.button() == Qt.RightButton: diff --git a/test_project/flatModel.xml b/test_project/flatModel.xml index d9957fe..30041cf 100644 --- a/test_project/flatModel.xml +++ b/test_project/flatModel.xml @@ -1,5 +1,5 @@ - +