diff --git a/src/models/references.py b/src/models/references.py
index f55f4662..6814d848 100644
--- a/src/models/references.py
+++ b/src/models/references.py
@@ -6,14 +6,39 @@ from enums import *
from functions import *
import re
+###############################################################################
+# SHORT REFERENCES
+###############################################################################
-def infoForRef(ref):
- match = re.fullmatch("::(\w):(\d+?)::", ref)
+
+RegEx = r"::(\w):(\d+?)::"
+RegExNonCapturing = r"::\w:\d+?::"
+EmptyRef = "::{}:{}::"
+PersoLetter = "C"
+TextLetter = "T"
+PlotLetter = "P"
+
+def plotReference(plotID):
+ return EmptyRef.format(PlotLetter, plotID)
+
+def persoReference(persoID):
+ return EmptyRef.format(PersoLetter, persoID)
+
+def textReference(outlineID):
+ return EmptyRef.format(TextLetter, outlineID)
+
+
+###############################################################################
+# READABLE INFOS
+###############################################################################
+
+def infos(ref):
+ match = re.fullmatch(RegEx, ref)
if match:
_type = match.group(1)
_ref = match.group(2)
- if _type == "T":
+ if _type == TextLetter:
m = mainWindow().mdlOutline
idx = m.getIndexByID(_ref)
@@ -35,7 +60,7 @@ def infoForRef(ref):
POV = ""
if item.POV():
POV = "{text}".format(
- ref="::C:{}::".format(item.POV()),
+ ref=getPersoReference(item.POV()),
text=mainWindow().mdlPersos.getPersoNameByID(item.POV()))
status = item.status()
@@ -54,7 +79,7 @@ def infoForRef(ref):
pathStr = []
for _id, title in path:
pathStr.append("{text}".format(
- ref="::T:{}::".format(_id),
+ ref=getTextReference(_id),
text=title))
path = " > ".join(pathStr)
@@ -99,7 +124,7 @@ def infoForRef(ref):
return text
- elif _type == "C":
+ elif _type == PersoLetter:
m = mainWindow().mdlPersos
index = m.getIndexFromID(_ref)
name = m.name(index.row())
@@ -144,7 +169,7 @@ def infoForRef(ref):
for t in lst:
idx = oM.getIndexByID(t)
listPOV += "
{text}".format(
- link="::T:{}::".format(t),
+ link=getTextReference(t),
text=oM.data(idx, Outline.title.value))
# List scences where character is referenced
@@ -153,7 +178,7 @@ def infoForRef(ref):
for t in lst:
idx = oM.getIndexByID(t)
listRefs += "{text}".format(
- link="::T:{}::".format(t),
+ link=getTextReference(t),
text=oM.data(idx, Outline.title.value))
text = """{name}
@@ -181,47 +206,13 @@ def infoForRef(ref):
else:
return qApp.translate("references", "Unknown reference: {}.").format(ref)
-def refToLink(ref):
- match = re.fullmatch("::(\w):(\d+?)::", ref)
- if match:
- _type = match.group(1)
- _ref = match.group(2)
- text = ""
- if _type == "T":
- m = mainWindow().mdlOutline
- idx = m.getIndexByID(_ref)
- if idx.isValid():
- item = idx.internalPointer()
- text = item.title()
-
- elif _type == "C":
- m = mainWindow().mdlPersos
- text = m.item(int(_ref), Perso.name.value).text()
-
- if text:
- return "{text}".format(
- ref=ref,
- text=text)
- else:
- return ref
-
-def linkifyAllRefs(text):
- return re.sub(r"::(\w):(\d+?)::", lambda m: refToLink(m.group(0)), text)
-
-def basicT2TFormat(text):
- text = re.sub("\*\*(.*?)\*\*", "\\1", text)
- text = re.sub("//(.*?)//", "\\1", text)
- text = re.sub("__(.*?)__", "\\1", text)
- text = text.replace("\n", "
")
- return text
-
-def tooltipForRef(ref):
- match = re.fullmatch("::(\w):(\d+?)::", ref)
+def tooltip(ref):
+ match = re.fullmatch(RegEx, ref)
if match:
_type = match.group(1)
_ref = match.group(2)
- if _type == "T":
+ if _type == TextLetter:
m = mainWindow().mdlOutline
idx = m.getIndexByID(_ref)
@@ -235,7 +226,7 @@ def tooltipForRef(ref):
return tooltip
- elif _type == "C":
+ elif _type == PersoLetter:
m = mainWindow().mdlPersos
name = m.item(int(_ref), Perso.name.value).text()
return qApp.translate("references", "Character: {}").format(name)
@@ -243,13 +234,52 @@ def tooltipForRef(ref):
else:
return qApp.translate("references", "Unknown reference: {}.").format(ref)
-def openReference(ref):
- match = re.fullmatch("::(\w):(\d+?)::", ref)
+
+###############################################################################
+# FUNCTIONS
+###############################################################################
+
+def refToLink(ref):
+ match = re.fullmatch(RegEx, ref)
+ if match:
+ _type = match.group(1)
+ _ref = match.group(2)
+ text = ""
+ if _type == TextLetter:
+ m = mainWindow().mdlOutline
+ idx = m.getIndexByID(_ref)
+ if idx.isValid():
+ item = idx.internalPointer()
+ text = item.title()
+
+ elif _type == PersoLetter:
+ m = mainWindow().mdlPersos
+ text = m.item(int(_ref), Perso.name.value).text()
+
+ if text:
+ return "{text}".format(
+ ref=ref,
+ text=text)
+ else:
+ return ref
+
+def linkifyAllRefs(text):
+ return re.sub(RegEx, lambda m: refToLink(m.group(0)), text)
+
+def basicT2TFormat(text):
+ text = re.sub("\*\*(.*?)\*\*", "\\1", text)
+ text = re.sub("//(.*?)//", "\\1", text)
+ text = re.sub("__(.*?)__", "\\1", text)
+ text = text.replace("\n", "
")
+ return text
+
+def open(ref):
+ match = re.fullmatch(RegEx, ref)
if match:
_type = match.group(1)
_ref = match.group(2)
- if _type == "C":
+ if _type == PersoLetter:
mw = mainWindow()
for i in range(mw.mdlPersos.rowCount()):
@@ -262,7 +292,7 @@ def openReference(ref):
print("Ref not found")
return False
- elif _type == "T":
+ elif _type == TextLetter:
mw = mainWindow()
index = mw.mdlOutline.getIndexByID(_ref)
diff --git a/src/ui/cheatSheet.py b/src/ui/cheatSheet.py
index 8bd0feaf..9faa642a 100644
--- a/src/ui/cheatSheet.py
+++ b/src/ui/cheatSheet.py
@@ -6,7 +6,7 @@ from enums import *
from models.outlineModel import *
from ui.cheatSheet_ui import *
from functions import *
-from models.references import *
+import models.references as Ref
class cheatSheet(QWidget, Ui_cheatSheet):
@@ -23,6 +23,7 @@ class cheatSheet(QWidget, Ui_cheatSheet):
self.listDelegate = listCompleterDelegate(self)
self.list.setItemDelegate(self.listDelegate)
self.list.itemActivated.connect(self.showInfos)
+ self.list.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
self.view.linkActivated.connect(self.openLink)
self.view.linkHovered.connect(self.linkHovered)
@@ -44,6 +45,7 @@ class cheatSheet(QWidget, Ui_cheatSheet):
self.persoModel = mainWindow().mdlPersos
self.outlineModel.dataChanged.connect(self.populateTimer.start)
self.persoModel.dataChanged.connect(self.populateTimer.start)
+ self.populate()
def populate(self):
if self.persoModel:
@@ -56,7 +58,7 @@ class cheatSheet(QWidget, Ui_cheatSheet):
imp = [self.tr("Minor"), self.tr("Secondary"), self.tr("Main")][int(imp)]
d.append((name, ID, imp))
- self.data[(self.tr("Characters"), "C")] = d
+ self.data[(self.tr("Characters"), Ref.PersoLetter)] = d
if self.outlineModel:
d = []
@@ -68,7 +70,7 @@ class cheatSheet(QWidget, Ui_cheatSheet):
r = self.outlineModel.rootItem
addChildren(r)
- self.data[(self.tr("Texts"), "T")] = d
+ self.data[(self.tr("Texts"), Ref.TextLetter)] = d
self.updateListFromData()
@@ -100,14 +102,14 @@ class cheatSheet(QWidget, Ui_cheatSheet):
i = self.list.currentItem()
ref = i.data(Qt.UserRole)
if ref:
- self.view.setText(infoForRef(ref))
+ self.view.setText(Ref.infos(ref))
def openLink(self, link):
- openReference(link)
+ Ref.open(link)
def linkHovered(self, link):
if link:
- QToolTip.showText(QCursor.pos(), tooltipForRef(link))
+ QToolTip.showText(QCursor.pos(), Ref.tooltip(link))
def keyPressEvent(self, event):
if event.key() in [Qt.Key_Up, Qt.Key_Down]:
diff --git a/src/ui/editors/completer.py b/src/ui/editors/completer.py
index 280d26a4..f5fad657 100644
--- a/src/ui/editors/completer.py
+++ b/src/ui/editors/completer.py
@@ -6,6 +6,7 @@ from enums import *
from models.outlineModel import *
from ui.editors.completer_ui import *
from functions import *
+import models.references as Ref
class completer(QWidget, Ui_completer):
@@ -45,7 +46,7 @@ class completer(QWidget, Ui_completer):
self.addCategory(cat[0])
for item in filtered:
i = QListWidgetItem(item[0])
- i.setData(Qt.UserRole, "::{}:{}::".format(cat[1], item[1]))
+ i.setData(Qt.UserRole, Ref.EmptyRef.format(cat[1], item[1]))
i.setData(Qt.UserRole+1, item[2])
self.list.addItem(i)
diff --git a/src/ui/search.py b/src/ui/search.py
index 9858541c..de6010fe 100644
--- a/src/ui/search.py
+++ b/src/ui/search.py
@@ -6,7 +6,6 @@ from enums import *
from models.outlineModel import *
from ui.search_ui import *
from functions import *
-from models.references import *
class search(QWidget, Ui_search):
diff --git a/src/ui/views/textEditCompleter.py b/src/ui/views/textEditCompleter.py
index 73c7c50a..ef3f2c61 100644
--- a/src/ui/views/textEditCompleter.py
+++ b/src/ui/views/textEditCompleter.py
@@ -6,7 +6,7 @@ from enums import *
from functions import *
from ui.views.textEditView import *
from ui.editors.completer import *
-from models.references import *
+import models.references as Ref
import settings
import re
@@ -53,7 +53,7 @@ class textEditCompleter(textEditView):
cursor.select(QTextCursor.BlockUnderCursor)
text = cursor.selectedText()
pos -= cursor.selectionStart()
- match = re.findall(r"::\w:\d+?::", text)
+ match = re.findall(Ref.RegExNonCapturing, text)
for m in match:
if text.find(m) <= pos <= text.find(m) + len(m):
return m
@@ -123,7 +123,7 @@ class textEditCompleter(textEditView):
if ref:
if not qApp.overrideCursor():
qApp.setOverrideCursor(Qt.PointingHandCursor)
- QToolTip.showText(self.mapToGlobal(event.pos()), tooltipForRef(ref))
+ QToolTip.showText(self.mapToGlobal(event.pos()), Ref.tooltip(ref))
def mouseReleaseEvent(self, event):
textEditView.mouseReleaseEvent(self, event)
@@ -132,7 +132,7 @@ class textEditCompleter(textEditView):
cursor = self.cursorForPosition(event.pos())
ref = self.refUnderCursor(cursor)
if ref:
- openReference(ref)
+ Ref.open(ref)
qApp.restoreOverrideCursor()
def resizeEvent(self, event):
@@ -143,7 +143,7 @@ class textEditCompleter(textEditView):
cursor = self.textCursor()
fm = QFontMetrics(self.font())
refs = []
- for txt in re.finditer(r"::(\w):(\d+?)::", self.toPlainText()):
+ for txt in re.finditer(Ref.RegEx, self.toPlainText()):
cursor.setPosition(txt.start())
r = self.cursorRect(cursor)
r.setWidth(fm.width(txt.group(0)))