mirror of
https://github.com/olivierkes/manuskript.git
synced 2024-06-09 06:24:32 +12:00
Reference now manages plots as well.
This commit is contained in:
parent
92b270c651
commit
d7c6ab4b25
|
@ -10,21 +10,26 @@ import re
|
|||
# SHORT REFERENCES
|
||||
###############################################################################
|
||||
|
||||
|
||||
# A regex used to match references
|
||||
RegEx = r"::(\w):(\d+?)::"
|
||||
# A non-capturing regex used to identify references
|
||||
RegExNonCapturing = r"::\w:\d+?::"
|
||||
# The basic format of the references
|
||||
EmptyRef = "::{}:{}::"
|
||||
PersoLetter = "C"
|
||||
TextLetter = "T"
|
||||
PlotLetter = "P"
|
||||
|
||||
def plotReference(plotID):
|
||||
"Takes the ID of a plot and returns a reference for that plot."
|
||||
return EmptyRef.format(PlotLetter, plotID)
|
||||
|
||||
def persoReference(persoID):
|
||||
"Takes the ID of a character and returns a reference for that character."
|
||||
return EmptyRef.format(PersoLetter, persoID)
|
||||
|
||||
def textReference(outlineID):
|
||||
"Takes the ID of an outline item and returns a reference for that item."
|
||||
return EmptyRef.format(TextLetter, outlineID)
|
||||
|
||||
|
||||
|
@ -33,213 +38,313 @@ def textReference(outlineID):
|
|||
###############################################################################
|
||||
|
||||
def infos(ref):
|
||||
"""Returns a full paragraph in HTML format
|
||||
containing detailed infos about the reference ``ref``.
|
||||
"""
|
||||
match = re.fullmatch(RegEx, ref)
|
||||
if match:
|
||||
_type = match.group(1)
|
||||
_ref = match.group(2)
|
||||
if not match:
|
||||
return qApp.translate("references", "Not a reference: {}.").format(ref)
|
||||
|
||||
_type = match.group(1)
|
||||
_ref = match.group(2)
|
||||
|
||||
# A text or outine item
|
||||
if _type == TextLetter:
|
||||
m = mainWindow().mdlOutline
|
||||
idx = m.getIndexByID(_ref)
|
||||
|
||||
if _type == TextLetter:
|
||||
m = mainWindow().mdlOutline
|
||||
idx = m.getIndexByID(_ref)
|
||||
|
||||
if not idx.isValid():
|
||||
return qApp.translate("references", "Unknown reference: {}.").format(ref)
|
||||
|
||||
item = idx.internalPointer()
|
||||
|
||||
#Titles
|
||||
pathTitle = qApp.translate("references", "Path:")
|
||||
statsTitle = qApp.translate("references", "Stats:")
|
||||
POVTitle = qApp.translate("references", "POV:")
|
||||
statusTitle = qApp.translate("references", "Status:")
|
||||
labelTitle = qApp.translate("references", "Label:")
|
||||
ssTitle = qApp.translate("references", "Short summary:")
|
||||
lsTitle = qApp.translate("references", "Long summary:")
|
||||
notesTitle = qApp.translate("references", "Notes:")
|
||||
|
||||
POV = ""
|
||||
if item.POV():
|
||||
POV = "<a href='{ref}'>{text}</a>".format(
|
||||
ref=persoReference(item.POV()),
|
||||
text=mainWindow().mdlPersos.getPersoNameByID(item.POV()))
|
||||
|
||||
status = item.status()
|
||||
if status:
|
||||
status = mainWindow().mdlStatus.item(int(status), 0).text()
|
||||
else:
|
||||
status = ""
|
||||
|
||||
label = item.label()
|
||||
if label:
|
||||
label = mainWindow().mdlLabels.item(int(label), 0).text()
|
||||
else:
|
||||
label = ""
|
||||
|
||||
path = item.pathID()
|
||||
pathStr = []
|
||||
for _id, title in path:
|
||||
pathStr.append("<a href='{ref}'>{text}</a>".format(
|
||||
ref=textReference(_id),
|
||||
text=title))
|
||||
path = " > ".join(pathStr)
|
||||
|
||||
ss = item.data(Outline.summarySentance.value)
|
||||
ls = item.data(Outline.summaryFull.value)
|
||||
notes = item.data(Outline.notes.value)
|
||||
|
||||
text = """<h1>{title}</h1>
|
||||
<p><b>{pathTitle}</b> {path}</p>
|
||||
<p><b>{statsTitle}</b> {stats}<br>
|
||||
{POV}
|
||||
{status}
|
||||
{label}</p>
|
||||
{ss}
|
||||
{ls}
|
||||
{notes}
|
||||
""".format(
|
||||
title=item.title(),
|
||||
pathTitle=pathTitle,
|
||||
path=path,
|
||||
statsTitle=statsTitle,
|
||||
stats=item.stats(),
|
||||
POV="<b>{POVTitle}</b> {POV}<br>".format(
|
||||
POVTitle=POVTitle,
|
||||
POV=POV) if POV else "",
|
||||
status="<b>{statusTitle}</b> {status}<br>".format(
|
||||
statusTitle=statusTitle,
|
||||
status=status) if status else "",
|
||||
label="<b>{labelTitle}</b> {label}</p>".format(
|
||||
labelTitle=labelTitle,
|
||||
label=label) if label else "",
|
||||
ss="<p><b>{ssTitle}</b> {ss}</p>".format(
|
||||
ssTitle=ssTitle,
|
||||
ss=ss.replace("\n", "<br>")) if ss else "",
|
||||
ls="<p><b>{lsTitle}</b><br>{ls}</p>".format(
|
||||
lsTitle=lsTitle,
|
||||
ls=ls.replace("\n", "<br>")) if ls else "",
|
||||
notes="<p><b>{notesTitle}</b><br>{notes}</p>".format(
|
||||
notesTitle=notesTitle,
|
||||
notes=linkifyAllRefs(basicT2TFormat(notes))) if notes else "",
|
||||
)
|
||||
|
||||
return text
|
||||
if not idx.isValid():
|
||||
return qApp.translate("references", "Unknown reference: {}.").format(ref)
|
||||
|
||||
elif _type == PersoLetter:
|
||||
m = mainWindow().mdlPersos
|
||||
index = m.getIndexFromID(_ref)
|
||||
name = m.name(index.row())
|
||||
item = idx.internalPointer()
|
||||
|
||||
#Titles
|
||||
pathTitle = qApp.translate("references", "Path:")
|
||||
statsTitle = qApp.translate("references", "Stats:")
|
||||
POVTitle = qApp.translate("references", "POV:")
|
||||
statusTitle = qApp.translate("references", "Status:")
|
||||
labelTitle = qApp.translate("references", "Label:")
|
||||
ssTitle = qApp.translate("references", "Short summary:")
|
||||
lsTitle = qApp.translate("references", "Long summary:")
|
||||
notesTitle = qApp.translate("references", "Notes:")
|
||||
|
||||
# The POV of the scene
|
||||
POV = ""
|
||||
if item.POV():
|
||||
POV = "<a href='{ref}'>{text}</a>".format(
|
||||
ref=persoReference(item.POV()),
|
||||
text=mainWindow().mdlPersos.getPersoNameByID(item.POV()))
|
||||
|
||||
# The status of the scene
|
||||
status = item.status()
|
||||
if status:
|
||||
status = mainWindow().mdlStatus.item(int(status), 0).text()
|
||||
else:
|
||||
status = ""
|
||||
|
||||
# Titles
|
||||
basicTitle = qApp.translate("references", "Basic infos")
|
||||
detailedTitle = qApp.translate("references", "Detailed infos")
|
||||
POVof = qApp.translate("references", "POV of:")
|
||||
referencedIn = qApp.translate("references", "Referenced in:")
|
||||
|
||||
# basic infos
|
||||
basic = []
|
||||
for i in [
|
||||
(Perso.motivation, qApp.translate("references", "Motivation"), False),
|
||||
(Perso.goal, qApp.translate("references", "Goal"), False),
|
||||
(Perso.conflict, qApp.translate("references", "Conflict"), False),
|
||||
(Perso.epiphany, qApp.translate("references", "Epiphany"), False),
|
||||
(Perso.summarySentance, qApp.translate("references", "Short summary"), True),
|
||||
(Perso.summaryPara, qApp.translate("references", "Longer summary"), True),
|
||||
]:
|
||||
val = m.data(index.sibling(index.row(), i[0].value))
|
||||
if val:
|
||||
basic .append("<b>{title}:</b>{n}{val}".format(
|
||||
title=i[1],
|
||||
n = "\n" if i[2] else " ",
|
||||
val=val))
|
||||
basic = "<br>".join(basic)
|
||||
|
||||
# detailed infos
|
||||
detailed = []
|
||||
for _name, _val in m.listPersoInfos(index):
|
||||
detailed.append("<b>{}:</b> {}".format(
|
||||
_name,
|
||||
_val))
|
||||
detailed = "<br>".join(detailed)
|
||||
|
||||
# list scenes of which it is POV
|
||||
oM = mainWindow().mdlOutline
|
||||
lst = oM.findItemsByPOV(_ref)
|
||||
|
||||
listPOV = ""
|
||||
for t in lst:
|
||||
idx = oM.getIndexByID(t)
|
||||
listPOV += "<li><a href='{link}'>{text}</a>".format(
|
||||
link=textReference(t),
|
||||
text=oM.data(idx, Outline.title.value))
|
||||
|
||||
# List scenes where character is referenced
|
||||
listRefs = ""
|
||||
lst = oM.findItemsContaining(ref, [Outline.notes.value])
|
||||
for t in lst:
|
||||
idx = oM.getIndexByID(t)
|
||||
listRefs += "<li><a href='{link}'>{text}</a>".format(
|
||||
link=textReference(t),
|
||||
text=oM.data(idx, Outline.title.value))
|
||||
|
||||
text = """<h1>{name}</h1>
|
||||
{basicInfos}
|
||||
{detailedInfos}
|
||||
# The label of the scene
|
||||
label = item.label()
|
||||
if label:
|
||||
label = mainWindow().mdlLabels.item(int(label), 0).text()
|
||||
else:
|
||||
label = ""
|
||||
|
||||
# The path of the scene
|
||||
path = item.pathID()
|
||||
pathStr = []
|
||||
for _id, title in path:
|
||||
pathStr.append("<a href='{ref}'>{text}</a>".format(
|
||||
ref=textReference(_id),
|
||||
text=title))
|
||||
path = " > ".join(pathStr)
|
||||
|
||||
# Summaries and notes
|
||||
ss = item.data(Outline.summarySentance.value)
|
||||
ls = item.data(Outline.summaryFull.value)
|
||||
notes = item.data(Outline.notes.value)
|
||||
|
||||
text = """<h1>{title}</h1>
|
||||
<p><b>{pathTitle}</b> {path}</p>
|
||||
<p><b>{statsTitle}</b> {stats}<br>
|
||||
{POV}
|
||||
{references}
|
||||
""".format(
|
||||
name=name,
|
||||
basicInfos="<h2>{basicTitle}</h2>{basic}".format(
|
||||
basicTitle=basicTitle,
|
||||
basic=basic) if basic else "",
|
||||
detailedInfos="<h2>{detailedTitle}</h2>{detailed}".format(
|
||||
detailedTitle=detailedTitle,
|
||||
detailed=detailed) if detailed else "",
|
||||
POV="<h2>{POVof}</h2><ul>{listPOV}</ul>".format(
|
||||
POVof=POVof,
|
||||
listPOV=listPOV) if listPOV else "",
|
||||
references="<h2>{referencedIn}</h2><ul>{listRefs}</ul>".format(
|
||||
referencedIn=referencedIn,
|
||||
listRefs=listRefs) if listRefs else "",
|
||||
)
|
||||
return text
|
||||
{status}
|
||||
{label}</p>
|
||||
{ss}
|
||||
{ls}
|
||||
{notes}
|
||||
""".format(
|
||||
title=item.title(),
|
||||
pathTitle=pathTitle,
|
||||
path=path,
|
||||
statsTitle=statsTitle,
|
||||
stats=item.stats(),
|
||||
POV="<b>{POVTitle}</b> {POV}<br>".format(
|
||||
POVTitle=POVTitle,
|
||||
POV=POV) if POV else "",
|
||||
status="<b>{statusTitle}</b> {status}<br>".format(
|
||||
statusTitle=statusTitle,
|
||||
status=status) if status else "",
|
||||
label="<b>{labelTitle}</b> {label}</p>".format(
|
||||
labelTitle=labelTitle,
|
||||
label=label) if label else "",
|
||||
ss="<p><b>{ssTitle}</b> {ss}</p>".format(
|
||||
ssTitle=ssTitle,
|
||||
ss=ss.replace("\n", "<br>")) if ss else "",
|
||||
ls="<p><b>{lsTitle}</b><br>{ls}</p>".format(
|
||||
lsTitle=lsTitle,
|
||||
ls=ls.replace("\n", "<br>")) if ls else "",
|
||||
notes="<p><b>{notesTitle}</b><br>{notes}</p>".format(
|
||||
notesTitle=notesTitle,
|
||||
notes=linkifyAllRefs(basicT2TFormat(notes))) if notes else "",
|
||||
)
|
||||
|
||||
return text
|
||||
|
||||
# A character
|
||||
elif _type == PersoLetter:
|
||||
m = mainWindow().mdlPersos
|
||||
index = m.getIndexFromID(_ref)
|
||||
name = m.name(index.row())
|
||||
|
||||
# Titles
|
||||
basicTitle = qApp.translate("references", "Basic infos")
|
||||
detailedTitle = qApp.translate("references", "Detailed infos")
|
||||
POVof = qApp.translate("references", "POV of:")
|
||||
referencedIn = qApp.translate("references", "Referenced in:")
|
||||
|
||||
# Goto (link)
|
||||
goto = qApp.translate("references", "Go to {}.")
|
||||
goto = goto.format(refToLink(ref))
|
||||
|
||||
# basic infos
|
||||
basic = []
|
||||
for i in [
|
||||
(Perso.motivation, qApp.translate("references", "Motivation"), False),
|
||||
(Perso.goal, qApp.translate("references", "Goal"), False),
|
||||
(Perso.conflict, qApp.translate("references", "Conflict"), False),
|
||||
(Perso.epiphany, qApp.translate("references", "Epiphany"), False),
|
||||
(Perso.summarySentance, qApp.translate("references", "Short summary"), True),
|
||||
(Perso.summaryPara, qApp.translate("references", "Longer summary"), True),
|
||||
]:
|
||||
val = m.data(index.sibling(index.row(), i[0].value))
|
||||
if val:
|
||||
basic .append("<b>{title}:</b>{n}{val}".format(
|
||||
title=i[1],
|
||||
n = "\n" if i[2] else " ",
|
||||
val=val))
|
||||
basic = "<br>".join(basic)
|
||||
|
||||
# detailed infos
|
||||
detailed = []
|
||||
for _name, _val in m.listPersoInfos(index):
|
||||
detailed.append("<b>{}:</b> {}".format(
|
||||
_name,
|
||||
_val))
|
||||
detailed = "<br>".join(detailed)
|
||||
|
||||
# list scenes of which it is POV
|
||||
oM = mainWindow().mdlOutline
|
||||
lst = oM.findItemsByPOV(_ref)
|
||||
|
||||
listPOV = ""
|
||||
for t in lst:
|
||||
idx = oM.getIndexByID(t)
|
||||
listPOV += "<li><a href='{link}'>{text}</a></li>".format(
|
||||
link=textReference(t),
|
||||
text=oM.data(idx, Outline.title.value))
|
||||
|
||||
# List scenes where character is referenced
|
||||
listRefs = ""
|
||||
lst = oM.findItemsContaining(ref, [Outline.notes.value])
|
||||
for t in lst:
|
||||
idx = oM.getIndexByID(t)
|
||||
listRefs += "<li><a href='{link}'>{text}</a></li>".format(
|
||||
link=textReference(t),
|
||||
text=oM.data(idx, Outline.title.value))
|
||||
|
||||
text = """<h1>{name}</h1>
|
||||
{goto}
|
||||
{basicInfos}
|
||||
{detailedInfos}
|
||||
{POV}
|
||||
{references}
|
||||
""".format(
|
||||
name=name,
|
||||
goto=goto,
|
||||
basicInfos="<h2>{basicTitle}</h2>{basic}".format(
|
||||
basicTitle=basicTitle,
|
||||
basic=basic) if basic else "",
|
||||
detailedInfos="<h2>{detailedTitle}</h2>{detailed}".format(
|
||||
detailedTitle=detailedTitle,
|
||||
detailed=detailed) if detailed else "",
|
||||
POV="<h2>{POVof}</h2><ul>{listPOV}</ul>".format(
|
||||
POVof=POVof,
|
||||
listPOV=listPOV) if listPOV else "",
|
||||
references="<h2>{referencedIn}</h2><ul>{listRefs}</ul>".format(
|
||||
referencedIn=referencedIn,
|
||||
listRefs=listRefs) if listRefs else "",
|
||||
)
|
||||
return text
|
||||
|
||||
# A plot
|
||||
elif _type == PlotLetter:
|
||||
m = mainWindow().mdlPlots
|
||||
index = m.getIndexFromID(_ref)
|
||||
name = m.getPlotNameByID(_ref)
|
||||
|
||||
# Titles
|
||||
descriptionTitle = qApp.translate("references", "Description")
|
||||
resultTitle = qApp.translate("references", "Result")
|
||||
charactersTitle = qApp.translate("references", "Characters")
|
||||
stepsTitle = qApp.translate("references", "Resolution steps")
|
||||
|
||||
# Goto (link)
|
||||
goto = qApp.translate("references", "Go to {}.")
|
||||
goto = goto.format(refToLink(ref))
|
||||
|
||||
# Description
|
||||
description = m.data(index.sibling(index.row(),
|
||||
Plot.description.value))
|
||||
|
||||
# Result
|
||||
result = m.data(index.sibling(index.row(),
|
||||
Plot.result.value))
|
||||
|
||||
# Characters
|
||||
pM = mainWindow().mdlPersos
|
||||
item = m.item(index.row(), Plot.persos.value)
|
||||
characters = ""
|
||||
if item:
|
||||
for r in range(item.rowCount()):
|
||||
ID = item.child(r, 0).text()
|
||||
characters += "<li><a href='{link}'>{text}</a>".format(
|
||||
link=persoReference(ID),
|
||||
text=pM.getPersoNameByID(ID))
|
||||
|
||||
# Resolution steps
|
||||
steps = ""
|
||||
item = m.item(index.row(), Plot.subplots.value)
|
||||
if item:
|
||||
for r in range(item.rowCount()):
|
||||
title = item.child(r, 0).text()
|
||||
summary = item.child(r, 3).text()
|
||||
steps += "<li><b>{title}:</b> {summary}</li>".format(
|
||||
title=title,
|
||||
summary=summary)
|
||||
|
||||
text = """<h1>{name}</h1>
|
||||
{goto}
|
||||
{characters}
|
||||
{description}
|
||||
{result}
|
||||
{steps}
|
||||
""".format(
|
||||
name=name,
|
||||
goto=goto,
|
||||
description="<h2>{title}</h2>{text}".format(
|
||||
title=descriptionTitle,
|
||||
text=description) if description else "",
|
||||
result="<h2>{title}</h2>{text}".format(
|
||||
title=resultTitle,
|
||||
text=result) if result else "",
|
||||
characters="<h2>{title}</h2><ul>{lst}</ul>".format(
|
||||
title=charactersTitle,
|
||||
lst=characters) if characters else "",
|
||||
steps="<h2>{title}</h2><ul>{steps}</ul>".format(
|
||||
title=stepsTitle,
|
||||
steps=steps) if steps else "",
|
||||
)
|
||||
return text
|
||||
|
||||
else:
|
||||
return qApp.translate("references", "Unknown reference: {}.").format(ref)
|
||||
|
||||
def tooltip(ref):
|
||||
"Returns a tooltip in HTML for the reference ``ref``."
|
||||
match = re.fullmatch(RegEx, ref)
|
||||
if match:
|
||||
_type = match.group(1)
|
||||
_ref = match.group(2)
|
||||
|
||||
if not match:
|
||||
return qApp.translate("references", "Not a reference: {}.").format(ref)
|
||||
|
||||
_type = match.group(1)
|
||||
_ref = match.group(2)
|
||||
|
||||
if _type == TextLetter:
|
||||
m = mainWindow().mdlOutline
|
||||
idx = m.getIndexByID(_ref)
|
||||
|
||||
if _type == TextLetter:
|
||||
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: <b>{}</b>").format(item.title())
|
||||
tooltip += "<br><i>{}</i>".format(item.path())
|
||||
|
||||
return tooltip
|
||||
if not idx.isValid():
|
||||
return qApp.translate("references", "Unknown reference: {}.").format(ref)
|
||||
|
||||
elif _type == PersoLetter:
|
||||
m = mainWindow().mdlPersos
|
||||
name = m.item(int(_ref), Perso.name.value).text()
|
||||
return qApp.translate("references", "Character: <b>{}</b>").format(name)
|
||||
item = idx.internalPointer()
|
||||
|
||||
tooltip = qApp.translate("references", "Text: <b>{}</b>").format(item.title())
|
||||
tooltip += "<br><i>{}</i>".format(item.path())
|
||||
|
||||
return tooltip
|
||||
|
||||
elif _type == PersoLetter:
|
||||
m = mainWindow().mdlPersos
|
||||
name = m.item(int(_ref), Perso.name.value).text()
|
||||
return qApp.translate("references", "Character: <b>{}</b>").format(name)
|
||||
|
||||
elif _type == PlotLetter:
|
||||
m = mainWindow().mdlPlots
|
||||
name = m.getPlotNameByID(_ref)
|
||||
return qApp.translate("references", "Plot: <b>{}</b>").format(name)
|
||||
|
||||
else:
|
||||
return qApp.translate("references", "Unknown reference: {}.").format(ref)
|
||||
|
||||
|
||||
###############################################################################
|
||||
# FUNCTIONS
|
||||
###############################################################################
|
||||
|
||||
def refToLink(ref):
|
||||
"""Transforms the reference ``ref`` in a link displaying useful infos
|
||||
about that reference. For character, character's name. For text item,
|
||||
item's name, etc.
|
||||
"""
|
||||
match = re.fullmatch(RegEx, ref)
|
||||
if match:
|
||||
_type = match.group(1)
|
||||
|
@ -256,6 +361,10 @@ def refToLink(ref):
|
|||
m = mainWindow().mdlPersos
|
||||
text = m.item(int(_ref), Perso.name.value).text()
|
||||
|
||||
elif _type == PlotLetter:
|
||||
m = mainWindow().mdlPlots
|
||||
text = m.getPlotNameByID(_ref)
|
||||
|
||||
if text:
|
||||
return "<a href='{ref}'>{text}</a>".format(
|
||||
ref=ref,
|
||||
|
@ -264,9 +373,11 @@ def refToLink(ref):
|
|||
return ref
|
||||
|
||||
def linkifyAllRefs(text):
|
||||
"Takes all the references in ``text`` and transform them into HMTL links."
|
||||
return re.sub(RegEx, lambda m: refToLink(m.group(0)), text)
|
||||
|
||||
def basicT2TFormat(text, formatting=True, EOL=True, titles=True):
|
||||
"A very basic t2t formatter to display notes and texts."
|
||||
text = text.splitlines()
|
||||
for n in range(len(text)):
|
||||
if formatting:
|
||||
|
@ -288,35 +399,49 @@ def basicT2TFormat(text, formatting=True, EOL=True, titles=True):
|
|||
return text
|
||||
|
||||
def open(ref):
|
||||
"Identify ``ref`` and open it."
|
||||
match = re.fullmatch(RegEx, ref)
|
||||
if match:
|
||||
_type = match.group(1)
|
||||
_ref = match.group(2)
|
||||
if not match:
|
||||
return
|
||||
|
||||
_type = match.group(1)
|
||||
_ref = match.group(2)
|
||||
|
||||
if _type == PersoLetter:
|
||||
mw = mainWindow()
|
||||
item = mw.lstPersos.getItemByID(_ref)
|
||||
|
||||
if _type == PersoLetter:
|
||||
mw = mainWindow()
|
||||
if item:
|
||||
mw.tabMain.setCurrentIndex(2)
|
||||
mw.lstPersos.setCurrentItem(item)
|
||||
return True
|
||||
|
||||
for i in range(mw.mdlPersos.rowCount()):
|
||||
if mw.mdlPersos.ID(i) == _ref:
|
||||
mw.tabMain.setCurrentIndex(2)
|
||||
item = mw.lstPersos.getItemByID(_ref)
|
||||
mw.lstPersos.setCurrentItem(item)
|
||||
return True
|
||||
|
||||
print("Ref not found")
|
||||
return False
|
||||
|
||||
elif _type == TextLetter:
|
||||
mw = mainWindow()
|
||||
index = mw.mdlOutline.getIndexByID(_ref)
|
||||
|
||||
if index.isValid():
|
||||
mw.mainEditor.setCurrentModelIndex(index, newTab=True)
|
||||
return True
|
||||
else:
|
||||
print("Ref not found")
|
||||
return False
|
||||
|
||||
|
||||
elif _type == PlotLetter:
|
||||
mw = mainWindow()
|
||||
item = mw.lstPlots.getItemByID(_ref)
|
||||
|
||||
elif _type == TextLetter:
|
||||
|
||||
mw = mainWindow()
|
||||
index = mw.mdlOutline.getIndexByID(_ref)
|
||||
|
||||
if index.isValid():
|
||||
mw.mainEditor.setCurrentModelIndex(index, newTab=True)
|
||||
return True
|
||||
else:
|
||||
print("Ref not found")
|
||||
return False
|
||||
if item:
|
||||
mw.tabMain.setCurrentIndex(3)
|
||||
mw.lstPlots.setCurrentItem(item)
|
||||
return True
|
||||
|
||||
print("Ref not implemented")
|
||||
return False
|
||||
print("Ref not found")
|
||||
return False
|
||||
|
||||
print("Ref not implemented")
|
||||
return False
|
|
@ -29,6 +29,7 @@ class cheatSheet(QWidget, Ui_cheatSheet):
|
|||
|
||||
self.outlineModel = None
|
||||
self.persoModel = None
|
||||
self.plotModel = None
|
||||
|
||||
self.populateTimer = QTimer(self)
|
||||
self.populateTimer.setSingleShot(True)
|
||||
|
@ -43,8 +44,11 @@ class cheatSheet(QWidget, Ui_cheatSheet):
|
|||
def setModels(self):
|
||||
self.outlineModel = mainWindow().mdlOutline
|
||||
self.persoModel = mainWindow().mdlPersos
|
||||
self.plotModel = mainWindow().mdlPlots
|
||||
|
||||
self.outlineModel.dataChanged.connect(self.populateTimer.start)
|
||||
self.persoModel.dataChanged.connect(self.populateTimer.start)
|
||||
self.plotModel.dataChanged.connect(self.populateTimer.start)
|
||||
self.populate()
|
||||
|
||||
def populate(self):
|
||||
|
@ -59,6 +63,7 @@ class cheatSheet(QWidget, Ui_cheatSheet):
|
|||
d.append((name, ID, imp))
|
||||
|
||||
self.data[(self.tr("Characters"), Ref.PersoLetter)] = d
|
||||
|
||||
if self.outlineModel:
|
||||
d = []
|
||||
|
||||
|
@ -72,6 +77,18 @@ class cheatSheet(QWidget, Ui_cheatSheet):
|
|||
|
||||
self.data[(self.tr("Texts"), Ref.TextLetter)] = d
|
||||
|
||||
if self.plotModel:
|
||||
d = []
|
||||
|
||||
for r in range(self.plotModel.rowCount()):
|
||||
name = self.plotModel.item(r, Plot.name.value).text()
|
||||
ID = self.plotModel.item(r, Plot.ID.value).text()
|
||||
imp = self.plotModel.item(r, Plot.importance.value).text()
|
||||
imp = [self.tr("Minor"), self.tr("Secondary"), self.tr("Main")][int(imp)]
|
||||
d.append((name, ID, imp))
|
||||
|
||||
self.data[(self.tr("Plots"), Ref.PlotLetter)] = d
|
||||
|
||||
self.updateListFromData()
|
||||
|
||||
def addCategory(self, title):
|
||||
|
@ -92,7 +109,7 @@ class cheatSheet(QWidget, Ui_cheatSheet):
|
|||
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)
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
from qt import *
|
||||
import re
|
||||
from functions import *
|
||||
import models.references as Ref
|
||||
|
||||
class basicHighlighter(QSyntaxHighlighter):
|
||||
|
||||
|
@ -53,14 +54,17 @@ class basicHighlighter(QSyntaxHighlighter):
|
|||
"""
|
||||
|
||||
# References
|
||||
for txt in re.finditer(r"::(\w):(\d+?)::", text):
|
||||
for txt in re.finditer(Ref.RegEx, text):
|
||||
fmt = self.format(txt.start())
|
||||
fmt.setFontFixedPitch(True)
|
||||
fmt.setFontWeight(QFont.DemiBold)
|
||||
if txt.group(1) == "T":
|
||||
if txt.group(1) == Ref.TextLetter:
|
||||
fmt.setBackground(QBrush(QColor(Qt.blue).lighter(190)))
|
||||
elif txt.group(1) == "C":
|
||||
elif txt.group(1) == Ref.PersoLetter:
|
||||
fmt.setBackground(QBrush(QColor(Qt.yellow).lighter(170)))
|
||||
elif txt.group(1) == Ref.PlotLetter:
|
||||
fmt.setBackground(QBrush(QColor(Qt.red).lighter(170)))
|
||||
|
||||
self.setFormat(txt.start(),
|
||||
txt.end() - txt.start(),
|
||||
fmt)
|
||||
|
|
|
@ -50,9 +50,16 @@ class plotTreeView(QTreeWidget):
|
|||
###############################################################################
|
||||
|
||||
def getItemByID(self, ID):
|
||||
for i in range(self.topLevelItemCount()):
|
||||
if self.topLevelItem(i).data(0, Qt.UserRole) == ID:
|
||||
return self.topLevelItem(i)
|
||||
"Recursively search items to find one whose data is ``ID``."
|
||||
def find(item, ID):
|
||||
if item.data(0, Qt.UserRole) == ID:
|
||||
return item
|
||||
for i in range(item.childCount()):
|
||||
r = find(item.child(i), ID)
|
||||
if r:
|
||||
return r
|
||||
|
||||
return find(self.invisibleRootItem(), ID)
|
||||
|
||||
def currentPlotIndex(self):
|
||||
"Returns index of the current item in plot model."
|
||||
|
|
|
@ -154,6 +154,6 @@ class textEditCompleter(textEditView):
|
|||
#event = QPaintEvent(self.viewport().geometry())
|
||||
QTextEdit.paintEvent(self, event)
|
||||
painter = QPainter(self.viewport())
|
||||
|
||||
painter.setPen(Qt.gray)
|
||||
for r in self.refRects:
|
||||
painter.drawRect(r)
|
Loading…
Reference in a new issue