From 543d5a232ac28f259bf9fe84db24dfa8d72febbd Mon Sep 17 00:00:00 2001 From: Olivier Keshavjee Date: Tue, 7 Nov 2017 14:25:47 +0100 Subject: [PATCH] Checkpoint: preview seems to work --- manuskript/ui/editors/editorWidget.py | 28 ++++++----- manuskript/ui/importers/generalSettings.py | 21 +++++++-- manuskript/ui/importers/generalSettings_ui.py | 26 +++++------ manuskript/ui/importers/generalSettings_ui.ui | 46 ++++++++++++------- manuskript/ui/importers/importer.py | 41 +++++++++++++++-- manuskript/ui/importers/importer_ui.py | 17 +++---- manuskript/ui/importers/importer_ui.ui | 15 +++--- 7 files changed, 132 insertions(+), 62 deletions(-) diff --git a/manuskript/ui/editors/editorWidget.py b/manuskript/ui/editors/editorWidget.py index 75abb568..60ee4008 100644 --- a/manuskript/ui/editors/editorWidget.py +++ b/manuskript/ui/editors/editorWidget.py @@ -55,6 +55,8 @@ class editorWidget(QWidget, Ui_editorWidget_ui): self.mw = mainWindow() self._tabWidget = None # set by mainEditor on creation + self._model = None + # def setModel(self, model): # self._model = model # self.setView() @@ -83,8 +85,10 @@ class editorWidget(QWidget, Ui_editorWidget_ui): if r.isValid(): count = r.internalPointer().childCount() + elif self._model: + count = self._model.rootItem.childCount() else: - count = self.mw.mdlOutline.rootItem.childCount() + count = 0 for c in range(count): self.corkView.itemDelegate().sizeHintChanged.emit(r.child(c, 0)) @@ -102,8 +106,10 @@ class editorWidget(QWidget, Ui_editorWidget_ui): if self.currentIndex.isValid(): item = self.currentIndex.internalPointer() + elif self._model: + item = self._model.rootItem else: - item = self.mw.mdlOutline.rootItem + return i = self._tabWidget.indexOf(self) self._tabWidget.setTabText(i, item.title()) @@ -202,7 +208,7 @@ class editorWidget(QWidget, Ui_editorWidget_ui): self.txtEdits = [] - if item != self.mw.mdlOutline.rootItem: + if item != self._model.rootItem: addTitle(item) addChildren(item) @@ -211,7 +217,7 @@ class editorWidget(QWidget, Ui_editorWidget_ui): elif item and item.isFolder() and self.folderView == "cork": self.stack.setCurrentIndex(2) - self.corkView.setModel(self.mw.mdlOutline) + self.corkView.setModel(self._model) self.corkView.setRootIndex(self.currentIndex) try: self.corkView.selectionModel().selectionChanged.connect(mainWindow().redacMetadata.selectionChanged, AUC) @@ -225,7 +231,7 @@ class editorWidget(QWidget, Ui_editorWidget_ui): self.outlineView.setModelCharacters(mainWindow().mdlCharacter) self.outlineView.setModelLabels(mainWindow().mdlLabels) self.outlineView.setModelStatus(mainWindow().mdlStatus) - self.outlineView.setModel(self.mw.mdlOutline) + self.outlineView.setModel(self._model) self.outlineView.setRootIndex(self.currentIndex) try: @@ -242,9 +248,9 @@ class editorWidget(QWidget, Ui_editorWidget_ui): self.txtRedacText.setCurrentModelIndex(QModelIndex()) try: - self.mw.mdlOutline.dataChanged.connect(self.modelDataChanged, AUC) - self.mw.mdlOutline.rowsInserted.connect(self.updateIndexFromID, AUC) - self.mw.mdlOutline.rowsRemoved.connect(self.updateIndexFromID, AUC) + self._model.dataChanged.connect(self.modelDataChanged, AUC) + self._model.rowsInserted.connect(self.updateIndexFromID, AUC) + self._model.rowsRemoved.connect(self.updateIndexFromID, AUC) #self.mw.mdlOutline.rowsAboutToBeRemoved.connect(self.rowsAboutToBeRemoved, AUC) except TypeError: pass @@ -254,8 +260,8 @@ class editorWidget(QWidget, Ui_editorWidget_ui): def setCurrentModelIndex(self, index=None): if index.isValid(): self.currentIndex = index - self.currentID = self.mw.mdlOutline.ID(index) - # self._model = index.model() + self._model = index.model() + self.currentID = self._model.ID(index) else: self.currentIndex = QModelIndex() self.currentID = None @@ -267,7 +273,7 @@ class editorWidget(QWidget, Ui_editorWidget_ui): Index might have changed (through drag an drop), so we keep current item's ID and update index. Item might have been deleted too. """ - idx = self.mw.mdlOutline.getIndexByID(self.currentID) + idx = self._model.getIndexByID(self.currentID) # If we have an ID but the ID does not exist, it has been deleted if self.currentID and idx == QModelIndex(): diff --git a/manuskript/ui/importers/generalSettings.py b/manuskript/ui/importers/generalSettings.py index 7dd96fc0..17d7bcd6 100644 --- a/manuskript/ui/importers/generalSettings.py +++ b/manuskript/ui/importers/generalSettings.py @@ -3,7 +3,7 @@ import json import os -from PyQt5.QtCore import Qt, QSize, QSortFilterProxyModel +from PyQt5.QtCore import Qt, QSize, QSortFilterProxyModel, QModelIndex from PyQt5.QtGui import QIcon, QFontMetrics, QFont from PyQt5.QtWidgets import QWidget, QTableWidgetItem, QListWidgetItem, QTreeView @@ -30,8 +30,6 @@ class generalSettings(QWidget, Ui_generalSettings): self.treeGeneralParent.setCurrentIndex(self.getParentIndex()) self.chkGeneralParent.toggled.connect(self.treeGeneralParent.setVisible) self.treeGeneralParent.hide() - self.treeGeneralParent.selectionModel().currentChanged.connect( - lambda: print(self.treeGeneralParent.currentIndex().row())) def getParentIndex(self): """ @@ -44,3 +42,20 @@ class generalSettings(QWidget, Ui_generalSettings): idx = self.mw.treeRedacOutline.currentIndex() return idx + def importUnderID(self): + """ + Returns the ID of the item selected in treeGeneralParent, if checked. + """ + if self.chkGeneralParent.isChecked(): + idx = self.treeGeneralParent.currentIndex() + # We used a filter proxy model, so we have to map back to source + # to get an index from mdlOutline + idx = self.treeGeneralParent.model().mapToSource(idx) + if idx.isValid(): + return idx.internalPointer().ID() + + return "0" # 0 is root's ID + + def trimLongTitles(self): + return self.chkGeneralTrimTitles.isChecked() + diff --git a/manuskript/ui/importers/generalSettings_ui.py b/manuskript/ui/importers/generalSettings_ui.py index 0faed4cd..a07c172d 100644 --- a/manuskript/ui/importers/generalSettings_ui.py +++ b/manuskript/ui/importers/generalSettings_ui.py @@ -11,7 +11,7 @@ from PyQt5 import QtCore, QtGui, QtWidgets class Ui_generalSettings(object): def setupUi(self, generalSettings): generalSettings.setObjectName("generalSettings") - generalSettings.resize(289, 396) + generalSettings.resize(267, 401) self.verticalLayout_2 = QtWidgets.QVBoxLayout(generalSettings) self.verticalLayout_2.setContentsMargins(0, 0, 0, 0) self.verticalLayout_2.setSpacing(10) @@ -28,30 +28,30 @@ class Ui_generalSettings(object): "}") self.toolBox.setObjectName("toolBox") self.general = QtWidgets.QWidget() - self.general.setGeometry(QtCore.QRect(0, 0, 289, 373)) + self.general.setGeometry(QtCore.QRect(0, 0, 267, 378)) self.general.setObjectName("general") self.verticalLayout_5 = QtWidgets.QVBoxLayout(self.general) - self.verticalLayout_5.setContentsMargins(0, 0, 0, 0) + self.verticalLayout_5.setContentsMargins(6, 6, 6, 6) self.verticalLayout_5.setObjectName("verticalLayout_5") self.formLayout_4 = QtWidgets.QFormLayout() self.formLayout_4.setRowWrapPolicy(QtWidgets.QFormLayout.WrapLongRows) self.formLayout_4.setObjectName("formLayout_4") - self.chkGeneralParent = QtWidgets.QCheckBox(self.general) - self.chkGeneralParent.setObjectName("chkGeneralParent") - self.formLayout_4.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.chkGeneralParent) self.chkGeneralSplitScenes = QtWidgets.QCheckBox(self.general) self.chkGeneralSplitScenes.setObjectName("chkGeneralSplitScenes") - self.formLayout_4.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.chkGeneralSplitScenes) + self.formLayout_4.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.chkGeneralSplitScenes) self.txtGeneralSplitScenes = QtWidgets.QLineEdit(self.general) self.txtGeneralSplitScenes.setObjectName("txtGeneralSplitScenes") - self.formLayout_4.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.txtGeneralSplitScenes) + self.formLayout_4.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.txtGeneralSplitScenes) + self.chkGeneralTrimTitles = QtWidgets.QCheckBox(self.general) + self.chkGeneralTrimTitles.setObjectName("chkGeneralTrimTitles") + self.formLayout_4.setWidget(3, QtWidgets.QFormLayout.SpanningRole, self.chkGeneralTrimTitles) self.treeGeneralParent = QtWidgets.QTreeView(self.general) self.treeGeneralParent.setHeaderHidden(True) self.treeGeneralParent.setObjectName("treeGeneralParent") - self.formLayout_4.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.treeGeneralParent) - self.chkGeneralTrimTitles = QtWidgets.QCheckBox(self.general) - self.chkGeneralTrimTitles.setObjectName("chkGeneralTrimTitles") - self.formLayout_4.setWidget(2, QtWidgets.QFormLayout.SpanningRole, self.chkGeneralTrimTitles) + self.formLayout_4.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.treeGeneralParent) + self.chkGeneralParent = QtWidgets.QCheckBox(self.general) + self.chkGeneralParent.setObjectName("chkGeneralParent") + self.formLayout_4.setWidget(0, QtWidgets.QFormLayout.SpanningRole, self.chkGeneralParent) self.verticalLayout_5.addLayout(self.formLayout_4) self.toolBox.addItem(self.general, "") self.verticalLayout_2.addWidget(self.toolBox) @@ -64,8 +64,8 @@ class Ui_generalSettings(object): def retranslateUi(self, generalSettings): _translate = QtCore.QCoreApplication.translate generalSettings.setWindowTitle(_translate("generalSettings", "Form")) - self.chkGeneralParent.setText(_translate("generalSettings", "Import under:")) self.chkGeneralSplitScenes.setText(_translate("generalSettings", "Split scenes at:")) self.chkGeneralTrimTitles.setText(_translate("generalSettings", "Trim long titles (> 32 chars)")) + self.chkGeneralParent.setText(_translate("generalSettings", "Import under:")) self.toolBox.setItemText(self.toolBox.indexOf(self.general), _translate("generalSettings", "General")) diff --git a/manuskript/ui/importers/generalSettings_ui.ui b/manuskript/ui/importers/generalSettings_ui.ui index 45fe6efd..4bc2c4ad 100644 --- a/manuskript/ui/importers/generalSettings_ui.ui +++ b/manuskript/ui/importers/generalSettings_ui.ui @@ -6,8 +6,8 @@ 0 0 - 289 - 396 + 267 + 401 @@ -53,47 +53,59 @@ QToolBox::tab:selected, QToolBox::tab:hover{ 0 0 - 289 - 373 + 267 + 378 General + + 6 + + + 6 + + + 6 + + + 6 + QFormLayout::WrapLongRows - - - - Import under: - - - - + Split scenes at: - + - + + + + Trim long titles (> 32 chars) + + + + true - - + + - Trim long titles (> 32 chars) + Import under: diff --git a/manuskript/ui/importers/importer.py b/manuskript/ui/importers/importer.py index ea527c4e..721d0458 100644 --- a/manuskript/ui/importers/importer.py +++ b/manuskript/ui/importers/importer.py @@ -3,7 +3,7 @@ import json import os -from PyQt5.QtCore import Qt +from PyQt5.QtCore import Qt, QTimer from PyQt5.QtGui import QBrush, QColor, QIcon from PyQt5.QtWidgets import QWidget, QFileDialog @@ -13,6 +13,7 @@ from manuskript.ui.importers.generalSettings import generalSettings from manuskript.ui import style from manuskript import importer from manuskript.models.outlineModel import outlineModel +from manuskript.enums import Outline class importerDialog(QWidget, Ui_importer): @@ -35,6 +36,8 @@ class importerDialog(QWidget, Ui_importer): self.mw = mw self.fileName = "" self.setStyleSheet(style.mainWindowSS()) + self.tree.setStyleSheet("QTreeView{background:transparent;}") + self.editor.setStyleSheet("QWidget{background:transparent;}") # Register importFormats: self.importers = importer.importers @@ -49,7 +52,11 @@ class importerDialog(QWidget, Ui_importer): self.cmbImporters.currentTextChanged.connect(self.updateSettings) #self.setFileName("") - self.setFileName("/home/olivier/Dropbox/Documents/Travail/Geekeries/Python/PyCharmProjects/manuskript/test-projects/IMPORTS/End Plan 2.opml") + QTimer.singleShot(50, lambda: + self.cmbImporters.setCurrentText("OPML")) + QTimer.singleShot(50, lambda: + self.setFileName("/home/olivier/Dropbox/Documents/Travail/Geekeries/Python/PyCharmProjects/manuskript/test-projects/IMPORTS/End Plan 2.opml") + ) ############################################################################ # Combobox / Formats @@ -134,8 +141,13 @@ class importerDialog(QWidget, Ui_importer): F = self.currentFormat() self.settingsWidget = generalSettings() self.setGroupWidget(self.grpSettings, self.settingsWidget) + self.grpSettings.setMinimumWidth(200) #TODO: custom format widget + #toolBox = self.settingsWidget.toolBox + #w = QWidget() + #toolBox.insertItem(toolBox.count(), w, "Pandoc") + #See pandoc's abstractPlainText def setGroupWidget(self, group, widget): """ @@ -163,19 +175,40 @@ class importerDialog(QWidget, Ui_importer): # Temporary outlineModel previewModel = outlineModel(self) + previewModel.loadFromXML( + self.mw.mdlOutline.saveToXML(), + fromString=True) + + # Parent item + ID = self.settingsWidget.importUnderID() + parentItem = previewModel.getItemByID(ID) # Calling the importer in a temporary model items = F.startImport(self.fileName, - previewModel.rootItem, + parentItem, self.settingsWidget) # Do transformations - # TODO + # ------------------ + + # Trim long titles + if self.settingsWidget.trimLongTitles(): + def trim(item): + if len(item.title()) > 32: + item.setData(Outline.title.value, item.title()[:32]) + for c in item.children(): + trim(c) + for i in items: + trim(i) if items: self.tree.setModel(previewModel) for i in range(1, previewModel.columnCount()): self.tree.hideColumn(i) + self.tree.selectionModel().currentChanged.connect(self.editor.setCurrentModelIndex) + self.previewSplitter.setStretchFactor(0, 10) + self.previewSplitter.setStretchFactor(1, 40) + def startImport(self): pass diff --git a/manuskript/ui/importers/importer_ui.py b/manuskript/ui/importers/importer_ui.py index 67f49db2..d23c8e4e 100644 --- a/manuskript/ui/importers/importer_ui.py +++ b/manuskript/ui/importers/importer_ui.py @@ -11,7 +11,7 @@ from PyQt5 import QtCore, QtGui, QtWidgets class Ui_importer(object): def setupUi(self, importer): importer.setObjectName("importer") - importer.resize(694, 489) + importer.resize(867, 560) self.verticalLayout = QtWidgets.QVBoxLayout(importer) self.verticalLayout.setObjectName("verticalLayout") self.horizontalLayout = QtWidgets.QHBoxLayout() @@ -64,6 +64,7 @@ class Ui_importer(object): self.verticalLayout.addLayout(self.horizontalLayout) self.splitter = QtWidgets.QSplitter(importer) self.splitter.setOrientation(QtCore.Qt.Horizontal) + self.splitter.setChildrenCollapsible(False) self.splitter.setObjectName("splitter") self.grpSettings = QtWidgets.QGroupBox(self.splitter) self.grpSettings.setObjectName("grpSettings") @@ -77,16 +78,16 @@ class Ui_importer(object): self.verticalLayout_2.setContentsMargins(0, 0, 0, 0) self.verticalLayout_2.setSpacing(0) self.verticalLayout_2.setObjectName("verticalLayout_2") - self.splitter_2 = QtWidgets.QSplitter(self.grpPreview) - self.splitter_2.setOrientation(QtCore.Qt.Horizontal) - self.splitter_2.setObjectName("splitter_2") - self.tree = QtWidgets.QTreeView(self.splitter_2) + self.previewSplitter = QtWidgets.QSplitter(self.grpPreview) + self.previewSplitter.setOrientation(QtCore.Qt.Horizontal) + self.previewSplitter.setObjectName("previewSplitter") + self.tree = QtWidgets.QTreeView(self.previewSplitter) self.tree.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers) self.tree.setHeaderHidden(True) self.tree.setObjectName("tree") - self.editor = mainEditor(self.splitter_2) + self.editor = editorWidget(self.previewSplitter) self.editor.setObjectName("editor") - self.verticalLayout_2.addWidget(self.splitter_2) + self.verticalLayout_2.addWidget(self.previewSplitter) self.verticalLayout.addWidget(self.splitter) self.retranslateUi(importer) @@ -103,4 +104,4 @@ class Ui_importer(object): self.grpSettings.setTitle(_translate("importer", "Settings")) self.grpPreview.setTitle(_translate("importer", "Preview")) -from manuskript.ui.editors.mainEditor import mainEditor +from manuskript.ui.editors.editorWidget import editorWidget diff --git a/manuskript/ui/importers/importer_ui.ui b/manuskript/ui/importers/importer_ui.ui index 0281cd06..a7f2f907 100644 --- a/manuskript/ui/importers/importer_ui.ui +++ b/manuskript/ui/importers/importer_ui.ui @@ -6,8 +6,8 @@ 0 0 - 694 - 489 + 867 + 560 @@ -131,6 +131,9 @@ Qt::Horizontal + + false + Settings @@ -174,7 +177,7 @@ 0 - + Qt::Horizontal @@ -186,7 +189,7 @@ true - + @@ -197,9 +200,9 @@ - mainEditor + editorWidget QWidget -
manuskript.ui.editors.mainEditor.h
+
manuskript.ui.editors.editorWidget.h
1