Corrects a bug that prevented all references to be found

This commit is contained in:
Olivier Keshavjee 2016-02-28 13:01:46 +01:00
parent c8391f771a
commit e9c74129df
4 changed files with 30 additions and 10 deletions

View file

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

View file

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

View file

@ -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 += "<li><a href='{link}'>{text}</a></li>".format(

View file

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