mirror of
https://github.com/olivierkes/manuskript.git
synced 2024-06-02 11:04:33 +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:
|
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
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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 = []
|
||||||
|
|
|
@ -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)))
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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()
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue