Corrects references, cheatsheet, storyline, ...

This commit is contained in:
Olivier Keshavjee 2016-03-03 17:18:30 +01:00
parent 420f562c1b
commit a17745a89a
6 changed files with 61 additions and 41 deletions

View file

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

View file

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

View file

@ -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 = []

View file

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

View file

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

View file

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