Checkpoint: preview seems to work

This commit is contained in:
Olivier Keshavjee 2017-11-07 14:25:47 +01:00
parent 316651245c
commit 543d5a232a
7 changed files with 132 additions and 62 deletions

View file

@ -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():

View file

@ -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()

View file

@ -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"))

View file

@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>289</width>
<height>396</height>
<width>267</width>
<height>401</height>
</rect>
</property>
<property name="windowTitle">
@ -53,47 +53,59 @@ QToolBox::tab:selected, QToolBox::tab:hover{
<rect>
<x>0</x>
<y>0</y>
<width>289</width>
<height>373</height>
<width>267</width>
<height>378</height>
</rect>
</property>
<attribute name="label">
<string>General</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_5">
<property name="leftMargin">
<number>6</number>
</property>
<property name="topMargin">
<number>6</number>
</property>
<property name="rightMargin">
<number>6</number>
</property>
<property name="bottomMargin">
<number>6</number>
</property>
<item>
<layout class="QFormLayout" name="formLayout_4">
<property name="rowWrapPolicy">
<enum>QFormLayout::WrapLongRows</enum>
</property>
<item row="0" column="0">
<widget class="QCheckBox" name="chkGeneralParent">
<property name="text">
<string>Import under:</string>
</property>
</widget>
</item>
<item row="1" column="0">
<item row="2" column="0">
<widget class="QCheckBox" name="chkGeneralSplitScenes">
<property name="text">
<string>Split scenes at:</string>
</property>
</widget>
</item>
<item row="1" column="1">
<item row="2" column="1">
<widget class="QLineEdit" name="txtGeneralSplitScenes"/>
</item>
<item row="0" column="1">
<item row="3" column="0" colspan="2">
<widget class="QCheckBox" name="chkGeneralTrimTitles">
<property name="text">
<string>Trim long titles (&gt; 32 chars)</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QTreeView" name="treeGeneralParent">
<property name="headerHidden">
<bool>true</bool>
</property>
</widget>
</item>
<item row="2" column="0" colspan="2">
<widget class="QCheckBox" name="chkGeneralTrimTitles">
<item row="0" column="0" colspan="2">
<widget class="QCheckBox" name="chkGeneralParent">
<property name="text">
<string>Trim long titles (&gt; 32 chars)</string>
<string>Import under:</string>
</property>
</widget>
</item>

View file

@ -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

View file

@ -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

View file

@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>694</width>
<height>489</height>
<width>867</width>
<height>560</height>
</rect>
</property>
<property name="windowTitle">
@ -131,6 +131,9 @@
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="childrenCollapsible">
<bool>false</bool>
</property>
<widget class="QGroupBox" name="grpSettings">
<property name="title">
<string>Settings</string>
@ -174,7 +177,7 @@
<number>0</number>
</property>
<item>
<widget class="QSplitter" name="splitter_2">
<widget class="QSplitter" name="previewSplitter">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
@ -186,7 +189,7 @@
<bool>true</bool>
</property>
</widget>
<widget class="mainEditor" name="editor" native="true"/>
<widget class="editorWidget" name="editor" native="true"/>
</widget>
</item>
</layout>
@ -197,9 +200,9 @@
</widget>
<customwidgets>
<customwidget>
<class>mainEditor</class>
<class>editorWidget</class>
<extends>QWidget</extends>
<header>manuskript.ui.editors.mainEditor.h</header>
<header>manuskript.ui.editors.editorWidget.h</header>
<container>1</container>
</customwidget>
</customwidgets>