mirror of
https://github.com/olivierkes/manuskript.git
synced 2024-05-19 04:12:29 +12:00
Corrects references, cheatsheet, storyline, ...
This commit is contained in:
parent
420f562c1b
commit
a17745a89a
|
@ -39,7 +39,7 @@ class characterModel(QAbstractItemModel):
|
|||
if index.column() in c._data:
|
||||
return c._data[index.column()]
|
||||
else:
|
||||
return QVariant()
|
||||
return ""
|
||||
|
||||
elif type(c) == CharacterInfo:
|
||||
if role == Qt.DisplayRole or role == Qt.EditRole:
|
||||
|
@ -141,6 +141,7 @@ class characterModel(QAbstractItemModel):
|
|||
return r
|
||||
|
||||
def getCharacterByID(self, ID):
|
||||
ID = int(ID)
|
||||
for c in self.characters:
|
||||
if c.ID() == ID:
|
||||
return c
|
||||
|
@ -274,6 +275,12 @@ class Character():
|
|||
|
||||
self._data[C.ID.value] = k
|
||||
|
||||
def listInfos(self):
|
||||
r = []
|
||||
for i in self.infos:
|
||||
r.append((i.description, i.value))
|
||||
return r
|
||||
|
||||
class CharacterInfo():
|
||||
def __init__(self, character, description="", value=""):
|
||||
self.description = description
|
||||
|
|
|
@ -22,7 +22,7 @@ RegExNonCapturing = r"{\w:\d+:?.*?}"
|
|||
# The basic format of the references
|
||||
EmptyRef = "{{{}:{}:{}}}"
|
||||
EmptyRefSearchable = "{{{}:{}:"
|
||||
PersoLetter = "C"
|
||||
CharacterLetter = "C"
|
||||
TextLetter = "T"
|
||||
PlotLetter = "P"
|
||||
WorldLetter = "W"
|
||||
|
@ -37,13 +37,13 @@ def plotReference(ID, searchable=False):
|
|||
return EmptyRefSearchable.format(PlotLetter, ID, "")
|
||||
|
||||
|
||||
def persoReference(ID, searchable=False):
|
||||
def characterReference(ID, searchable=False):
|
||||
"""Takes the ID of a character and returns a reference for that character.
|
||||
@searchable: returns a stripped version that allows simple text search."""
|
||||
if not searchable:
|
||||
return EmptyRef.format(PersoLetter, ID, "")
|
||||
return EmptyRef.format(CharacterLetter, ID, "")
|
||||
else:
|
||||
return EmptyRefSearchable.format(PersoLetter, ID, "")
|
||||
return EmptyRefSearchable.format(CharacterLetter, ID, "")
|
||||
|
||||
|
||||
def textReference(ID, searchable=False):
|
||||
|
@ -103,7 +103,7 @@ def infos(ref):
|
|||
POV = ""
|
||||
if item.POV():
|
||||
POV = "<a href='{ref}'>{text}</a>".format(
|
||||
ref=persoReference(item.POV()),
|
||||
ref=characterReference(item.POV()),
|
||||
text=mainWindow().mdlCharacter.getCharacterByID(item.POV()).name())
|
||||
|
||||
# The status of the scene
|
||||
|
@ -174,10 +174,12 @@ def infos(ref):
|
|||
return text
|
||||
|
||||
# A character
|
||||
elif _type == PersoLetter:
|
||||
elif _type == CharacterLetter:
|
||||
m = mainWindow().mdlCharacter
|
||||
index = m.getIndexFromID(_ref)
|
||||
name = m.name(index.row())
|
||||
c = m.getCharacterByID(int(_ref))
|
||||
index = c.index()
|
||||
|
||||
name = c.name()
|
||||
|
||||
# Titles
|
||||
basicTitle = qApp.translate("references", "Basic infos")
|
||||
|
@ -191,14 +193,16 @@ def infos(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.summarySentence, qApp.translate("references", "Short summary"), True),
|
||||
(Perso.summaryPara, qApp.translate("references", "Longer summary"), True),
|
||||
(Character.motivation, qApp.translate("references", "Motivation"), False),
|
||||
(Character.goal, qApp.translate("references", "Goal"), False),
|
||||
(Character.conflict, qApp.translate("references", "Conflict"), False),
|
||||
(Character.epiphany, qApp.translate("references", "Epiphany"), False),
|
||||
(Character.summarySentence, qApp.translate("references", "Short summary"), True),
|
||||
(Character.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],
|
||||
|
@ -208,7 +212,7 @@ def infos(ref):
|
|||
|
||||
# detailed infos
|
||||
detailed = []
|
||||
for _name, _val in m.listPersoInfos(index):
|
||||
for _name, _val in c.listInfos():
|
||||
detailed.append("<b>{}:</b> {}".format(
|
||||
_name,
|
||||
_val))
|
||||
|
@ -279,7 +283,7 @@ def infos(ref):
|
|||
for r in range(item.rowCount()):
|
||||
ID = item.child(r, 0).text()
|
||||
characters += "<li><a href='{link}'>{text}</a>".format(
|
||||
link=persoReference(ID),
|
||||
link=characterReference(ID),
|
||||
text=pM.getPersoNameByID(ID))
|
||||
|
||||
# Resolution steps
|
||||
|
@ -408,15 +412,16 @@ def shortInfos(ref):
|
|||
infos["path"] = item.path()
|
||||
return infos
|
||||
|
||||
elif _type == PersoLetter:
|
||||
elif _type == CharacterLetter:
|
||||
|
||||
infos["type"] = PersoLetter
|
||||
infos["type"] = CharacterLetter
|
||||
|
||||
m = mainWindow().mdlCharacter
|
||||
item = m.item(int(_ref), Perso.name.value)
|
||||
if item:
|
||||
infos["title"] = item.text()
|
||||
infos["name"] = item.text()
|
||||
c = m.getCharacterByID(int(_ref))
|
||||
|
||||
if c:
|
||||
infos["title"] = c.name()
|
||||
infos["name"] = c.name()
|
||||
return infos
|
||||
|
||||
elif _type == PlotLetter:
|
||||
|
@ -482,7 +487,7 @@ def tooltip(ref):
|
|||
tt += "<br><i>{}</i>".format(infos["path"])
|
||||
return tt
|
||||
|
||||
elif infos["type"] == PersoLetter:
|
||||
elif infos["type"] == CharacterLetter:
|
||||
return qApp.translate("references", "Character: <b>{}</b>").format(infos["title"])
|
||||
|
||||
elif infos["type"] == PlotLetter:
|
||||
|
@ -515,9 +520,9 @@ def refToLink(ref):
|
|||
item = idx.internalPointer()
|
||||
text = item.title()
|
||||
|
||||
elif _type == PersoLetter:
|
||||
elif _type == CharacterLetter:
|
||||
m = mainWindow().mdlCharacter
|
||||
text = m.item(int(_ref), Perso.name.value).text()
|
||||
text = m.getCharacterByID(int(_ref)).name()
|
||||
|
||||
elif _type == PlotLetter:
|
||||
m = mainWindow().mdlPlots
|
||||
|
@ -618,17 +623,16 @@ def open(ref):
|
|||
_type = match.group(1)
|
||||
_ref = match.group(2)
|
||||
|
||||
if _type == PersoLetter:
|
||||
if _type == CharacterLetter:
|
||||
mw = mainWindow()
|
||||
# FIXME
|
||||
item = mw.lstPersos.getItemByID(_ref)
|
||||
item = mw.lstCharacters.getItemByID(int(_ref))
|
||||
|
||||
if item:
|
||||
mw.tabMain.setCurrentIndex(mw.TabPersos)
|
||||
mw.lstCharacters.setCurrentItem(item)
|
||||
return True
|
||||
|
||||
print("Ref not found")
|
||||
print("Error: Ref {} not found".format(ref))
|
||||
return False
|
||||
|
||||
elif _type == TextLetter:
|
||||
|
|
|
@ -59,6 +59,8 @@ class cheatSheet(QWidget, Ui_cheatSheet):
|
|||
|
||||
self.outlineModel.dataChanged.connect(self.populateTimer.start)
|
||||
self.characterModel.dataChanged.connect(self.populateTimer.start)
|
||||
self.characterModel.rowsInserted.connect(self.populateTimer.start)
|
||||
self.characterModel.rowsRemoved.connect(self.populateTimer.start)
|
||||
self.plotModel.dataChanged.connect(self.populateTimer.start)
|
||||
self.worldModel.dataChanged.connect(self.populateTimer.start)
|
||||
|
||||
|
@ -82,7 +84,7 @@ class cheatSheet(QWidget, Ui_cheatSheet):
|
|||
imp = [self.tr("Minor"), self.tr("Secondary"), self.tr("Main")][int(c.importance())]
|
||||
d.append((c.name(), c.ID(), imp))
|
||||
|
||||
self.data[(self.tr("Characters"), Ref.PersoLetter)] = d
|
||||
self.data[(self.tr("Characters"), Ref.CharacterLetter)] = d
|
||||
|
||||
if self.outlineModel:
|
||||
d = []
|
||||
|
|
|
@ -61,7 +61,7 @@ class basicHighlighter(QSyntaxHighlighter):
|
|||
fmt.setFontWeight(QFont.DemiBold)
|
||||
if txt.group(1) == Ref.TextLetter:
|
||||
fmt.setBackground(QBrush(QColor(Qt.blue).lighter(190)))
|
||||
elif txt.group(1) == Ref.PersoLetter:
|
||||
elif txt.group(1) == Ref.CharacterLetter:
|
||||
fmt.setBackground(QBrush(QColor(Qt.yellow).lighter(170)))
|
||||
elif txt.group(1) == Ref.PlotLetter:
|
||||
fmt.setBackground(QBrush(QColor(Qt.red).lighter(170)))
|
||||
|
|
|
@ -161,6 +161,13 @@ class characterTreeView(QTreeWidget):
|
|||
ID = self.currentCharacterID()
|
||||
return self._model.getCharacterByID(ID)
|
||||
|
||||
def getItemByID(self, ID):
|
||||
for t in range(self.topLevelItemCount()):
|
||||
for i in range(self.topLevelItem(t).childCount()):
|
||||
item = self.topLevelItem(t).child(i)
|
||||
if item.data(0, Qt.UserRole) == ID:
|
||||
return item
|
||||
|
||||
def mouseDoubleClickEvent(self, event):
|
||||
item = self.currentItem()
|
||||
# Catching double clicks to forbid collapsing of toplevel items
|
||||
|
|
|
@ -71,16 +71,16 @@ class storylineView(QWidget, Ui_storylineView):
|
|||
|
||||
return r
|
||||
|
||||
def persosReferences(self):
|
||||
def charactersReferences(self):
|
||||
"Returns a list of character references"
|
||||
if not self._mdlCharacter:
|
||||
pass
|
||||
|
||||
IDs = self._mdlCharacter.getPersosByImportance()
|
||||
chars = self._mdlCharacter.getCharactersByImportance()
|
||||
r = []
|
||||
for importance in IDs:
|
||||
for ID in importance:
|
||||
ref = references.persoReference(ID)
|
||||
for importance in chars:
|
||||
for c in importance:
|
||||
ref = references.characterReference(c.ID())
|
||||
r.append(ref)
|
||||
|
||||
return r
|
||||
|
@ -118,7 +118,7 @@ class storylineView(QWidget, Ui_storylineView):
|
|||
trackedItems += self.plotReferences()
|
||||
|
||||
if self.actCharacters.isChecked():
|
||||
trackedItems += self.persosReferences()
|
||||
trackedItems += self.charactersReferences()
|
||||
|
||||
ROWS_HEIGHT = len(trackedItems) * (LINE_HEIGHT + SPACING )
|
||||
|
||||
|
@ -185,7 +185,7 @@ class storylineView(QWidget, Ui_storylineView):
|
|||
|
||||
# Tests if POV
|
||||
scenePOV = False # Will hold true of character is POV of the current text, not containing folder
|
||||
if references.type(ref) == references.PersoLetter:
|
||||
if references.type(ref) == references.CharacterLetter:
|
||||
ID = references.ID(ref)
|
||||
c = child
|
||||
while c:
|
||||
|
@ -221,8 +221,8 @@ class storylineView(QWidget, Ui_storylineView):
|
|||
itemsRect.setPos(0, MAX_LEVEL * LEVEL_HEIGHT + SPACING)
|
||||
|
||||
for ref in trackedItems:
|
||||
if references.type(ref) == references.PersoLetter:
|
||||
color = QColor(self._mdlCharacter.getPersoColorByID(references.ID(ref)))
|
||||
if references.type(ref) == references.CharacterLetter:
|
||||
color = self._mdlCharacter.getCharacterByID(references.ID(ref)).color()
|
||||
else:
|
||||
color = randomColor()
|
||||
|
||||
|
|
Loading…
Reference in a new issue