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 # OUTLINE
############################################################################### ###############################################################################
def outlineRemoveItems(self): def outlineRemoveItemsRedac(self):
for idx in self.treeRedacOutline.selectedIndexes(): self.treeRedacOutline.delete()
if idx.isValid():
self.mdlOutline.removeIndex(idx) def outlineRemoveItemsOutline(self):
self.treeOutlineOutline.delete()
############################################################################### ###############################################################################
# PERSOS # PERSOS
############################################################################### ###############################################################################
@ -603,11 +604,11 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.lstSubPlots.activated.connect(self.changeCurrentSubPlot, AUC) self.lstSubPlots.activated.connect(self.changeCurrentSubPlot, AUC)
self.btnRedacAddFolder.clicked.connect(self.treeRedacOutline.addFolder, 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.btnRedacAddText.clicked.connect(self.treeRedacOutline.addText, AUC)
self.btnPlanAddText.clicked.connect(self.treePlanOutline.addText, AUC) self.btnOutlineAddText.clicked.connect(self.treeOutlineOutline.addText, AUC)
self.btnRedacRemoveItem.clicked.connect(self.outlineRemoveItems, AUC) self.btnRedacRemoveItem.clicked.connect(self.outlineRemoveItemsRedac, AUC)
self.btnPlanRemoveItem.clicked.connect(self.outlineRemoveItems, AUC) self.btnOutlineRemoveItem.clicked.connect(self.outlineRemoveItemsOutline, AUC)
self.mainEditor.btnRedacShowOutline.toggled.connect(self.treeRedacWidget.setVisible) self.mainEditor.btnRedacShowOutline.toggled.connect(self.treeRedacWidget.setVisible)
self.mainEditor.btnRedacShowOutline.setChecked(True) self.mainEditor.btnRedacShowOutline.setChecked(True)
@ -740,25 +741,25 @@ class MainWindow(QMainWindow, Ui_MainWindow):
# Outline # Outline
self.treeRedacOutline.setModel(self.mdlOutline) self.treeRedacOutline.setModel(self.mdlOutline)
self.treePlanOutline.setModelPersos(self.mdlPersos) self.treeOutlineOutline.setModelPersos(self.mdlPersos)
self.treePlanOutline.setModelLabels(self.mdlLabels) self.treeOutlineOutline.setModelLabels(self.mdlLabels)
self.treePlanOutline.setModelStatus(self.mdlStatus) self.treeOutlineOutline.setModelStatus(self.mdlStatus)
self.redacMetadata.setModels(self.mdlOutline, self.mdlPersos, self.redacMetadata.setModels(self.mdlOutline, self.mdlPersos,
self.mdlLabels, self.mdlStatus) self.mdlLabels, self.mdlStatus)
self.outlineItemEditor.setModels(self.mdlOutline, self.mdlPersos, self.outlineItemEditor.setModels(self.mdlOutline, self.mdlPersos,
self.mdlLabels, self.mdlStatus) self.mdlLabels, self.mdlStatus)
self.treePlanOutline.setModel(self.mdlOutline) self.treeOutlineOutline.setModel(self.mdlOutline)
#self.redacEditor.setModel(self.mdlOutline) #self.redacEditor.setModel(self.mdlOutline)
self.treePlanOutline.selectionModel().selectionChanged.connect(lambda: self.treeOutlineOutline.selectionModel().selectionChanged.connect(lambda:
self.outlineItemEditor.selectionChanged(self.treePlanOutline), AUC) self.outlineItemEditor.selectionChanged(self.treeOutlineOutline), AUC)
self.treePlanOutline.clicked.connect(lambda: self.treeOutlineOutline.clicked.connect(lambda:
self.outlineItemEditor.selectionChanged(self.treePlanOutline), AUC) self.outlineItemEditor.selectionChanged(self.treeOutlineOutline), AUC)
# Sync selection # Sync selection
#self.treeRedacOutline.setSelectionModel(self.treePlanOutline #self.treeRedacOutline.setSelectionModel(self.treeOutlineOutline
#.selectionModel()) #.selectionModel())
self.treeRedacOutline.selectionModel().selectionChanged.connect( 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.treeRedacOutline.selectionModel().selectionChanged.connect(self.outlineSelectionChanged, AUC) #self.treeRedacOutline.selectionModel().selectionChanged.connect(self.outlineSelectionChanged, AUC)
#self.treePlanOutline.selectionModel().selectionChanged.connect(self.outlineSelectionChanged, AUC) #self.treeOutlineOutline.selectionModel().selectionChanged.connect(self.outlineSelectionChanged, AUC)
#self.treePlanOutline.selectionModel().selectionChanged.connect(self.outlineSelectionChanged, AUC) #self.treeOutlineOutline.selectionModel().selectionChanged.connect(self.outlineSelectionChanged, AUC)
# Cheat Sheet # Cheat Sheet
self.cheatSheet.setModels() self.cheatSheet.setModels()
@ -1072,7 +1073,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.mainEditor.updateCorkView() self.mainEditor.updateCorkView()
if item == "Outline": if item == "Outline":
self.mainEditor.updateTreeView() self.mainEditor.updateTreeView()
self.treePlanOutline.viewport().update() self.treeOutlineOutline.viewport().update()
if item == "Tree": if item == "Tree":
self.treeRedacOutline.viewport().update() self.treeRedacOutline.viewport().update()

View file

@ -84,7 +84,13 @@ class outlineModel(QAbstractItemModel):
return QModelIndex() return QModelIndex()
childItem = index.internalPointer() 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: if parentItem == self.rootItem:
return QModelIndex() return QModelIndex()
@ -318,6 +324,23 @@ class outlineModel(QAbstractItemModel):
item = index.internalPointer() item = index.internalPointer()
self.removeRow(item.row(), index.parent()) 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()): def removeRow(self, row, parent=QModelIndex()):
return self.removeRows(row, 1, parent) 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.dataChanged.connect(self.modelDataChanged, AUC)
self.mw.mdlOutline.rowsInserted.connect(self.updateIndexFromID, AUC) self.mw.mdlOutline.rowsInserted.connect(self.updateIndexFromID, AUC)
self.mw.mdlOutline.rowsRemoved.connect(self.updateIndexFromID, AUC) self.mw.mdlOutline.rowsRemoved.connect(self.updateIndexFromID, AUC)
self.mw.mdlOutline.rowsAboutToBeRemoved.connect(self.rowsAboutToBeRemoved, AUC)
except TypeError: except TypeError:
pass pass
@ -220,6 +221,13 @@ class editorWidget(QWidget, Ui_editorWidget_ui):
if topLeft.row() <= self.currentIndex.row() <= bottomRight.row(): if topLeft.row() <= self.currentIndex.row() <= bottomRight.row():
self.updateStatusBar() 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): def updateStatusBar(self):
# Update progress # Update progress
#if self.currentIndex and self.currentIndex.isValid(): #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 = QtWidgets.QSplitter(self.layoutWidget)
self.splitterOutlineV.setOrientation(QtCore.Qt.Vertical) self.splitterOutlineV.setOrientation(QtCore.Qt.Vertical)
self.splitterOutlineV.setObjectName("splitterOutlineV") self.splitterOutlineV.setObjectName("splitterOutlineV")
self.treePlanOutline = outlineView(self.splitterOutlineV) self.treeOutlineOutline = outlineView(self.splitterOutlineV)
self.treePlanOutline.setDragEnabled(True) self.treeOutlineOutline.setDragEnabled(True)
self.treePlanOutline.setDragDropMode(QtWidgets.QAbstractItemView.DragDrop) self.treeOutlineOutline.setDragDropMode(QtWidgets.QAbstractItemView.DragDrop)
self.treePlanOutline.setDefaultDropAction(QtCore.Qt.MoveAction) self.treeOutlineOutline.setDefaultDropAction(QtCore.Qt.MoveAction)
self.treePlanOutline.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection) self.treeOutlineOutline.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection)
self.treePlanOutline.setObjectName("treePlanOutline") self.treeOutlineOutline.setObjectName("treeOutlineOutline")
self.treePlanOutline.header().setStretchLastSection(False) self.treeOutlineOutline.header().setStretchLastSection(False)
self.frame = QtWidgets.QFrame(self.splitterOutlineV) self.frame = QtWidgets.QFrame(self.splitterOutlineV)
self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel) self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.frame.setFrameShadow(QtWidgets.QFrame.Raised) self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
@ -745,24 +745,24 @@ class Ui_MainWindow(object):
self.verticalLayout_14.addWidget(self.splitterOutlineV) self.verticalLayout_14.addWidget(self.splitterOutlineV)
self.horizontalLayout_18 = QtWidgets.QHBoxLayout() self.horizontalLayout_18 = QtWidgets.QHBoxLayout()
self.horizontalLayout_18.setObjectName("horizontalLayout_18") self.horizontalLayout_18.setObjectName("horizontalLayout_18")
self.btnPlanAddFolder = QtWidgets.QPushButton(self.layoutWidget) self.btnOutlineAddFolder = QtWidgets.QPushButton(self.layoutWidget)
self.btnPlanAddFolder.setText("") self.btnOutlineAddFolder.setText("")
icon = QtGui.QIcon.fromTheme("folder-new") icon = QtGui.QIcon.fromTheme("folder-new")
self.btnPlanAddFolder.setIcon(icon) self.btnOutlineAddFolder.setIcon(icon)
self.btnPlanAddFolder.setObjectName("btnPlanAddFolder") self.btnOutlineAddFolder.setObjectName("btnOutlineAddFolder")
self.horizontalLayout_18.addWidget(self.btnPlanAddFolder) self.horizontalLayout_18.addWidget(self.btnOutlineAddFolder)
self.btnPlanAddText = QtWidgets.QPushButton(self.layoutWidget) self.btnOutlineAddText = QtWidgets.QPushButton(self.layoutWidget)
self.btnPlanAddText.setText("") self.btnOutlineAddText.setText("")
icon = QtGui.QIcon.fromTheme("document-new") icon = QtGui.QIcon.fromTheme("document-new")
self.btnPlanAddText.setIcon(icon) self.btnOutlineAddText.setIcon(icon)
self.btnPlanAddText.setObjectName("btnPlanAddText") self.btnOutlineAddText.setObjectName("btnOutlineAddText")
self.horizontalLayout_18.addWidget(self.btnPlanAddText) self.horizontalLayout_18.addWidget(self.btnOutlineAddText)
self.btnPlanRemoveItem = QtWidgets.QPushButton(self.layoutWidget) self.btnOutlineRemoveItem = QtWidgets.QPushButton(self.layoutWidget)
self.btnPlanRemoveItem.setText("") self.btnOutlineRemoveItem.setText("")
icon = QtGui.QIcon.fromTheme("list-remove") icon = QtGui.QIcon.fromTheme("list-remove")
self.btnPlanRemoveItem.setIcon(icon) self.btnOutlineRemoveItem.setIcon(icon)
self.btnPlanRemoveItem.setObjectName("btnPlanRemoveItem") self.btnOutlineRemoveItem.setObjectName("btnOutlineRemoveItem")
self.horizontalLayout_18.addWidget(self.btnPlanRemoveItem) self.horizontalLayout_18.addWidget(self.btnOutlineRemoveItem)
spacerItem15 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) spacerItem15 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_18.addItem(spacerItem15) self.horizontalLayout_18.addItem(spacerItem15)
self.btnPlanShowDetails = QtWidgets.QPushButton(self.layoutWidget) self.btnPlanShowDetails = QtWidgets.QPushButton(self.layoutWidget)
@ -1047,13 +1047,13 @@ class Ui_MainWindow(object):
self.retranslateUi(MainWindow) self.retranslateUi(MainWindow)
self.stack.setCurrentIndex(1) self.stack.setCurrentIndex(1)
self.tabMain.setCurrentIndex(5) self.tabMain.setCurrentIndex(6)
self.tabSummary.setCurrentIndex(0) self.tabSummary.setCurrentIndex(0)
self.tabPersos.setCurrentIndex(0) self.tabPersos.setCurrentIndex(0)
self.tabPlot.setCurrentIndex(0) self.tabPlot.setCurrentIndex(0)
self.comboBox_2.setCurrentIndex(0) self.comboBox_2.setCurrentIndex(0)
self.stkPlotSummary.setCurrentIndex(0) self.stkPlotSummary.setCurrentIndex(0)
self.tabRedacInfos.setCurrentIndex(1) self.tabRedacInfos.setCurrentIndex(0)
self.tabWidget.setCurrentIndex(1) self.tabWidget.setCurrentIndex(1)
self.btnPlotShowSummary.toggled['bool'].connect(self.grpPlotSummary.setVisible) self.btnPlotShowSummary.toggled['bool'].connect(self.grpPlotSummary.setVisible)
self.comboBox_2.currentIndexChanged['int'].connect(self.stkPlotSummary.setCurrentIndex) 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.setText(_translate("MainWindow", "Compile"))
self.actCompile.setShortcut(_translate("MainWindow", "F6")) 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.editors.mainEditor import mainEditor
from ui.welcome import welcome 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.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> <item>
<widget class="QTabWidget" name="tabMain"> <widget class="QTabWidget" name="tabMain">
<property name="currentIndex"> <property name="currentIndex">
<number>5</number> <number>6</number>
</property> </property>
<property name="documentMode"> <property name="documentMode">
<bool>true</bool> <bool>true</bool>
@ -1399,7 +1399,7 @@
<property name="orientation"> <property name="orientation">
<enum>Qt::Vertical</enum> <enum>Qt::Vertical</enum>
</property> </property>
<widget class="outlineView" name="treePlanOutline"> <widget class="outlineView" name="treeOutlineOutline">
<property name="dragEnabled"> <property name="dragEnabled">
<bool>true</bool> <bool>true</bool>
</property> </property>
@ -1434,7 +1434,7 @@
<item> <item>
<layout class="QHBoxLayout" name="horizontalLayout_18"> <layout class="QHBoxLayout" name="horizontalLayout_18">
<item> <item>
<widget class="QPushButton" name="btnPlanAddFolder"> <widget class="QPushButton" name="btnOutlineAddFolder">
<property name="text"> <property name="text">
<string/> <string/>
</property> </property>
@ -1445,7 +1445,7 @@
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QPushButton" name="btnPlanAddText"> <widget class="QPushButton" name="btnOutlineAddText">
<property name="text"> <property name="text">
<string/> <string/>
</property> </property>
@ -1456,7 +1456,7 @@
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QPushButton" name="btnPlanRemoveItem"> <widget class="QPushButton" name="btnOutlineRemoveItem">
<property name="text"> <property name="text">
<string/> <string/>
</property> </property>
@ -1584,7 +1584,7 @@
<enum>QTabWidget::South</enum> <enum>QTabWidget::South</enum>
</property> </property>
<property name="currentIndex"> <property name="currentIndex">
<number>1</number> <number>0</number>
</property> </property>
<property name="documentMode"> <property name="documentMode">
<bool>true</bool> <bool>true</bool>

