Trying to make things right when deleting items

This commit is contained in:
Olivier Keshavjee 2015-07-02 20:10:25 +02:00
parent 3fe177aa8a
commit fc3d178acf
7 changed files with 138 additions and 92 deletions

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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