mirror of
https://github.com/olivierkes/manuskript.git
synced 2024-06-13 16:34:34 +12:00
Use QPersistentModelIndex in textEditView
It is much simpler than catching rowsAboutToBeDeleted signal from model. Also it fixes #306.
This commit is contained in:
parent
63b471e10d
commit
3a21ddd137
|
@ -2,7 +2,7 @@
|
||||||
# --!-- coding: utf8 --!--
|
# --!-- coding: utf8 --!--
|
||||||
import re
|
import re
|
||||||
|
|
||||||
from PyQt5.QtCore import QTimer, QModelIndex, Qt, QEvent, pyqtSignal, QRegExp, QLocale
|
from PyQt5.QtCore import QTimer, QModelIndex, Qt, QEvent, pyqtSignal, QRegExp, QLocale, QPersistentModelIndex
|
||||||
from PyQt5.QtGui import QTextBlockFormat, QTextCharFormat, QFont, QColor, QIcon, QMouseEvent, QTextCursor
|
from PyQt5.QtGui import QTextBlockFormat, QTextCharFormat, QFont, QColor, QIcon, QMouseEvent, QTextCursor
|
||||||
from PyQt5.QtWidgets import QWidget, QTextEdit, qApp, QAction, QMenu
|
from PyQt5.QtWidgets import QWidget, QTextEdit, qApp, QAction, QMenu
|
||||||
|
|
||||||
|
@ -106,10 +106,6 @@ class textEditView(QTextEdit):
|
||||||
self._model.dataChanged.connect(self.update, F.AUC)
|
self._model.dataChanged.connect(self.update, F.AUC)
|
||||||
except TypeError:
|
except TypeError:
|
||||||
pass
|
pass
|
||||||
try:
|
|
||||||
self._model.rowsAboutToBeRemoved.connect(self.rowsAboutToBeRemoved, F.AUC)
|
|
||||||
except TypeError:
|
|
||||||
pass
|
|
||||||
|
|
||||||
def setColumn(self, col):
|
def setColumn(self, col):
|
||||||
self._column = col
|
self._column = col
|
||||||
|
@ -128,7 +124,7 @@ class textEditView(QTextEdit):
|
||||||
self.setEnabled(True)
|
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 = QPersistentModelIndex(index)
|
||||||
|
|
||||||
self.setPlaceholderText(self._placeholderText)
|
self.setPlaceholderText(self._placeholderText)
|
||||||
|
|
||||||
|
@ -169,7 +165,7 @@ class textEditView(QTextEdit):
|
||||||
self.setEnabled(True)
|
self.setEnabled(True)
|
||||||
if i.column() != self._column:
|
if i.column() != self._column:
|
||||||
i = i.sibling(i.row(), self._column)
|
i = i.sibling(i.row(), self._column)
|
||||||
self._indexes.append(i)
|
self._indexes.append(QPersistentModelIndex(i))
|
||||||
|
|
||||||
if not self._model:
|
if not self._model:
|
||||||
self.setModel(i.model())
|
self.setModel(i.model())
|
||||||
|
@ -264,9 +260,9 @@ class textEditView(QTextEdit):
|
||||||
|
|
||||||
if self._updateIndexFromID:
|
if self._updateIndexFromID:
|
||||||
# We have to update to a new index
|
# We have to update to a new index
|
||||||
self._index = self._index.model().getIndexByID(
|
index = self._index.model().getIndexByID(self._updateIndexFromID,
|
||||||
self._updateIndexFromID,
|
self._column)
|
||||||
self._column)
|
self._index = QPersistentModelIndex(index)
|
||||||
self._updateIndexFromID = None
|
self._updateIndexFromID = None
|
||||||
|
|
||||||
if self._index and self._index.isValid():
|
if self._index and self._index.isValid():
|
||||||
|
@ -292,39 +288,6 @@ class textEditView(QTextEdit):
|
||||||
if update:
|
if update:
|
||||||
self.updateText()
|
self.updateText()
|
||||||
|
|
||||||
def rowsAboutToBeRemoved(self, parent, first, last):
|
|
||||||
if self._index and self._index.isValid():
|
|
||||||
|
|
||||||
# Has my _index just been removed?
|
|
||||||
if self._index.parent() == parent and \
|
|
||||||
first <= self._index.row() <= last:
|
|
||||||
self._index = None
|
|
||||||
self.setEnabled(False)
|
|
||||||
return
|
|
||||||
# FIXME: self._indexes
|
|
||||||
|
|
||||||
if self._index.model() != outlineItem:
|
|
||||||
# The next stuff is only for outlineItems
|
|
||||||
return
|
|
||||||
|
|
||||||
# We check if item is a child of the row about to be removed
|
|
||||||
child = False
|
|
||||||
p = self._index.parent()
|
|
||||||
while p:
|
|
||||||
if p == parent:
|
|
||||||
child = True
|
|
||||||
p = None
|
|
||||||
elif p.isValid():
|
|
||||||
p = p.parent()
|
|
||||||
else:
|
|
||||||
p = None
|
|
||||||
if child:
|
|
||||||
# Item might have moved (so will not be valid any more)
|
|
||||||
ID = self._index.internalPointer().ID()
|
|
||||||
# We store ID, and we update it in self.update (after the
|
|
||||||
# rows have been removed).
|
|
||||||
self._updateIndexFromID = ID
|
|
||||||
|
|
||||||
def disconnectDocument(self):
|
def disconnectDocument(self):
|
||||||
try:
|
try:
|
||||||
self.document().contentsChanged.disconnect(self.updateTimer.start)
|
self.document().contentsChanged.disconnect(self.updateTimer.start)
|
||||||
|
@ -341,9 +304,9 @@ class textEditView(QTextEdit):
|
||||||
self._updating = True
|
self._updating = True
|
||||||
if self._index:
|
if self._index:
|
||||||
self.disconnectDocument()
|
self.disconnectDocument()
|
||||||
if self.toPlainText() != F.toString(self._model.data(self._index)):
|
if self.toPlainText() != F.toString(self._index.data()):
|
||||||
# print(" Updating plaintext")
|
# print(" Updating plaintext")
|
||||||
self.document().setPlainText(F.toString(self._model.data(self._index)))
|
self.document().setPlainText(F.toString(self._index.data()))
|
||||||
self.reconnectDocument()
|
self.reconnectDocument()
|
||||||
|
|
||||||
elif self._indexes:
|
elif self._indexes:
|
||||||
|
@ -378,10 +341,11 @@ class textEditView(QTextEdit):
|
||||||
# print("Submitting", self.objectName())
|
# print("Submitting", self.objectName())
|
||||||
if self._index and self._index.isValid():
|
if self._index and self._index.isValid():
|
||||||
# item = self._index.internalPointer()
|
# item = self._index.internalPointer()
|
||||||
if self.toPlainText() != self._model.data(self._index):
|
if self.toPlainText() != self._index.data():
|
||||||
# print(" Submitting plain text")
|
# print(" Submitting plain text")
|
||||||
self._updating = True
|
self._updating = True
|
||||||
self._model.setData(self._index, self.toPlainText())
|
self._model.setData(QModelIndex(self._index),
|
||||||
|
self.toPlainText())
|
||||||
self._updating = False
|
self._updating = False
|
||||||
|
|
||||||
elif self._indexes:
|
elif self._indexes:
|
||||||
|
|
Loading…
Reference in a new issue