View file

@ -172,8 +172,7 @@ class outlineBasics(QAbstractItemView):
self.delete() self.delete()
def delete(self): def delete(self):
for i in self.getSelection(): self.model().removeIndexes(self.getSelection())
self.model().removeIndex(i)
def setPOV(self, POV): def setPOV(self, POV):
for i in self.getSelection(): for i in self.getSelection():

View file

@ -25,6 +25,7 @@ class textEditView(QTextEdit):
self._column = Outline.text.value self._column = Outline.text.value
self._index = None self._index = None
self._indexes = None self._indexes = None
self._model = None
self._placeholderText = self.placeholderText() self._placeholderText = self.placeholderText()
self._updating = False self._updating = False
self._item = None self._item = None
@ -59,6 +60,8 @@ class textEditView(QTextEdit):
#self.document().contentsChanged.connect(lambda: print("Document changed")) #self.document().contentsChanged.connect(lambda: print("Document changed"))
#self.document().contentsChanged.connect(lambda: print(self.objectName(), "Contents changed")) #self.document().contentsChanged.connect(lambda: print(self.objectName(), "Contents changed"))
self.setEnabled(False)
if index: if index:
self.setCurrentModelIndex(index) self.setCurrentModelIndex(index)
@ -81,7 +84,14 @@ class textEditView(QTextEdit):
def setModel(self, model): def setModel(self, model):
self._model = 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): def setColumn(self, col):
self._column = col self._column = col
@ -97,33 +107,42 @@ class textEditView(QTextEdit):
def setCurrentModelIndex(self, index): def setCurrentModelIndex(self, index):
self._indexes = None self._indexes = None
if index.isValid(): if index.isValid():
self.setEnabled(True)
if index.column() != self._column: if index.column() != self._column:
index = index.sibling(index.row(), self._column) index = index.sibling(index.row(), self._column)
self._index = index self._index = index
self.setPlaceholderText(self._placeholderText) self.setPlaceholderText(self._placeholderText)
self._model = index.model() if not self._model:
try: self.setModel(index.model())
self._model.dataChanged.connect(self.update, AUC)
except TypeError:
pass
self.setupEditorForIndex(self._index) self.setupEditorForIndex(self._index)
self.loadFontSettings() self.loadFontSettings()
#self.document().contentsChanged.connect(self.submit, AUC)
self.updateText() self.updateText()
else: else:
self._index = QModelIndex() self._index = QModelIndex()
try:
self.document().contentsChanged.disconnect(self.submit)
#self._model.dataChanged.disconnect(self.update)
except:
pass
self.setPlainText("") 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): def setupEditorForIndex(self, index):
@ -200,19 +219,6 @@ class textEditView(QTextEdit):
self.highlighter.setDefaultCharFormat(self._defaultCharFormat) self.highlighter.setDefaultCharFormat(self._defaultCharFormat)
self.highlighter.setDefaultBlockFormat(self._defaultBlockFormat) 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): def update(self, topLeft, bottomRight):
if self._updating: if self._updating:
return return
@ -248,6 +254,15 @@ class textEditView(QTextEdit):
if update: if update:
self.updateText() 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): def disconnectDocument(self):
try: try:
self.document().contentsChanged.disconnect(self.updateTimer.start) self.document().contentsChanged.disconnect(self.updateTimer.start)
@ -329,11 +344,11 @@ class textEditView(QTextEdit):
self._updating = False self._updating = False
elif self._indexes: elif self._indexes:
print("Submitting many indexes")
self._updating = True self._updating = True
for i in self._indexes: for i in self._indexes:
item = i.internalPointer() item = i.internalPointer()
if self.toPlainText() != toString(item.data(self._column)): if self.toPlainText() != toString(item.data(self._column)):
print("Submitting many indexes")
self._model.setData(i, self.toPlainText()) self._model.setData(i, self.toPlainText())
self._updating = False self._updating = False