diff --git a/manuskript/data/labels.py b/manuskript/data/labels.py index d708516..1267365 100644 --- a/manuskript/data/labels.py +++ b/manuskript/data/labels.py @@ -32,7 +32,7 @@ class LabelHost: self.file = MmdFile(os.path.join(path, "labels.txt"), 21) self.labels = collections.OrderedDict() - def addLabel(self, name: str = None, color: Color = None): + def addLabel(self, name: str = None, color: Color = None) -> Label: if name is None: name = "New Label" @@ -40,18 +40,44 @@ class LabelHost: self.labels[name] = label return label - def removeLabel(self, name: str): - self.labels.pop(name) + def removeLabel(self, name: str) -> Label: + return self.labels.pop(name) def renameLabel(self, oldName: str, newName: str): - label = self.labels.get(oldName) - label.name = newName - self.labels[newName] = label - self.labels.pop(oldName) + match = False + drop = [oldName] - def getLabel(self, name: str): + for name, label in self.labels.items(): + if match: + drop.append(name) + elif name == oldName: + label.name = newName + match = True + + if not match: + return + + labels = list() + for name in drop: + labels.append(self.labels.pop(name)) + + for label in labels: + self.labels[label.name] = label + + def getLabel(self, name: str) -> Label: return self.labels.get(name) + def getLabelByID(self, id: int) -> Label | None: + index = 0 + + for label in self.labels.values(): + if index == id: + return label + + index += 1 + + return None + def __iter__(self): return self.labels.values().__iter__() diff --git a/manuskript/data/status.py b/manuskript/data/status.py index cc5c54c..ccf8d8b 100644 --- a/manuskript/data/status.py +++ b/manuskript/data/status.py @@ -30,7 +30,7 @@ class StatusHost: self.file = TextFile(os.path.join(path, "status.txt")) self.statuses = collections.OrderedDict() - def addStatus(self, name: str = None): + def addStatus(self, name: str = None) -> Status: if name is None: name = "New Status" @@ -38,18 +38,44 @@ class StatusHost: self.statuses[name] = status return status - def removeStatus(self, name: str): - self.statuses.pop(name) + def removeStatus(self, name: str) -> Status: + return self.statuses.pop(name) def renameStatus(self, oldName: str, newName: str): - status = self.statuses.get(oldName) - status.name = newName - self.statuses[newName] = status - self.statuses.pop(oldName) + match = False + drop = [oldName] - def getStatus(self, name: str): + for name, status in self.statuses.items(): + if match: + drop.append(name) + elif name == oldName: + status.name = newName + match = True + + if not match: + return + + statuses = list() + for name in drop: + statuses.append(self.statuses.pop(name)) + + for status in statuses: + self.statuses[status.name] = status + + def getStatus(self, name: str) -> Status: return self.statuses.get(name) + def getStatusByID(self, id: int) -> Status | None: + index = 0 + + for status in self.statuses.values(): + if index == id: + return status + + index += 1 + + return None + def __iter__(self): return self.statuses.values().__iter__() diff --git a/manuskript/ui/settings/labelsPage.py b/manuskript/ui/settings/labelsPage.py index 2d8ef23..88e8b29 100644 --- a/manuskript/ui/settings/labelsPage.py +++ b/manuskript/ui/settings/labelsPage.py @@ -39,6 +39,9 @@ class LabelsPage: self.colorButton = builder.get_object("color") self.colorButton.connect("color-set", self.colorSet) + self.labelNameRenderer = builder.get_object("label_name") + self.labelNameRenderer.connect("edited", self.labelNameEdited) + self.unloadLabelData() def refreshLabelStore(self): @@ -129,3 +132,17 @@ class LabelsPage: if row[0] == character_name: row[1] = pixbufFromColor(color) break + + def labelNameEdited(self, renderer: Gtk.CellRendererText, path: str, text: str): + if self.label is None: + return + + model, tree_iter = self.labelSelection.get_selected() + + if (model is None) or (tree_iter is None): + return + + name = model.get_value(tree_iter, 0) + model.set_value(tree_iter, 0, text) + + self.labels.renameLabel(name, text) diff --git a/manuskript/ui/settings/statusPage.py b/manuskript/ui/settings/statusPage.py index c6c991d..8fcc8b3 100644 --- a/manuskript/ui/settings/statusPage.py +++ b/manuskript/ui/settings/statusPage.py @@ -35,6 +35,9 @@ class StatusPage: self.addButton.connect("clicked", self.addClicked) self.removeButton.connect("clicked", self.removeClicked) + self.statusNameRenderer = builder.get_object("status_name") + self.statusNameRenderer.connect("edited", self.statusNameEdited) + self.unloadStatusData() def refreshStatusStore(self): @@ -94,3 +97,18 @@ class StatusPage: model.remove(tree_iter) self.statuses.removeStatus(name) + + def statusNameEdited(self, renderer: Gtk.CellRendererText, path: str, text: str): + if self.status is None: + return + + model, tree_iter = self.statusSelection.get_selected() + + if (model is None) or (tree_iter is None): + return + + name = model.get_value(tree_iter, 0) + model.set_value(tree_iter, 0, text) + + self.statuses.renameStatus(name, text) + diff --git a/ui/settings/labels.glade b/ui/settings/labels.glade index b1b46ac..8cdf9d0 100644 --- a/ui/settings/labels.glade +++ b/ui/settings/labels.glade @@ -93,7 +93,9 @@ along with Manuskript. If not, see . - + + True + 0 diff --git a/ui/settings/status.glade b/ui/settings/status.glade index 2983edf..3d2efc6 100644 --- a/ui/settings/status.glade +++ b/ui/settings/status.glade @@ -80,7 +80,9 @@ along with Manuskript. If not, see . - + + True + 0