diff --git a/manuskript/models/characterModel.py b/manuskript/models/characterModel.py
index 72f525bf..85745344 100644
--- a/manuskript/models/characterModel.py
+++ b/manuskript/models/characterModel.py
@@ -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
diff --git a/manuskript/models/references.py b/manuskript/models/references.py
index 6aeeb374..16663199 100644
--- a/manuskript/models/references.py
+++ b/manuskript/models/references.py
@@ -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 = "{text}".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("{title}:{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("{}: {}".format(
_name,
_val))
@@ -279,7 +283,7 @@ def infos(ref):
for r in range(item.rowCount()):
ID = item.child(r, 0).text()
characters += "
{text}".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 += "
{}".format(infos["path"])
return tt
- elif infos["type"] == PersoLetter:
+ elif infos["type"] == CharacterLetter:
return qApp.translate("references", "Character: {}").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:
diff --git a/manuskript/ui/cheatSheet.py b/manuskript/ui/cheatSheet.py
index 1ab6c2b0..2e3a4401 100644
--- a/manuskript/ui/cheatSheet.py
+++ b/manuskript/ui/cheatSheet.py
@@ -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 = []
diff --git a/manuskript/ui/editors/basicHighlighter.py b/manuskript/ui/editors/basicHighlighter.py
index b5055060..f0d5050b 100644
--- a/manuskript/ui/editors/basicHighlighter.py
+++ b/manuskript/ui/editors/basicHighlighter.py
@@ -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)))
diff --git a/manuskript/ui/views/characterTreeView.py b/manuskript/ui/views/characterTreeView.py
index 71e354a1..2bfbe55d 100644
--- a/manuskript/ui/views/characterTreeView.py
+++ b/manuskript/ui/views/characterTreeView.py
@@ -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
diff --git a/manuskript/ui/views/storylineView.py b/manuskript/ui/views/storylineView.py
index f5f40840..e10fc81e 100644
--- a/manuskript/ui/views/storylineView.py
+++ b/manuskript/ui/views/storylineView.py
@@ -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()