From e9c74129dfda00b33a3bcdc651c05e64d08736ec Mon Sep 17 00:00:00 2001 From: Olivier Keshavjee Date: Sun, 28 Feb 2016 13:01:46 +0100 Subject: [PATCH] Corrects a bug that prevented all references to be found --- manuskript/mainWindow.py | 4 ++-- manuskript/models/outlineModel.py | 7 ++++--- manuskript/models/references.py | 26 +++++++++++++++++++++++--- manuskript/ui/views/storylineView.py | 3 +-- 4 files changed, 30 insertions(+), 10 deletions(-) diff --git a/manuskript/mainWindow.py b/manuskript/mainWindow.py index ab2f3dc..5fcc3bd 100644 --- a/manuskript/mainWindow.py +++ b/manuskript/mainWindow.py @@ -840,8 +840,8 @@ class MainWindow(QMainWindow, Ui_MainWindow): self.splitterOutlineV.setStretchFactor(0, 75) self.splitterOutlineV.setStretchFactor(1, 25) - self.splitterRedacV.setStretchFactor(0, 10) - self.splitterRedacV.setStretchFactor(1, 100) + self.splitterRedacV.setStretchFactor(0, 75) + self.splitterRedacV.setStretchFactor(1, 25) self.splitterRedacH.setStretchFactor(0, 30) self.splitterRedacH.setStretchFactor(1, 40) diff --git a/manuskript/models/outlineModel.py b/manuskript/models/outlineModel.py index bbeefb8..a3450a8 100644 --- a/manuskript/models/outlineModel.py +++ b/manuskript/models/outlineModel.py @@ -836,15 +836,16 @@ class outlineItem(): return lst - def findItemsContaining(self, text, columns, mainWindow=mainWindow(), caseSensitive=False): + def findItemsContaining(self, text, columns, mainWindow=mainWindow(), caseSensitive=False, recursive=True): """Returns a list if IDs of all subitems containing ``text`` in columns ``columns`` (being a list of int). """ lst = self.itemContains(text, columns, mainWindow, caseSensitive) - for c in self.children(): - lst.extend(c.findItemsContaining(text, columns, mainWindow, caseSensitive)) + if recursive: + for c in self.children(): + lst.extend(c.findItemsContaining(text, columns, mainWindow, caseSensitive)) return lst diff --git a/manuskript/models/references.py b/manuskript/models/references.py index a82475e..ac29a06 100644 --- a/manuskript/models/references.py +++ b/manuskript/models/references.py @@ -471,12 +471,32 @@ def linkifyAllRefs(text): return re.sub(RegEx, lambda m: refToLink(m.group(0)), text) +def findReferencesTo(ref, parent=None, recursive=True): + """List of text items containing references ref, and returns IDs. + Starts from item parent. If None, starts from root.""" + oM = mainWindow().mdlOutline + + if parent == None: + parent = oM.rootItem + + # Removes everything after the second ':': '{L:ID:random text}' → '{L:ID:' + ref = ref[:ref.index(":", ref.index(":") + 1)+1] + + # Bare form '{L:ID}' + ref2 = ref[:-1] + "}" + + # Since it's a simple search (no regex), we search for both. + lst = parent.findItemsContaining(ref, [Outline.notes.value], recursive=recursive) + lst += parent.findItemsContaining(ref2, [Outline.notes.value], recursive=recursive) + + return lst + def listReferences(ref, title=qApp.translate("references", "Referenced in:")): oM = mainWindow().mdlOutline listRefs = "" - # Removes everything after the second ':': '{L:ID:random text}' → '{L:ID:' - ref = ref[:ref.index(":", ref.index(":") + 1)] - lst = oM.findItemsContaining(ref, [Outline.notes.value]) + + lst = findReferencesTo(ref) + for t in lst: idx = oM.getIndexByID(t) listRefs += "
  • {text}
  • ".format( diff --git a/manuskript/ui/views/storylineView.py b/manuskript/ui/views/storylineView.py index e682aa7..ac149f7 100644 --- a/manuskript/ui/views/storylineView.py +++ b/manuskript/ui/views/storylineView.py @@ -155,7 +155,7 @@ class storylineView(QWidget, Ui_storylineView): result = [] c = child while c: - result += c.itemContains(ref, [Outline.notes.value]) + result += references.findReferencesTo(ref, c, recursive=False) c = c.parent() if result: @@ -240,7 +240,6 @@ class RefCircle(QGraphicsEllipseItem): self.setPos(self.pos() + r1.center() - r2.center()) def mouseDoubleClickEvent(self, event): - print("Good News!", self._ref) references.open(self._ref) def hoverEnterEvent(self, event):