Skip to content

Commit b1c2914

Browse files
committed
node creation emit signals from undo #373
1 parent 89d07db commit b1c2914

File tree

2 files changed

+22
-11
lines changed

2 files changed

+22
-11
lines changed

NodeGraphQt/base/commands.py

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -165,30 +165,38 @@ class NodeAddedCmd(QtWidgets.QUndoCommand):
165165
graph (NodeGraphQt.NodeGraph): node graph.
166166
node (NodeGraphQt.NodeObject): node.
167167
pos (tuple(float, float)): initial node position (optional).
168+
emit_signal (bool): emit node creation signals. (default: True)
168169
"""
169170

170-
def __init__(self, graph, node, pos=None):
171+
def __init__(self, graph, node, pos=None, emit_signal=True):
171172
QtWidgets.QUndoCommand.__init__(self)
172173
self.setText('added node')
173-
self.viewer = graph.viewer()
174-
self.model = graph.model
174+
self.graph = graph
175175
self.node = node
176176
self.pos = pos
177+
self.emit_signal = emit_signal
177178

178179
def undo(self):
180+
node_id = self.node.id
179181
self.pos = self.pos or self.node.pos()
180-
self.model.nodes.pop(self.node.id)
182+
self.graph.model.nodes.pop(self.node.id)
181183
self.node.view.delete()
182184

185+
if self.emit_signal:
186+
self.graph.nodes_deleted.emit([node_id])
187+
183188
def redo(self):
184-
self.model.nodes[self.node.id] = self.node
185-
self.viewer.add_node(self.node.view, self.pos)
189+
self.graph.model.nodes[self.node.id] = self.node
190+
self.graph.viewer().add_node(self.node.view, self.pos)
186191

187192
# node width & height is calculated when it's added to the scene,
188193
# so we have to update the node model here.
189194
self.node.model.width = self.node.view.width
190195
self.node.model.height = self.node.view.height
191196

197+
if self.emit_signal:
198+
self.graph.node_created.emit(self.node)
199+
192200

193201
class NodeRemovedCmd(QtWidgets.QUndoCommand):
194202
"""

NodeGraphQt/base/graph.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1255,7 +1255,9 @@ def format_color(clr):
12551255

12561256
node.update()
12571257

1258-
undo_cmd = NodeAddedCmd(self, node, node.model.pos)
1258+
undo_cmd = NodeAddedCmd(
1259+
self, node, pos=node.model.pos, emit_signal=True
1260+
)
12591261
if push_undo:
12601262
undo_label = 'create node: "{}"'.format(node.NODE_NAME)
12611263
self._undo_stack.beginMacro(undo_label)
@@ -1266,10 +1268,10 @@ def format_color(clr):
12661268
else:
12671269
for n in self.selected_nodes():
12681270
n.set_property('selected', False, push_undo=False)
1269-
NodeAddedCmd(self, node, node.model.pos).redo()
1271+
undo_cmd.redo()
12701272

1271-
self.node_created.emit(node)
12721273
return node
1274+
12731275
raise NodeCreationError('Can\'t find node: "{}"'.format(node_type))
12741276

12751277
def add_node(self, node, pos=None, selected=True, push_undo=True):
@@ -1341,14 +1343,15 @@ def add_node(self, node, pos=None, selected=True, push_undo=True):
13411343
# update method must be called before it's been added to the viewer.
13421344
node.update()
13431345

1346+
undo_cmd = NodeAddedCmd(self, node, pos=pos, emit_signal=False)
13441347
if push_undo:
13451348
self._undo_stack.beginMacro('add node: "{}"'.format(node.name()))
1346-
self._undo_stack.push(NodeAddedCmd(self, node, pos))
1349+
self._undo_stack.push(undo_cmd)
13471350
if selected:
13481351
node.set_selected(True)
13491352
self._undo_stack.endMacro()
13501353
else:
1351-
NodeAddedCmd(self, node, pos).redo()
1354+
undo_cmd.redo()
13521355

13531356
def delete_node(self, node, push_undo=True):
13541357
"""

0 commit comments

Comments
 (0)