From 21de78c27b88772e06480a09fff2f623dfd3fe77 Mon Sep 17 00:00:00 2001 From: Olivier Keshavjee Date: Mon, 29 Jun 2015 15:34:03 +0200 Subject: [PATCH] Corrects a few bug, tweaks a thing or two --- src/models/outlineModel.py | 19 ++++++++++++++++--- src/models/references.py | 27 +++++++++++++++++++++++++++ src/ui/editors/completer.py | 8 ++++++++ src/ui/views/outlineBasics.py | 4 ++-- src/ui/views/textEditCompleter.py | 3 +-- src/ui/views/treeView.py | 16 ++++++---------- 6 files changed, 60 insertions(+), 17 deletions(-) diff --git a/src/models/outlineModel.py b/src/models/outlineModel.py index f52fe1d1..c4583001 100644 --- a/src/models/outlineModel.py +++ b/src/models/outlineModel.py @@ -49,6 +49,11 @@ class outlineModel(QAbstractItemModel): col = column return self.createIndex(row, col, item) + def ID(self, index): + if index.isValid(): + item = index.internalPointer() + return item.ID() + def getIndexByID(self, ID): "Returns the index of item whose ID is ``ID``. If none, returns QModelIndex()." def search(item): @@ -240,12 +245,19 @@ class outlineModel(QAbstractItemModel): items = [] for child in root: if child.tag == "outlineItem": - items.append(outlineItem(xml=ET.tostring(child))) + item = outlineItem(xml=ET.tostring(child)) + items.append(item) if not items: return False - return self.insertItems(items, beginRow, parent) + r = self.insertItems(items, beginRow, parent) + + if action == Qt.CopyAction: + for item in items: + item.getUniqueID() + + return r ################# ADDING AND REMOVING ################# @@ -362,7 +374,7 @@ class outlineModel(QAbstractItemModel): path = path.split(",") item = self.rootItem for p in path: - if p != "": + if p != "" and int(p) < item.childCount(): item = item.child(int(p)) return self.indexFromItem(item) @@ -577,6 +589,7 @@ class outlineItem(): def removeChild(self, row): self.childItems.pop(row) + self.updateWordCount() def parent(self): return self._parent diff --git a/src/models/references.py b/src/models/references.py index 91cfce11..c11d375e 100644 --- a/src/models/references.py +++ b/src/models/references.py @@ -42,6 +42,33 @@ def infoForRef(ref): else: return qApp.translate("references", "Unknown reference: {}.").format(ref) +def tooltipForRef(ref): + match = re.fullmatch("::(\w):(\d+?)::", ref) + if match: + _type = match.group(1) + _ref = match.group(2) + + if _type == "T": + m = mainWindow().mdlOutline + idx = m.getIndexByID(_ref) + + if not idx.isValid(): + return qApp.translate("references", "Unknown reference: {}.").format(ref) + + item = idx.internalPointer() + + tooltip = qApp.translate("references", "Text: {}").format(item.title()) + tooltip += "
{}".format(item.path()) + + return tooltip + + elif _type == "C": + m = mainWindow().mdlPersos + name = m.item(int(_ref), Perso.name.value).text() + return qApp.translate("references", "Character: {}").format(name) + + else: + return qApp.translate("references", "Unknown reference: {}.").format(ref) def openReference(ref): match = re.fullmatch("::(\w):(\d+?)::", ref) diff --git a/src/ui/editors/completer.py b/src/ui/editors/completer.py index 2f0ced90..14ced3c9 100644 --- a/src/ui/editors/completer.py +++ b/src/ui/editors/completer.py @@ -24,6 +24,14 @@ class completer(QWidget, Ui_completer): self.outlineModel = mainWindow().mdlOutline self.persoModel = mainWindow().mdlPersos + self.populateTimer = QTimer(self) + self.populateTimer.setSingleShot(True) + self.populateTimer.setInterval(500) + self.populateTimer.timeout.connect(self.populate) + self.populateTimer.stop() + self.outlineModel.dataChanged.connect(self.populateTimer.start) + self.persoModel.dataChanged.connect(self.populateTimer.start) + self.data = {} self.populate() diff --git a/src/ui/views/outlineBasics.py b/src/ui/views/outlineBasics.py index 9166960f..5234a56f 100644 --- a/src/ui/views/outlineBasics.py +++ b/src/ui/views/outlineBasics.py @@ -20,11 +20,11 @@ class outlineBasics(QAbstractItemView): return sel def mouseReleaseEvent(self, event): - if event.button() == Qt.RightButton: - self.menu = self.makePopupMenu() self.menu.popup(event.globalPos()) + else: + QAbstractItemView.mouseReleaseEvent(self, event) def makePopupMenu(self): index = self.currentIndex() diff --git a/src/ui/views/textEditCompleter.py b/src/ui/views/textEditCompleter.py index 5de4b4ab..73c7c50a 100644 --- a/src/ui/views/textEditCompleter.py +++ b/src/ui/views/textEditCompleter.py @@ -123,7 +123,7 @@ class textEditCompleter(textEditView): if ref: if not qApp.overrideCursor(): qApp.setOverrideCursor(Qt.PointingHandCursor) - QToolTip.showText(self.mapToGlobal(event.pos()), infoForRef(ref)) + QToolTip.showText(self.mapToGlobal(event.pos()), tooltipForRef(ref)) def mouseReleaseEvent(self, event): textEditView.mouseReleaseEvent(self, event) @@ -147,7 +147,6 @@ class textEditCompleter(textEditView): cursor.setPosition(txt.start()) r = self.cursorRect(cursor) r.setWidth(fm.width(txt.group(0))) - r = r.adjusted(-2, -2, 2, 2) refs.append(r) self.refRects = refs diff --git a/src/ui/views/treeView.py b/src/ui/views/treeView.py index 48c749af..72cb1eb6 100644 --- a/src/ui/views/treeView.py +++ b/src/ui/views/treeView.py @@ -57,9 +57,9 @@ class treeView(QTreeView, dndView, outlineBasics): menu.insertSeparator(first) # Expand /collapse item - if len(self.selectedIndexes()) != 0: - index = self.currentIndex() - item = index.internalPointer() + if mouseIndex.isValid(): + #index = self.currentIndex() + item = mouseIndex.internalPointer() self.actExpand = QAction(self.tr("Expand {}").format(item.title()), menu) self.actExpand.triggered.connect(self.expandCurrentIndex) menu.insertAction(first, self.actExpand) @@ -88,7 +88,7 @@ class treeView(QTreeView, dndView, outlineBasics): def expandCurrentIndex(self, index=None): if index is None or type(index) == bool: - index = self.currentIndex() + index = self._indexesToOpen[0] #self.currentIndex() self.expand(index) for i in range(self.model().rowCount(index)): @@ -97,7 +97,7 @@ class treeView(QTreeView, dndView, outlineBasics): def collapseCurrentIndex(self, index=None): if index is None or type(index) == bool: - index = self.currentIndex() + index = self._indexesToOpen[0] #self.currentIndex() self.collapse(index) for i in range(self.model().rowCount(index)): @@ -114,8 +114,4 @@ class treeView(QTreeView, dndView, outlineBasics): # on right click pass else: - QTreeView.mousePressEvent(self, event) - - def mouseReleaseEvent(self, event): - QTreeView.mouseReleaseEvent(self, event) - outlineBasics.mouseReleaseEvent(self, event) \ No newline at end of file + QTreeView.mousePressEvent(self, event) \ No newline at end of file