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 .
-
+
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 .