mirror of
https://github.com/olivierkes/manuskript.git
synced 2024-05-14 18:02:23 +12:00
Trying to make things right when deleting items
This commit is contained in:
parent
3fe177aa8a
commit
fc3d178acf
|
@ -113,11 +113,12 @@ class MainWindow(QMainWindow, Ui_MainWindow):
|
|||
# OUTLINE
|
||||
###############################################################################
|
||||
|
||||
def outlineRemoveItems(self):
|
||||
for idx in self.treeRedacOutline.selectedIndexes():
|
||||
if idx.isValid():
|
||||
self.mdlOutline.removeIndex(idx)
|
||||
|
||||
def outlineRemoveItemsRedac(self):
|
||||
self.treeRedacOutline.delete()
|
||||
|
||||
def outlineRemoveItemsOutline(self):
|
||||
self.treeOutlineOutline.delete()
|
||||
|
||||
###############################################################################
|
||||
# PERSOS
|
||||
###############################################################################
|
||||
|
@ -603,11 +604,11 @@ class MainWindow(QMainWindow, Ui_MainWindow):
|
|||
self.lstSubPlots.activated.connect(self.changeCurrentSubPlot, AUC)
|
||||
|
||||
self.btnRedacAddFolder.clicked.connect(self.treeRedacOutline.addFolder, AUC)
|
||||
self.btnPlanAddFolder.clicked.connect(self.treePlanOutline.addFolder, AUC)
|
||||
self.btnOutlineAddFolder.clicked.connect(self.treeOutlineOutline.addFolder, AUC)
|
||||
self.btnRedacAddText.clicked.connect(self.treeRedacOutline.addText, AUC)
|
||||
self.btnPlanAddText.clicked.connect(self.treePlanOutline.addText, AUC)
|
||||
self.btnRedacRemoveItem.clicked.connect(self.outlineRemoveItems, AUC)
|
||||
self.btnPlanRemoveItem.clicked.connect(self.outlineRemoveItems, AUC)
|
||||
self.btnOutlineAddText.clicked.connect(self.treeOutlineOutline.addText, AUC)
|
||||
self.btnRedacRemoveItem.clicked.connect(self.outlineRemoveItemsRedac, AUC)
|
||||
self.btnOutlineRemoveItem.clicked.connect(self.outlineRemoveItemsOutline, AUC)
|
||||
|
||||
self.mainEditor.btnRedacShowOutline.toggled.connect(self.treeRedacWidget.setVisible)
|
||||
self.mainEditor.btnRedacShowOutline.setChecked(True)
|
||||
|
@ -740,25 +741,25 @@ class MainWindow(QMainWindow, Ui_MainWindow):
|
|||
|
||||
# Outline
|
||||
self.treeRedacOutline.setModel(self.mdlOutline)
|
||||
self.treePlanOutline.setModelPersos(self.mdlPersos)
|
||||
self.treePlanOutline.setModelLabels(self.mdlLabels)
|
||||
self.treePlanOutline.setModelStatus(self.mdlStatus)
|
||||
self.treeOutlineOutline.setModelPersos(self.mdlPersos)
|
||||
self.treeOutlineOutline.setModelLabels(self.mdlLabels)
|
||||
self.treeOutlineOutline.setModelStatus(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.treeOutlineOutline.setModel(self.mdlOutline)
|
||||
#self.redacEditor.setModel(self.mdlOutline)
|
||||
|
||||
self.treePlanOutline.selectionModel().selectionChanged.connect(lambda:
|
||||
self.outlineItemEditor.selectionChanged(self.treePlanOutline), AUC)
|
||||
self.treePlanOutline.clicked.connect(lambda:
|
||||
self.outlineItemEditor.selectionChanged(self.treePlanOutline), AUC)
|
||||
self.treeOutlineOutline.selectionModel().selectionChanged.connect(lambda:
|
||||
self.outlineItemEditor.selectionChanged(self.treeOutlineOutline), AUC)
|
||||
self.treeOutlineOutline.clicked.connect(lambda:
|
||||
self.outlineItemEditor.selectionChanged(self.treeOutlineOutline), AUC)
|
||||
|
||||
# Sync selection
|
||||
#self.treeRedacOutline.setSelectionModel(self.treePlanOutline
|
||||
#self.treeRedacOutline.setSelectionModel(self.treeOutlineOutline
|
||||
#.selectionModel())
|
||||
|
||||
self.treeRedacOutline.selectionModel().selectionChanged.connect(
|
||||
|
@ -773,8 +774,8 @@ class MainWindow(QMainWindow, Ui_MainWindow):
|
|||
|
||||
#self.treeRedacOutline.selectionModel().selectionChanged.connect(self.outlineSelectionChanged, AUC)
|
||||
#self.treeRedacOutline.selectionModel().selectionChanged.connect(self.outlineSelectionChanged, AUC)
|
||||
#self.treePlanOutline.selectionModel().selectionChanged.connect(self.outlineSelectionChanged, AUC)
|
||||
#self.treePlanOutline.selectionModel().selectionChanged.connect(self.outlineSelectionChanged, AUC)
|
||||
#self.treeOutlineOutline.selectionModel().selectionChanged.connect(self.outlineSelectionChanged, AUC)
|
||||
#self.treeOutlineOutline.selectionModel().selectionChanged.connect(self.outlineSelectionChanged, AUC)
|
||||
|
||||
# Cheat Sheet
|
||||
self.cheatSheet.setModels()
|
||||
|
@ -1072,7 +1073,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
|
|||
self.mainEditor.updateCorkView()
|
||||
if item == "Outline":
|
||||
self.mainEditor.updateTreeView()
|
||||
self.treePlanOutline.viewport().update()
|
||||
self.treeOutlineOutline.viewport().update()
|
||||
if item == "Tree":
|
||||
self.treeRedacOutline.viewport().update()
|
||||
|
||||
|
|
|
@ -84,7 +84,13 @@ class outlineModel(QAbstractItemModel):
|
|||
return QModelIndex()
|
||||
|
||||
childItem = index.internalPointer()
|
||||
parentItem = childItem.parent()
|
||||
try:
|
||||
parentItem = childItem.parent()
|
||||
except AttributeError:
|
||||
import traceback, sys
|
||||
print(traceback.print_exc())
|
||||
print(sys.exc_info()[0])
|
||||
return QModelIndex()
|
||||
|
||||
if parentItem == self.rootItem:
|
||||
return QModelIndex()
|
||||
|
@ -318,6 +324,23 @@ class outlineModel(QAbstractItemModel):
|
|||
item = index.internalPointer()
|
||||
self.removeRow(item.row(), index.parent())
|
||||
|
||||
def removeIndexes(self, indexes):
|
||||
levels = {}
|
||||
for i in indexes:
|
||||
item = i.internalPointer()
|
||||
level = item.level()
|
||||
if not level in levels:
|
||||
levels[level] = []
|
||||
levels[level].append([i.row(), i])
|
||||
|
||||
# Sort by level then by row
|
||||
for l in reversed(sorted(levels.keys())):
|
||||
rows = levels[l]
|
||||
|
||||
rows = list(reversed(sorted(rows, key=lambda x:x[0])))
|
||||
for r in rows:
|
||||
self.removeIndex(r[1])
|
||||
|
||||
def removeRow(self, row, parent=QModelIndex()):
|
||||
return self.removeRows(row, 1, parent)
|
||||
|
||||
|
|
|
@ -190,6 +190,7 @@ class editorWidget(QWidget, Ui_editorWidget_ui):
|
|||
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.mw.mdlOutline.rowsAboutToBeRemoved.connect(self.rowsAboutToBeRemoved, AUC)
|
||||
except TypeError:
|
||||
pass
|
||||
|
||||
|
@ -220,6 +221,13 @@ class editorWidget(QWidget, Ui_editorWidget_ui):
|
|||
if topLeft.row() <= self.currentIndex.row() <= bottomRight.row():
|
||||
self.updateStatusBar()
|
||||
|
||||
def rowsAboutToBeRemoved(self, parent, first, last):
|
||||
if self.currentIndex:
|
||||
if self.currentIndex.parent() == parent and \
|
||||
first <= self.currentIndex.row() <= last:
|
||||
# Item deleted, close tab
|
||||
self.mw.mainEditor.tab.removeTab(self.mw.mainEditor.tab.indexOf(self))
|
||||
|
||||
def updateStatusBar(self):
|
||||
# Update progress
|
||||
#if self.currentIndex and self.currentIndex.isValid():
|
||||
|
|
|
@ -726,13 +726,13 @@ class Ui_MainWindow(object):
|
|||
self.splitterOutlineV = QtWidgets.QSplitter(self.layoutWidget)
|
||||
self.splitterOutlineV.setOrientation(QtCore.Qt.Vertical)
|
||||
self.splitterOutlineV.setObjectName("splitterOutlineV")
|
||||
self.treePlanOutline = outlineView(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.treePlanOutline.header().setStretchLastSection(False)
|
||||
self.treeOutlineOutline = outlineView(self.splitterOutlineV)
|
||||
self.treeOutlineOutline.setDragEnabled(True)
|
||||
self.treeOutlineOutline.setDragDropMode(QtWidgets.QAbstractItemView.DragDrop)
|
||||
self.treeOutlineOutline.setDefaultDropAction(QtCore.Qt.MoveAction)
|
||||
self.treeOutlineOutline.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection)
|
||||
self.treeOutlineOutline.setObjectName("treeOutlineOutline")
|
||||
self.treeOutlineOutline.header().setStretchLastSection(False)
|
||||
self.frame = QtWidgets.QFrame(self.splitterOutlineV)
|
||||
self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
|
||||
self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
|
||||
|
@ -745,24 +745,24 @@ class Ui_MainWindow(object):
|
|||
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.setText("")
|
||||
self.btnOutlineAddFolder = QtWidgets.QPushButton(self.layoutWidget)
|
||||
self.btnOutlineAddFolder.setText("")
|
||||
icon = QtGui.QIcon.fromTheme("folder-new")
|
||||
self.btnPlanAddFolder.setIcon(icon)
|
||||
self.btnPlanAddFolder.setObjectName("btnPlanAddFolder")
|
||||
self.horizontalLayout_18.addWidget(self.btnPlanAddFolder)
|
||||
self.btnPlanAddText = QtWidgets.QPushButton(self.layoutWidget)
|
||||
self.btnPlanAddText.setText("")
|
||||
self.btnOutlineAddFolder.setIcon(icon)
|
||||
self.btnOutlineAddFolder.setObjectName("btnOutlineAddFolder")
|
||||
self.horizontalLayout_18.addWidget(self.btnOutlineAddFolder)
|
||||
self.btnOutlineAddText = QtWidgets.QPushButton(self.layoutWidget)
|
||||
self.btnOutlineAddText.setText("")
|
||||
icon = QtGui.QIcon.fromTheme("document-new")
|
||||
self.btnPlanAddText.setIcon(icon)
|
||||
self.btnPlanAddText.setObjectName("btnPlanAddText")
|
||||
self.horizontalLayout_18.addWidget(self.btnPlanAddText)
|
||||
self.btnPlanRemoveItem = QtWidgets.QPushButton(self.layoutWidget)
|
||||
self.btnPlanRemoveItem.setText("")
|
||||
self.btnOutlineAddText.setIcon(icon)
|
||||
self.btnOutlineAddText.setObjectName("btnOutlineAddText")
|
||||
self.horizontalLayout_18.addWidget(self.btnOutlineAddText)
|
||||
self.btnOutlineRemoveItem = QtWidgets.QPushButton(self.layoutWidget)
|
||||
self.btnOutlineRemoveItem.setText("")
|
||||
icon = QtGui.QIcon.fromTheme("list-remove")
|
||||
self.btnPlanRemoveItem.setIcon(icon)
|
||||
self.btnPlanRemoveItem.setObjectName("btnPlanRemoveItem")
|
||||
self.horizontalLayout_18.addWidget(self.btnPlanRemoveItem)
|
||||
self.btnOutlineRemoveItem.setIcon(icon)
|
||||
self.btnOutlineRemoveItem.setObjectName("btnOutlineRemoveItem")
|
||||
self.horizontalLayout_18.addWidget(self.btnOutlineRemoveItem)
|
||||
spacerItem15 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
|
||||
self.horizontalLayout_18.addItem(spacerItem15)
|
||||
self.btnPlanShowDetails = QtWidgets.QPushButton(self.layoutWidget)
|
||||
|
@ -1047,13 +1047,13 @@ class Ui_MainWindow(object):
|
|||
|
||||
self.retranslateUi(MainWindow)
|
||||
self.stack.setCurrentIndex(1)
|
||||
self.tabMain.setCurrentIndex(5)
|
||||
self.tabMain.setCurrentIndex(6)
|
||||
self.tabSummary.setCurrentIndex(0)
|
||||
self.tabPersos.setCurrentIndex(0)
|
||||
self.tabPlot.setCurrentIndex(0)
|
||||
self.comboBox_2.setCurrentIndex(0)
|
||||
self.stkPlotSummary.setCurrentIndex(0)
|
||||
self.tabRedacInfos.setCurrentIndex(1)
|
||||
self.tabRedacInfos.setCurrentIndex(0)
|
||||
self.tabWidget.setCurrentIndex(1)
|
||||
self.btnPlotShowSummary.toggled['bool'].connect(self.grpPlotSummary.setVisible)
|
||||
self.comboBox_2.currentIndexChanged['int'].connect(self.stkPlotSummary.setCurrentIndex)
|
||||
|
@ -1175,17 +1175,17 @@ class Ui_MainWindow(object):
|
|||
self.actCompile.setText(_translate("MainWindow", "Compile"))
|
||||
self.actCompile.setShortcut(_translate("MainWindow", "F6"))
|
||||
|
||||
from ui.views.treeView import treeView
|
||||
from ui.views.outlineView import outlineView
|
||||
from ui.views.basicItemView import basicItemView
|
||||
from ui.views.metadataView import metadataView
|
||||
from ui.views.textEditView import textEditView
|
||||
from ui.editors.mainEditor import mainEditor
|
||||
from ui.welcome import welcome
|
||||
from ui.sldImportance import sldImportance
|
||||
from ui.views.persoTreeView import persoTreeView
|
||||
from ui.cheatSheet import cheatSheet
|
||||
from ui.search import search
|
||||
from ui.views.basicItemView import basicItemView
|
||||
from ui.views.plotTreeView import plotTreeView
|
||||
from ui.views.metadataView import metadataView
|
||||
from ui.views.outlineView import outlineView
|
||||
from ui.collapsibleGroupBox2 import collapsibleGroupBox2
|
||||
from ui.views.lineEditView import lineEditView
|
||||
from ui.views.textEditView import textEditView
|
||||
from ui.search import search
|
||||
from ui.collapsibleGroupBox2 import collapsibleGroupBox2
|
||||
from ui.cheatSheet import cheatSheet
|
||||
from ui.views.persoTreeView import persoTreeView
|
||||
from ui.views.treeView import treeView
|
||||
from ui.views.plotTreeView import plotTreeView
|
||||
from ui.sldImportance import sldImportance
|
||||
|
|
|
@ -109,7 +109,7 @@
|
|||
<item>
|
||||
<widget class="QTabWidget" name="tabMain">
|
||||
<property name="currentIndex">
|
||||
<number>5</number>
|
||||
<number>6</number>
|
||||
</property>
|
||||
<property name="documentMode">
|
||||
<bool>true</bool>
|
||||
|
@ -1399,7 +1399,7 @@
|
|||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<widget class="outlineView" name="treePlanOutline">
|
||||
<widget class="outlineView" name="treeOutlineOutline">
|
||||
<property name="dragEnabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
|
@ -1434,7 +1434,7 @@
|
|||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_18">
|
||||
<item>
|
||||
<widget class="QPushButton" name="btnPlanAddFolder">
|
||||
<widget class="QPushButton" name="btnOutlineAddFolder">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
|
@ -1445,7 +1445,7 @@
|
|||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="btnPlanAddText">
|
||||
<widget class="QPushButton" name="btnOutlineAddText">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
|
@ -1456,7 +1456,7 @@
|
|||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="btnPlanRemoveItem">
|
||||
<widget class="QPushButton" name="btnOutlineRemoveItem">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
|
@ -1584,7 +1584,7 @@
|
|||
<enum>QTabWidget::South</enum>
|
||||
</property>
|
||||
<property name="currentIndex">
|
||||
<number>1</number>
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="documentMode">
|
||||
<bool>true</bool>
|
||||
|
|
|
@ -172,8 +172,7 @@ class outlineBasics(QAbstractItemView):
|
|||
self.delete()
|
||||
|
||||
def delete(self):
|
||||
for i in self.getSelection():
|
||||
self.model().removeIndex(i)
|
||||
self.model().removeIndexes(self.getSelection())
|
||||
|
||||
def setPOV(self, POV):
|
||||
for i in self.getSelection():
|
||||
|
|
|
@ -25,6 +25,7 @@ class textEditView(QTextEdit):
|
|||
self._column = Outline.text.value
|
||||
self._index = None
|
||||
self._indexes = None
|
||||
self._model = None
|
||||
self._placeholderText = self.placeholderText()
|
||||
self._updating = False
|
||||
self._item = None
|
||||
|
@ -59,6 +60,8 @@ class textEditView(QTextEdit):
|
|||
#self.document().contentsChanged.connect(lambda: print("Document changed"))
|
||||
|
||||
#self.document().contentsChanged.connect(lambda: print(self.objectName(), "Contents changed"))
|
||||
|
||||
self.setEnabled(False)
|
||||
|
||||
if index:
|
||||
self.setCurrentModelIndex(index)
|
||||
|
@ -81,7 +84,14 @@ class textEditView(QTextEdit):
|
|||
|
||||
def setModel(self, model):
|
||||
self._model = model
|
||||
#self._model.dataChanged.connect(self.update, AUC)
|
||||
try:
|
||||
self._model.dataChanged.connect(self.update, AUC)
|
||||
except TypeError:
|
||||
pass
|
||||
try:
|
||||
self._model.rowsAboutToBeRemoved.connect(self.rowsAboutToBeRemoved, AUC)
|
||||
except TypeError:
|
||||
pass
|
||||
|
||||
def setColumn(self, col):
|
||||
self._column = col
|
||||
|
@ -97,33 +107,42 @@ class textEditView(QTextEdit):
|
|||
def setCurrentModelIndex(self, index):
|
||||
self._indexes = None
|
||||
if index.isValid():
|
||||
self.setEnabled(True)
|
||||
if index.column() != self._column:
|
||||
index = index.sibling(index.row(), self._column)
|
||||
self._index = index
|
||||
|
||||
self.setPlaceholderText(self._placeholderText)
|
||||
|
||||
self._model = index.model()
|
||||
try:
|
||||
self._model.dataChanged.connect(self.update, AUC)
|
||||
except TypeError:
|
||||
pass
|
||||
|
||||
if not self._model:
|
||||
self.setModel(index.model())
|
||||
|
||||
self.setupEditorForIndex(self._index)
|
||||
self.loadFontSettings()
|
||||
#self.document().contentsChanged.connect(self.submit, AUC)
|
||||
self.updateText()
|
||||
|
||||
|
||||
else:
|
||||
self._index = QModelIndex()
|
||||
try:
|
||||
self.document().contentsChanged.disconnect(self.submit)
|
||||
#self._model.dataChanged.disconnect(self.update)
|
||||
except:
|
||||
pass
|
||||
|
||||
self.setPlainText("")
|
||||
self.setEnabled(False)
|
||||
|
||||
def setCurrentModelIndexes(self, indexes):
|
||||
self._index = None
|
||||
self._indexes = []
|
||||
|
||||
for i in indexes:
|
||||
if i.isValid():
|
||||
self.setEnabled(True)
|
||||
if i.column() != self._column:
|
||||
i = i.sibling(i.row(), self._column)
|
||||
self._indexes.append(i)
|
||||
|
||||
if not self._model:
|
||||
self.setModel(i.model())
|
||||
|
||||
self.updateText()
|
||||
|
||||
def setupEditorForIndex(self, index):
|
||||
|
||||
|
@ -200,19 +219,6 @@ class textEditView(QTextEdit):
|
|||
self.highlighter.setDefaultCharFormat(self._defaultCharFormat)
|
||||
self.highlighter.setDefaultBlockFormat(self._defaultBlockFormat)
|
||||
|
||||
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 self._updating:
|
||||
return
|
||||
|
@ -248,6 +254,15 @@ class textEditView(QTextEdit):
|
|||
if update:
|
||||
self.updateText()
|
||||
|
||||
def rowsAboutToBeRemoved(self, parent, first, last):
|
||||
if self._index:
|
||||
if self._index.parent() == parent and \
|
||||
first <= self._index.row() <= last:
|
||||
self._index = None
|
||||
self.setEnabled(False)
|
||||
|
||||
#FIXME: self._indexes
|
||||
|
||||
def disconnectDocument(self):
|
||||
try:
|
||||
self.document().contentsChanged.disconnect(self.updateTimer.start)
|
||||
|
@ -329,11 +344,11 @@ class textEditView(QTextEdit):
|
|||
self._updating = False
|
||||
|
||||
elif self._indexes:
|
||||
print("Submitting many indexes")
|
||||
self._updating = True
|
||||
for i in self._indexes:
|
||||
item = i.internalPointer()
|
||||
if self.toPlainText() != toString(item.data(self._column)):
|
||||
print("Submitting many indexes")
|
||||
self._model.setData(i, self.toPlainText())
|
||||
self._updating = False
|
||||
|
||||
|
|
Loading…
Reference in a new issue