mirror of
https://github.com/olivierkes/manuskript.git
synced 2024-05-16 19:02:32 +12:00
Improve plot view by implement plot step overview
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
This commit is contained in:
parent
cf4e4bc794
commit
9129d1fa5a
|
@ -4,7 +4,6 @@
|
|||
import os
|
||||
|
||||
from collections import OrderedDict
|
||||
from collections.abc import Callable
|
||||
|
||||
from manuskript.data.color import Color
|
||||
from manuskript.data.importance import Importance
|
||||
|
|
|
@ -88,6 +88,13 @@ class PlotLine:
|
|||
|
||||
self.links.call(LinkAction.UPDATE, self.UID, self)
|
||||
|
||||
def getStepByID(self, ID: int) -> PlotStep | None:
|
||||
for step in self.steps:
|
||||
if step.UID.value == ID:
|
||||
return step
|
||||
|
||||
return None
|
||||
|
||||
def __iter__(self):
|
||||
return self.steps.__iter__()
|
||||
|
||||
|
|
|
@ -144,8 +144,8 @@ class CharactersView:
|
|||
if tree_iter is None:
|
||||
continue
|
||||
|
||||
self.detailsStore.set_value(tree_iter, 0, str(key))
|
||||
self.detailsStore.set_value(tree_iter, 1, str(value))
|
||||
self.detailsStore.set_value(tree_iter, 0, validString(key))
|
||||
self.detailsStore.set_value(tree_iter, 1, validString(value))
|
||||
|
||||
self.character = character
|
||||
|
||||
|
|
|
@ -70,6 +70,21 @@ class PlotView:
|
|||
|
||||
self.importanceCombo = builder.get_object("importance")
|
||||
|
||||
self.importanceCombo.connect("changed", self.importanceChanged)
|
||||
|
||||
self.resolutionStepsStore = builder.get_object("resolution_steps_store")
|
||||
self.resolutionStepsSelection = builder.get_object("resolution_steps_selection")
|
||||
self.addResolutionStepButton = builder.get_object("add_resolution_step")
|
||||
self.removeResolutionStepButton = builder.get_object("remove_resolution_step")
|
||||
self.resolutionStepsNameRenderer = builder.get_object("resolution_steps_name")
|
||||
self.resolutionStepsMetaRenderer = builder.get_object("resolution_steps_meta")
|
||||
|
||||
self.resolutionStepsSelection.connect("changed", self.resolutionStepsSelectionChanged)
|
||||
self.addResolutionStepButton.connect("clicked", self.addResolutionStepClicked)
|
||||
self.removeResolutionStepButton.connect("clicked", self.removeResolutionStepClicked)
|
||||
self.resolutionStepsNameRenderer.connect("edited", self.resolutionStepsNameEdited)
|
||||
self.resolutionStepsMetaRenderer.connect("edited", self.resolutionStepsMetaEdited)
|
||||
|
||||
self.nameBuffer = builder.get_object("name")
|
||||
self.descriptionBuffer = builder.get_object("description")
|
||||
self.resultBuffer = builder.get_object("result")
|
||||
|
@ -87,6 +102,8 @@ class PlotView:
|
|||
self.resultBuffer.connect("changed", self.resultChanged)
|
||||
self.stepSummaryBuffer.connect("changed", self.stepSummaryChanged)
|
||||
|
||||
self.unloadPlotData()
|
||||
|
||||
def refreshPlotsStore(self):
|
||||
self.plotsStore.clear()
|
||||
|
||||
|
@ -131,6 +148,18 @@ class PlotView:
|
|||
self.descriptionBuffer.set_text(validString(plotLine.description), -1)
|
||||
self.resultBuffer.set_text(validString(plotLine.result), -1)
|
||||
|
||||
self.resolutionStepsStore.clear()
|
||||
|
||||
for step in plotLine:
|
||||
tree_iter = self.resolutionStepsStore.append()
|
||||
|
||||
if tree_iter is None:
|
||||
continue
|
||||
|
||||
self.resolutionStepsStore.set_value(tree_iter, 0, validInt(step.UID.value))
|
||||
self.resolutionStepsStore.set_value(tree_iter, 1, validString(step.name))
|
||||
self.resolutionStepsStore.set_value(tree_iter, 2, validString(step.meta))
|
||||
|
||||
self.plotLine = plotLine
|
||||
|
||||
if self.plotLine is not None:
|
||||
|
@ -150,6 +179,10 @@ class PlotView:
|
|||
self.resultBuffer.set_text("", -1)
|
||||
self.stepSummaryBuffer.set_text("", -1)
|
||||
|
||||
self.resolutionStepsStore.clear()
|
||||
|
||||
self.plotCharactersStore.refilter()
|
||||
|
||||
def plotSelectionChanged(self, selection: Gtk.TreeSelection):
|
||||
model, tree_iter = selection.get_selected()
|
||||
|
||||
|
@ -202,6 +235,120 @@ class PlotView:
|
|||
def filterPlotsInsertedText(self, buffer: Gtk.EntryBuffer, position: int, chars: str, n_chars: int):
|
||||
self.filterPlotsChanged(buffer)
|
||||
|
||||
def importanceChanged(self, combo: Gtk.ComboBox):
|
||||
if self.plotLine is None:
|
||||
return
|
||||
|
||||
tree_iter = combo.get_active_iter()
|
||||
|
||||
if tree_iter is None:
|
||||
return
|
||||
|
||||
model = combo.get_model()
|
||||
value = model[tree_iter][1]
|
||||
|
||||
importance = Importance.fromValue(value)
|
||||
|
||||
if (importance is None) or (self.plotLine.importance == importance):
|
||||
return
|
||||
|
||||
self.plotLine.importance = importance
|
||||
|
||||
plot_id = self.plotLine.UID.value
|
||||
|
||||
for row in self.plotsStore:
|
||||
if row[0] == plot_id:
|
||||
row[2] = Importance.asValue(importance)
|
||||
break
|
||||
|
||||
self.mainPlotsStore.refilter()
|
||||
self.secondaryPlotsStore.refilter()
|
||||
self.minorPlotsStore.refilter()
|
||||
|
||||
selection = self.plotSelections[importance.value]
|
||||
tree_view = selection.get_tree_view()
|
||||
model = tree_view.get_model()
|
||||
|
||||
for row in model:
|
||||
if row[0] == plot_id:
|
||||
selection.select_iter(row.iter)
|
||||
break
|
||||
|
||||
def resolutionStepsSelectionChanged(self, selection: Gtk.TreeSelection):
|
||||
model, tree_iter = selection.get_selected()
|
||||
|
||||
self.plotStep = None
|
||||
|
||||
if (tree_iter is None) or (self.plotLine is None):
|
||||
self.stepSummaryBuffer.set_text("", -1)
|
||||
return
|
||||
|
||||
plotStep = self.plotLine.getStepByID(model[tree_iter][0])
|
||||
|
||||
if plotStep is None:
|
||||
self.stepSummaryBuffer.set_text("", -1)
|
||||
else:
|
||||
self.stepSummaryBuffer.set_text(validString(plotStep.summary), -1)
|
||||
|
||||
self.plotStep = plotStep
|
||||
|
||||
def addResolutionStepClicked(self, button: Gtk.Button):
|
||||
if self.plotLine is None:
|
||||
return
|
||||
|
||||
tree_iter = self.resolutionStepsStore.append()
|
||||
|
||||
if tree_iter is None:
|
||||
return
|
||||
|
||||
name = "New step"
|
||||
meta = "Problem"
|
||||
|
||||
step = self.plotLine.addStep(name, meta)
|
||||
|
||||
self.resolutionStepsStore.set_value(tree_iter, 0, validInt(step.UID.value))
|
||||
self.resolutionStepsStore.set_value(tree_iter, 1, validString(step.name))
|
||||
self.resolutionStepsStore.set_value(tree_iter, 2, validString(step.meta))
|
||||
|
||||
def removeResolutionStepClicked(self, button: Gtk.Button):
|
||||
if (self.plotLine is None) or (self.plotStep is None):
|
||||
return
|
||||
|
||||
model, tree_iter = self.resolutionStepsSelection.get_selected()
|
||||
|
||||
if (model is None) or (tree_iter is None):
|
||||
return
|
||||
|
||||
model.remove(tree_iter)
|
||||
|
||||
self.plotLine.removeStep(self.plotStep)
|
||||
|
||||
def resolutionStepsNameEdited(self, renderer: Gtk.CellRendererText, path: str, text: str):
|
||||
if self.plotStep is None:
|
||||
return
|
||||
|
||||
model, tree_iter = self.resolutionStepsSelection.get_selected()
|
||||
|
||||
if (model is None) or (tree_iter is None):
|
||||
return
|
||||
|
||||
model.set_value(tree_iter, 1, text)
|
||||
|
||||
self.plotStep.name = invalidString(text)
|
||||
|
||||
def resolutionStepsMetaEdited(self, renderer: Gtk.CellRendererText, path: str, text: str):
|
||||
if self.plotStep is None:
|
||||
return
|
||||
|
||||
model, tree_iter = self.resolutionStepsSelection.get_selected()
|
||||
|
||||
if (model is None) or (tree_iter is None):
|
||||
return
|
||||
|
||||
model.set_value(tree_iter, 2, text)
|
||||
|
||||
self.plotStep.meta = invalidString(text)
|
||||
|
||||
def nameChanged(self, buffer: Gtk.EntryBuffer):
|
||||
if self.plotLine is None:
|
||||
return
|
||||
|
|
|
@ -49,16 +49,16 @@ along with Manuskript. If not, see <http://www.gnu.org/licenses/>.
|
|||
</columns>
|
||||
<data>
|
||||
<row>
|
||||
<col id="0" translatable="yes">Main</col>
|
||||
<col id="1">2</col>
|
||||
<col id="0" translatable="yes">Minor</col>
|
||||
<col id="1">0</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">Secondary</col>
|
||||
<col id="1">1</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">Minor</col>
|
||||
<col id="1">0</col>
|
||||
<col id="0" translatable="yes">Main</col>
|
||||
<col id="1">2</col>
|
||||
</row>
|
||||
</data>
|
||||
</object>
|
||||
|
@ -87,20 +87,13 @@ along with Manuskript. If not, see <http://www.gnu.org/licenses/>.
|
|||
</object>
|
||||
<object class="GtkListStore" id="resolution_steps_store">
|
||||
<columns>
|
||||
<!-- column-name ID -->
|
||||
<column type="gint"/>
|
||||
<!-- column-name name -->
|
||||
<column type="gchararray"/>
|
||||
<!-- column-name meta -->
|
||||
<column type="gchararray"/>
|
||||
<!-- column-name summary -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
<data>
|
||||
<row>
|
||||
<col id="0" translatable="yes">New step</col>
|
||||
<col id="1" translatable="yes">Problem</col>
|
||||
<col id="2" translatable="yes">test</col>
|
||||
</row>
|
||||
</data>
|
||||
</object>
|
||||
<object class="GtkTextBuffer" id="result"/>
|
||||
<object class="GtkTextBuffer" id="step_summary"/>
|
||||
|
@ -672,15 +665,17 @@ along with Manuskript. If not, see <http://www.gnu.org/licenses/>.
|
|||
<property name="search-column">0</property>
|
||||
<property name="enable-grid-lines">both</property>
|
||||
<child internal-child="selection">
|
||||
<object class="GtkTreeSelection"/>
|
||||
<object class="GtkTreeSelection" id="resolution_steps_selection"/>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkTreeViewColumn">
|
||||
<property name="title" translatable="yes">Name</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText"/>
|
||||
<object class="GtkCellRendererText" id="resolution_steps_name">
|
||||
<property name="editable">True</property>
|
||||
</object>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
<attribute name="text">1</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
|
@ -689,9 +684,11 @@ along with Manuskript. If not, see <http://www.gnu.org/licenses/>.
|
|||
<object class="GtkTreeViewColumn">
|
||||
<property name="title" translatable="yes">Meta</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText"/>
|
||||
<object class="GtkCellRendererText" id="resolution_steps_meta">
|
||||
<property name="editable">True</property>
|
||||
</object>
|
||||
<attributes>
|
||||
<attribute name="text">1</attribute>
|
||||
<attribute name="text">2</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
|
|
Loading…
Reference in a new issue