Skip to content

Commit 30fa259

Browse files
authored
Merge pull request #98 from jchanvfx/node_prop_bug_#97
addressed deserialize node bug.
2 parents 88c2285 + 2779549 commit 30fa259

File tree

5 files changed

+20
-26
lines changed

5 files changed

+20
-26
lines changed

NodeGraphQt/base/commands.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ def update_prop_bin(self, name, value):
6161
prop_wgt = properties_wgt.get_widget(name)
6262
# check if previous value is identical to current value,
6363
# prevent signals from causing a infinite loop.
64-
if prop_wgt.get_value() != value:
64+
if prop_wgt and prop_wgt.get_value() != value:
6565
prop_wgt.set_value(value)
6666

6767
def undo(self):
@@ -161,6 +161,8 @@ def undo(self):
161161
[port.connect_to(p) for p in connected_ports]
162162

163163
def redo(self):
164+
self.graph.properties_bin().remove_node(self.node)
165+
164166
for port, connected_ports in self.inputs:
165167
[port.disconnect_from(p) for p in connected_ports]
166168
for port, connected_ports in self.outputs:

NodeGraphQt/base/graph.py

Lines changed: 14 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -424,12 +424,13 @@ def create_node(self, node_type, name=None, selected=True, color=None, pos=None)
424424
return node
425425
raise Exception('\n\n>> Cannot find node:\t"{}"\n'.format(node_type))
426426

427-
def add_node(self, node):
427+
def add_node(self, node, pos=None):
428428
"""
429429
Add a node into the node graph.
430430
431431
Args:
432432
node (NodeGraphQt.Node): node object.
433+
pos (list[float]): node x,y position. (optional)
433434
"""
434435
assert isinstance(node, NodeObject), 'node must be a Node instance.'
435436

@@ -449,7 +450,7 @@ def add_node(self, node):
449450
node.model._graph_model = self.model
450451
node.model.name = node.NODE_NAME
451452
node.update()
452-
self._undo_stack.push(NodeAddedCmd(self, node))
453+
self._undo_stack.push(NodeAddedCmd(self, node, pos))
453454

454455
def delete_node(self, node):
455456
"""
@@ -651,27 +652,17 @@ def _deserialize(self, data, relative_pos=False, pos=None):
651652
NodeCls = self._node_factory.create_node_instance(identifier)
652653
if NodeCls:
653654
node = NodeCls()
654-
node._graph = self
655-
656-
name = self.get_unique_name(n_data.get('name', node.NODE_NAME))
657-
n_data['name'] = name
658-
655+
node.NODE_NAME = n_data.get('name', node.NODE_NAME)
659656
# set properties.
660-
for prop, val in node.model.properties.items():
657+
for prop in node.model.properties.keys():
661658
if prop in n_data.keys():
662-
setattr(node.model, prop, n_data[prop])
663-
659+
node.model.set_property(prop, n_data[prop])
664660
# set custom properties.
665661
for prop, val in n_data.get('custom', {}).items():
666-
if prop in node.model.custom_properties.keys():
667-
node.model.custom_properties[prop] = val
668-
669-
node.update()
662+
node.model.set_property(prop, val)
670663

671-
self._undo_stack.push(
672-
NodeAddedCmd(self, node, n_data.get('pos'))
673-
)
674664
nodes[n_id] = node
665+
self.add_node(node, n_data.get('pos'))
675666

676667
# build the connections.
677668
for connection in data.get('connections', []):
@@ -693,9 +684,10 @@ def _deserialize(self, data, relative_pos=False, pos=None):
693684
node_objs = list(nodes.values())
694685
if relative_pos:
695686
self._viewer.move_nodes([n.view for n in node_objs])
696-
[setattr(n.model, 'pos', n.view.pos) for n in node_objs]
687+
[setattr(n.model, 'pos', n.view.xy_pos) for n in node_objs]
697688
elif pos:
698689
self._viewer.move_nodes([n.view for n in node_objs], pos=pos)
690+
[setattr(n.model, 'pos', n.view.xy_pos) for n in node_objs]
699691

700692
return node_objs
701693

@@ -770,14 +762,14 @@ def paste_nodes(self):
770762
Pastes nodes copied from the clipboard.
771763
"""
772764
clipboard = QtWidgets.QApplication.clipboard()
773-
cb_string = clipboard.text()
774-
if not cb_string:
765+
cb_text = clipboard.text()
766+
if not cb_text:
775767
return
776768

777769
self._undo_stack.beginMacro('pasted nodes')
778-
serial_data = json.loads(cb_string)
770+
serial_data = json.loads(cb_text)
779771
self.clear_selection()
780-
nodes = self._deserialize(serial_data, True)
772+
nodes = self._deserialize(serial_data, relative_pos=True)
781773
[n.set_selected(True) for n in nodes]
782774
self._undo_stack.endMacro()
783775

NodeGraphQt/base/node.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ def __get__(self, instance, owner):
2222

2323
class NodeObject(object):
2424
"""
25-
base skeleton class for all node objects.
25+
base class for all node objects.
2626
2727
Args:
2828
node (AbstractNodeItem): graphic item used for drawing.

NodeGraphQt/widgets/node_abstract.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
class AbstractNodeItem(QtWidgets.QGraphicsItem):
88
"""
9-
The abstract base class of a node.
9+
The abstract base class of a node item.
1010
"""
1111

1212
def __init__(self, name='node', parent=None):

NodeGraphQt/widgets/node_backdrop.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
class BackdropSizer(QtWidgets.QGraphicsItem):
1313
"""
14-
Sizer item for resizing a backdrop node.
14+
Sizer item for resizing a backdrop item.
1515
1616
Args:
1717
parent (BackdropNodeItem): the parent node item.

0 commit comments

Comments
 (0)