@@ -52,23 +52,29 @@ def __init__(self, parent=None):
5252class PropertiesBinWidget (QtWidgets .QWidget ):
5353 """
5454 Node properties bin for displaying properties.
55+
56+ Args:
57+ parent (QtWidgets.QWidget): parent object.
58+ node_graph (NodeGraphQt.NodeGraph): node graph.
5559 """
5660
5761 #: Signal emitted (node_id, prop_name, prop_value)
5862 property_changed = QtCore .Signal (str , str , object )
5963
60- def __init__ (self , parent = None ):
64+ def __init__ (self , parent = None , node_graph = None ):
6165 super (PropertiesBinWidget , self ).__init__ (parent )
6266 self .setWindowTitle ('Properties Bin' )
6367 self ._prop_list = PropertiesList ()
6468 self ._limit = QtWidgets .QSpinBox ()
65- self ._limit .setToolTip ('Set node limit to display .' )
69+ self ._limit .setToolTip ('Set display nodes limit .' )
6670 self ._limit .setMaximum (10 )
6771 self ._limit .setMinimum (0 )
6872 self ._limit .setValue (5 )
6973 self ._limit .valueChanged .connect (self .__on_limit_changed )
7074 self .resize (400 , 400 )
7175
76+ self ._block_signal = False
77+
7278 btn_clr = QtWidgets .QPushButton ('clear' )
7379 btn_clr .setToolTip ('Clear the properties bin.' )
7480 btn_clr .clicked .connect (self .clear_bin )
@@ -82,6 +88,11 @@ def __init__(self, parent=None):
8288 layout .addLayout (top_layout )
8389 layout .addWidget (self ._prop_list , 1 )
8490
91+ # wire up node graph.
92+ node_graph .add_properties_bin (self )
93+ node_graph .node_double_clicked .connect (self .add_node )
94+ node_graph .property_changed .connect (self .__on_graph_property_changed )
95+
8596 def __repr__ (self ):
8697 return '<{} object at {}>' .format (self .__class__ .__name__ , hex (id (self )))
8798
@@ -94,6 +105,37 @@ def __on_limit_changed(self, value):
94105 if rows > value :
95106 self ._prop_list .removeRow (rows - 1 )
96107
108+ def __on_graph_property_changed (self , node , prop_name , prop_value ):
109+ """
110+ Slot function that updates the property bin from the node graph signal.
111+
112+ Args:
113+ node (NodeGraphQt.NodeObject):
114+ prop_name (str):
115+ prop_value (object):
116+ """
117+ properties_widget = self .prop_widget (node )
118+ if not properties_widget :
119+ return
120+
121+ property_window = properties_widget .get_widget (prop_name )
122+ if prop_value != property_window .get_value ():
123+ self ._block_signal = True
124+ property_window .set_value (prop_value )
125+ self ._block_signal = False
126+
127+ def __on_property_widget_changed (self , node_id , prop_name , prop_value ):
128+ """
129+ Slot function triggered when a property widget value has changed.
130+
131+ Args:
132+ node_id (str):
133+ prop_name (str):
134+ prop_value (object):
135+ """
136+ if not self ._block_signal :
137+ self .property_changed .emit (node_id , prop_name , prop_value )
138+
97139 def limit (self ):
98140 """
99141 Returns the limit for how many nodes can be loaded into the bin.
@@ -132,7 +174,7 @@ def add_node(self, node):
132174
133175 self ._prop_list .insertRow (0 )
134176 prop_widget = NodePropWidget (node = node )
135- prop_widget .property_changed .connect (self .property_changed . emit )
177+ prop_widget .property_changed .connect (self .__on_property_widget_changed )
136178 prop_widget .property_closed .connect (self .__on_prop_close )
137179 self ._prop_list .setCellWidget (0 , 0 , prop_widget )
138180
0 commit comments