|
2 | 2 | from collections.abc import Iterable |
3 | 3 | import logging |
4 | 4 | import os |
| 5 | +import re |
5 | 6 | import json |
6 | 7 | from enum import Enum |
7 | 8 | from threading import Thread, Event, Lock |
@@ -939,6 +940,32 @@ def addNewNode(self, nodeType, position=None, **kwargs): |
939 | 940 | position = Position(position.x(), position.y()) |
940 | 941 | return self.push(commands.AddNodeCommand(self._graph, nodeType, position=position, **kwargs)) |
941 | 942 |
|
| 943 | + @Slot(Node, str, result=str) |
| 944 | + def renameNode(self, node: Node, newName: str): |
| 945 | + """ Triggers the node renaming. |
| 946 | + |
| 947 | + In this function the last `_N` index is removed, then all special characters |
| 948 | + (everything except letters and numbers) are removed. |
| 949 | + The name uniqueness will be ensured later by adding a suffix (e.g. `_1`, `_2`, ...) |
| 950 | + |
| 951 | + Labels can be used to have special characters in the displayed name. |
| 952 | +
|
| 953 | + Args: |
| 954 | + node (Node): Node to rename. |
| 955 | + newName (str): New name to set. |
| 956 | +
|
| 957 | + Returns: |
| 958 | + str: The final name of the node. |
| 959 | + """ |
| 960 | + newName = "_".join(newName.split("_")[:-1]) if "_" in newName else newName |
| 961 | + # Eliminate all characters except digits and letters |
| 962 | + newName = re.sub(r"[^0-9a-zA-Z]", "", newName) |
| 963 | + # Create unique name |
| 964 | + uniqueName = self._graph._createUniqueNodeName(newName, {n._name for n in self._graph._nodes if n != node}) |
| 965 | + if not newName or uniqueName == node._name: |
| 966 | + return "" |
| 967 | + return self.push(commands.RenameNodeCommand(self._graph, node, uniqueName)) |
| 968 | + |
942 | 969 | def moveNode(self, node: Node, position: Position): |
943 | 970 | """ |
944 | 971 | Move `node` to the given `position`. |
|
0 commit comments