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: if index.column() in c._data:
return c._data[index.column()] return c._data[index.column()]
else: else:
return QVariant() return ""
elif type(c) == CharacterInfo: elif type(c) == CharacterInfo:
if role == Qt.DisplayRole or role == Qt.EditRole: if role == Qt.DisplayRole or role == Qt.EditRole:
@ -141,6 +141,7 @@ class characterModel(QAbstractItemModel):
return r return r
def getCharacterByID(self, ID): def getCharacterByID(self, ID):
ID = int(ID)
for c in self.characters: for c in self.characters:
if c.ID() == ID: if c.ID() == ID:
return c return c
@ -274,6 +275,12 @@ class Character():
self._data[C.ID.value] = k 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(): class CharacterInfo():
def __init__(self, character, description="", value=""): def __init__(self, character, description="", value=""):
self.description = description self.description = description

View file

@ -22,7 +22,7 @@ RegExNonCapturing = r"{\w:\d+:?.*?}"
# The basic format of the references # The basic format of the references
EmptyRef = "{{{}:{}:{}}}" EmptyRef = "{{{}:{}:{}}}"
EmptyRefSearchable = "{{{}:{}:" EmptyRefSearchable = "{{{}:{}:"
PersoLetter = "C" CharacterLetter = "C"
TextLetter = "T" TextLetter = "T"
PlotLetter = "P" PlotLetter = "P"
WorldLetter = "W" WorldLetter = "W"
@ -37,13 +37,13 @@ def plotReference(ID, searchable=False):
return EmptyRefSearchable.format(PlotLetter, ID, "") 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. """Takes the ID of a character and returns a reference for that character.
@searchable: returns a stripped version that allows simple text search.""" @searchable: returns a stripped version that allows simple text search."""
if not searchable: if not searchable:
return EmptyRef.format(PersoLetter, ID, "") return EmptyRef.format(CharacterLetter, ID, "")
else: else:
return EmptyRefSearchable.format(PersoLetter, ID, "") return EmptyRefSearchable.format(CharacterLetter, ID, "")
def textReference(ID, searchable=False): def textReference(ID, searchable=False):
@ -103,7 +103,7 @@ def infos(ref):
POV = "" POV = ""
if item.POV(): if item.POV():
POV = "<a href='{ref}'>{text}</a>".format( POV = "<a href='{ref}'>{text}</a>".format(
ref=persoReference(item.POV()), ref=characterReference(item.POV()),
text=mainWindow().mdlCharacter.getCharacterByID(item.POV()).name()) text=mainWindow().mdlCharacter.getCharacterByID(item.POV()).name())
# The status of the scene # The status of the scene
@ -174,10 +174,12 @@ def infos(ref):
return text return text
# A character # A character
elif _type == PersoLetter: elif _type == CharacterLetter:
m = mainWindow().mdlCharacter m = mainWindow().mdlCharacter
index = m.getIndexFromID(_ref) c = m.getCharacterByID(int(_ref))
name = m.name(index.row()) index = c.index()
name = c.name()
# Titles # Titles
basicTitle = qApp.translate("references", "Basic infos") basicTitle = qApp.translate("references", "Basic infos")
@ -191,14 +193,16 @@ def infos(ref):
# basic infos # basic infos
basic = [] basic = []
for i in [ for i in [
(Perso.motivation, qApp.translate("references", "Motivation"), False), (Character.motivation, qApp.translate("references", "Motivation"), False),
(Perso.goal, qApp.translate("references", "Goal"), False), (Character.goal, qApp.translate("references", "Goal"), False),
(Perso.conflict, qApp.translate("references", "Conflict"), False), (Character.conflict, qApp.translate("references", "Conflict"), False),
(Perso.epiphany, qApp.translate("references", "Epiphany"), False), (Character.epiphany, qApp.translate("references", "Epiphany"), False),
(Perso.summarySentence, qApp.translate("references", "Short summary"), True), (Character.summarySentence, qApp.translate("references", "Short summary"), True),
(Perso.summaryPara, qApp.translate("references", "Longer summary"), True), (Character.summaryPara, qApp.translate("references", "Longer summary"), True),
]: ]:
val = m.data(index.sibling(index.row(), i[0].value)) val = m.data(index.sibling(index.row(), i[0].value))
if val: if val:
basic.append("<b>{title}:</b>{n}{val}".format( basic.append("<b>{title}:</b>{n}{val}".format(
title=i[1], title=i[1],
@ -208,7 +212,7 @@ def infos(ref):
# detailed infos # detailed infos
detailed = [] detailed = []
for _name, _val in m.listPersoInfos(index): for _name, _val in c.listInfos():
detailed.append("<b>{}:</b> {}".format( detailed.append("<b>{}:</b> {}".format(
_name, _name,
_val)) _val))
@ -279,7 +283,7 @@ def infos(ref):
for r in range(item.rowCount()): for r in range(item.rowCount()):
ID = item.child(r, 0).text() ID = item.child(r, 0).text()
characters += "<li><a href='{link}'>{text}</a>".format( characters += "<li><a href='{link}'>{text}</a>".format(
link=persoReference(ID), link=characterReference(ID),
text=pM.getPersoNameByID(ID)) text=pM.getPersoNameByID(ID))
# Resolution steps # Resolution steps
@ -408,15 +412,16 @@ def shortInfos(ref):
infos["path"] = item.path() infos["path"] = item.path()
return infos return infos
elif _type == PersoLetter: elif _type == CharacterLetter:
infos["type"] = PersoLetter infos["type"] = CharacterLetter
m = mainWindow().mdlCharacter m = mainWindow().mdlCharacter
item = m.item(int(_ref), Perso.name.value) c = m.getCharacterByID(int(_ref))
if item:
infos["title"] = item.text() if c:
infos["name"] = item.text() infos["title"] = c.name()
infos["name"] = c.name()
return infos return infos
elif _type == PlotLetter: elif _type == PlotLetter:
@ -482,7 +487,7 @@ def tooltip(ref):
tt += "<br><i>{}</i>".format(infos["path"]) tt += "<br><i>{}</i>".format(infos["path"])
return tt return tt
elif infos["type"] == PersoLetter: elif infos["type"] == CharacterLetter:
return qApp.translate("references", "Character: <b>{}</b>").format(infos["title"]) return qApp.translate("references", "Character: <b>{}</b>").format(infos["title"])
elif infos["type"] == PlotLetter: elif infos["type"] == PlotLetter:
@ -515,9 +520,9 @@ def refToLink(ref):
item = idx.internalPointer() item = idx.internalPointer()
text = item.title() text = item.title()
elif _type == PersoLetter: elif _type == CharacterLetter:
m = mainWindow().mdlCharacter m = mainWindow().mdlCharacter
text = m.item(int(_ref), Perso.name.value).text() text = m.getCharacterByID(int(_ref)).name()
elif _type == PlotLetter: elif _type == PlotLetter:
m = mainWindow().mdlPlots m = mainWindow().mdlPlots
@ -618,17 +623,16 @@ def open(ref):
_type = match.group(1) _type = match.group(1)
_ref = match.group(2) _ref = match.group(2)
if _type == PersoLetter: if _type == CharacterLetter:
mw = mainWindow() mw = mainWindow()
# FIXME item = mw.lstCharacters.getItemByID(int(_ref))
item = mw.lstPersos.getItemByID(_ref)
if item: if item:
mw.tabMain.setCurrentIndex(mw.TabPersos) mw.tabMain.setCurrentIndex(mw.TabPersos)
mw.lstCharacters.setCurrentItem(item) mw.lstCharacters.setCurrentItem(item)
return True return True
print("Ref not found") print("Error: Ref {} not found".format(ref))
return False return False
elif _type == TextLetter: elif _type == TextLetter:

View file

@ -59,6 +59,8 @@ class cheatSheet(QWidget, Ui_cheatSheet):
self.outlineModel.dataChanged.connect(self.populateTimer.start) self.outlineModel.dataChanged.connect(self.populateTimer.start)
self.characterModel.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.plotModel.dataChanged.connect(self.populateTimer.start)
self.worldModel.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())] imp = [self.tr("Minor"), self.tr("Secondary"), self.tr("Main")][int(c.importance())]
d.append((c.name(), c.ID(), imp)) 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: if self.outlineModel:
d = [] d = []

View file

@ -61,7 +61,7 @@ class basicHighlighter(QSyntaxHighlighter):
fmt.setFontWeight(QFont.DemiBold) fmt.setFontWeight(QFont.DemiBold)
if txt.group(1) == Ref.TextLetter: if txt.group(1) == Ref.TextLetter:
fmt.setBackground(QBrush(QColor(Qt.blue).lighter(190))) 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))) fmt.setBackground(QBrush(QColor(Qt.yellow).lighter(170)))
elif txt.group(1) == Ref.PlotLetter: elif txt.group(1) == Ref.PlotLetter:
fmt.setBackground(QBrush(QColor(Qt.red).lighter(170))) fmt.setBackground(QBrush(QColor(Qt.red).lighter(170)))

View file

@ -161,6 +161,13 @@ class characterTreeView(QTreeWidget):
ID = self.currentCharacterID() ID = self.currentCharacterID()
return self._model.getCharacterByID(ID) 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): def mouseDoubleClickEvent(self, event):
item = self.currentItem() item = self.currentItem()
# Catching double clicks to forbid collapsing of toplevel items # Catching double clicks to forbid collapsing of toplevel items

View file

@ -71,16 +71,16 @@ class storylineView(QWidget, Ui_storylineView):
return r return r
def persosReferences(self): def charactersReferences(self):
"Returns a list of character references" "Returns a list of character references"
if not self._mdlCharacter: if not self._mdlCharacter:
pass pass
IDs = self._mdlCharacter.getPersosByImportance() chars = self._mdlCharacter.getCharactersByImportance()
r = [] r = []
for importance in IDs: for importance in chars:
for ID in importance: for c in importance:
ref = references.persoReference(ID) ref = references.characterReference(c.ID())
r.append(ref) r.append(ref)
return r return r
@ -118,7 +118,7 @@ class storylineView(QWidget, Ui_storylineView):
trackedItems += self.plotReferences() trackedItems += self.plotReferences()
if self.actCharacters.isChecked(): if self.actCharacters.isChecked():
trackedItems += self.persosReferences() trackedItems += self.charactersReferences()
ROWS_HEIGHT = len(trackedItems) * (LINE_HEIGHT + SPACING ) ROWS_HEIGHT = len(trackedItems) * (LINE_HEIGHT + SPACING )
@ -185,7 +185,7 @@ class storylineView(QWidget, Ui_storylineView):
# Tests if POV # Tests if POV
scenePOV = False # Will hold true of character is POV of the current text, not containing folder 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) ID = references.ID(ref)
c = child c = child
while c: while c:
@ -221,8 +221,8 @@ class storylineView(QWidget, Ui_storylineView):
itemsRect.setPos(0, MAX_LEVEL * LEVEL_HEIGHT + SPACING) itemsRect.setPos(0, MAX_LEVEL * LEVEL_HEIGHT + SPACING)
for ref in trackedItems: for ref in trackedItems:
if references.type(ref) == references.PersoLetter: if references.type(ref) == references.CharacterLetter:
color = QColor(self._mdlCharacter.getPersoColorByID(references.ID(ref))) color = self._mdlCharacter.getCharacterByID(references.ID(ref)).color()
else: else:
color = randomColor() color = randomColor()