11#!/usr/bin/python
2- from PySide2 . QtWidgets import QUndoCommand
2+ from NodeGraphQt import QtWidgets
33
44from NodeGraphQt .constants import IN_PORT , OUT_PORT
55
66
7- class PropertyChangedCmd (QUndoCommand ):
7+ class PropertyChangedCmd (QtWidgets . QUndoCommand ):
88 """
99 Node property changed command.
1010
@@ -15,29 +15,33 @@ class PropertyChangedCmd(QUndoCommand):
1515 """
1616
1717 def __init__ (self , node , name , value ):
18- QUndoCommand .__init__ (self )
19- self .setText ('set {} ({})' .format (name , node .name ()))
18+ QtWidgets .QUndoCommand .__init__ (self )
19+ if name == 'name' :
20+ self .setText ('renamed "{}" to "{}"' .format (node .name (), value ))
21+ else :
22+ self .setText ('property "{}:{}"' .format (node .name (), name ))
2023 self .node = node
2124 self .name = name
2225 self .old_val = node .get_property (name )
2326 self .new_val = value
2427
2528 def set_node_prop (self , name , value ):
29+ """
30+ updates the node view and model.
31+ """
2632 # set model data.
2733 model = self .node .model
28- if name in model .properties .keys ():
29- setattr (model , name , value )
30- elif name in model .custom_properties .keys ():
31- model .custom_properties [name ] = value
32- else :
33- raise KeyError ('No property "{}"' .format (name ))
34+ model .set_property (name , value )
3435
3536 # set view data.
3637 view = self .node .view
3738
3839 # view widgets.
3940 if hasattr (view , 'widgets' ) and name in view .widgets .keys ():
40- view .widgets [name ].value = value
41+ # check if previous value is identical to current value,
42+ # prevent signals from causing a infinite loop.
43+ if view .widgets [name ].value != value :
44+ view .widgets [name ].value = value
4145
4246 # view properties.
4347 if name in view .properties .keys ():
@@ -46,16 +50,32 @@ def set_node_prop(self, name, value):
4650 name = 'xy_pos'
4751 setattr (view , name , value )
4852
53+ def update_prop_bin (self , name , value ):
54+ """
55+ updates the property bin widget.
56+ """
57+ graph = self .node .graph
58+ prop_bin = graph .properties_bin ()
59+ properties_wgt = prop_bin .prop_widget (self .node )
60+ if properties_wgt :
61+ prop_wgt = properties_wgt .get_widget (name )
62+ # check if previous value is identical to current value,
63+ # prevent signals from causing a infinite loop.
64+ if prop_wgt .get_value () != value :
65+ prop_wgt .set_value (value )
66+
4967 def undo (self ):
5068 if self .old_val != self .new_val :
5169 self .set_node_prop (self .name , self .old_val )
70+ self .update_prop_bin (self .name , self .old_val )
5271
5372 def redo (self ):
5473 if self .old_val != self .new_val :
5574 self .set_node_prop (self .name , self .new_val )
75+ self .update_prop_bin (self .name , self .new_val )
5676
5777
58- class NodeMovedCmd (QUndoCommand ):
78+ class NodeMovedCmd (QtWidgets . QUndoCommand ):
5979 """
6080 Node moved command.
6181
@@ -66,7 +86,7 @@ class NodeMovedCmd(QUndoCommand):
6686 """
6787
6888 def __init__ (self , node , pos , prev_pos ):
69- QUndoCommand .__init__ (self )
89+ QtWidgets . QUndoCommand .__init__ (self )
7090 self .node = node
7191 self .pos = pos
7292 self .prev_pos = prev_pos
@@ -82,7 +102,7 @@ def redo(self):
82102 self .node .model .pos = self .pos
83103
84104
85- class NodeAddedCmd (QUndoCommand ):
105+ class NodeAddedCmd (QtWidgets . QUndoCommand ):
86106 """
87107 Node added command.
88108
@@ -93,7 +113,7 @@ class NodeAddedCmd(QUndoCommand):
93113 """
94114
95115 def __init__ (self , graph , node , pos = None ):
96- QUndoCommand .__init__ (self )
116+ QtWidgets . QUndoCommand .__init__ (self )
97117 self .setText ('added node' )
98118 self .graph = graph
99119 self .node = node
@@ -109,7 +129,7 @@ def redo(self):
109129 self .graph .viewer ().add_node (self .node .view , self .pos )
110130
111131
112- class NodeRemovedCmd (QUndoCommand ):
132+ class NodeRemovedCmd (QtWidgets . QUndoCommand ):
113133 """
114134 Node deleted command.
115135
@@ -119,7 +139,7 @@ class NodeRemovedCmd(QUndoCommand):
119139 """
120140
121141 def __init__ (self , graph , node ):
122- QUndoCommand .__init__ (self )
142+ QtWidgets . QUndoCommand .__init__ (self )
123143 self .setText ('deleted node' )
124144 self .graph = graph
125145 self .node = node
@@ -149,7 +169,7 @@ def redo(self):
149169 self .node .view .delete ()
150170
151171
152- class PortConnectedCmd (QUndoCommand ):
172+ class PortConnectedCmd (QtWidgets . QUndoCommand ):
153173 """
154174 Port connected command.
155175
@@ -159,7 +179,7 @@ class PortConnectedCmd(QUndoCommand):
159179 """
160180
161181 def __init__ (self , src_port , trg_port ):
162- QUndoCommand .__init__ (self )
182+ QtWidgets . QUndoCommand .__init__ (self )
163183 self .source = src_port
164184 self .target = trg_port
165185
@@ -195,7 +215,7 @@ def redo(self):
195215 self .source .view .connect_to (self .target .view )
196216
197217
198- class PortDisconnectedCmd (QUndoCommand ):
218+ class PortDisconnectedCmd (QtWidgets . QUndoCommand ):
199219 """
200220 Port disconnected command.
201221
@@ -205,7 +225,7 @@ class PortDisconnectedCmd(QUndoCommand):
205225 """
206226
207227 def __init__ (self , src_port , trg_port ):
208- QUndoCommand .__init__ (self )
228+ QtWidgets . QUndoCommand .__init__ (self )
209229 self .source = src_port
210230 self .target = trg_port
211231
@@ -241,7 +261,7 @@ def redo(self):
241261 self .source .view .disconnect_from (self .target .view )
242262
243263
244- class PortVisibleCmd (QUndoCommand ):
264+ class PortVisibleCmd (QtWidgets . QUndoCommand ):
245265 """
246266 Port visibility command.
247267
@@ -250,7 +270,7 @@ class PortVisibleCmd(QUndoCommand):
250270 """
251271
252272 def __init__ (self , port ):
253- QUndoCommand .__init__ (self )
273+ QtWidgets . QUndoCommand .__init__ (self )
254274 self .port = port
255275 self .visible = port .visible ()
256276
@@ -259,9 +279,9 @@ def set_visible(self, visible):
259279 self .port .view .setVisible (visible )
260280 node_view = self .port .node ().view
261281 text_item = None
262- if self .port .type () == IN_PORT :
282+ if self .port .type_ () == IN_PORT :
263283 text_item = node_view .get_input_text_item (self .port .view )
264- elif self .port .type () == OUT_PORT :
284+ elif self .port .type_ () == OUT_PORT :
265285 text_item = node_view .get_output_text_item (self .port .view )
266286 if text_item :
267287 text_item .setVisible (visible )
0 commit comments