1515from NodeGraphQt .base .node import NodeObject
1616from NodeGraphQt .base .port import Port
1717from NodeGraphQt .constants import DRAG_DROP_ID
18- from NodeGraphQt .widgets .node_tree import NodeTreeWidget
19- from NodeGraphQt .widgets .properties_bin import PropertiesBinWidget
2018from NodeGraphQt .widgets .viewer import NodeViewer
2119
2220
2321class NodeGraph (QtCore .QObject ):
2422 """
2523 base node graph controller.
26-
27- Args:
28- tab_search_key(str): hotkey for the tab search widget (default: "tab").
2924 """
3025
3126 #: signal for when a node has been created in the node graph.
@@ -49,9 +44,6 @@ def __init__(self, parent=None):
4944 self ._node_factory = NodeFactory ()
5045 self ._undo_stack = QtWidgets .QUndoStack (self )
5146
52- self ._properties_bin = None
53- self ._nodes_tree = None
54-
5547 tab = QtWidgets .QAction ('Search Nodes' , self )
5648 tab .setShortcut ('tab' )
5749 tab .triggered .connect (self ._toggle_tab_search )
@@ -80,9 +72,9 @@ def _toggle_tab_search(self):
8072 self ._viewer .tab_search_set_nodes (self ._node_factory .names )
8173 self ._viewer .tab_search_toggle ()
8274
83- def _on_property_changed (self , node_id , prop_name , prop_value ):
75+ def _on_property_bin_changed (self , node_id , prop_name , prop_value ):
8476 """
85- called when a property widget has changed in the properties bin.
77+ called when a property widget has changed in a properties bin.
8678 (emits the node object, property name, property value)
8779
8880 Args:
@@ -91,8 +83,10 @@ def _on_property_changed(self, node_id, prop_name, prop_value):
9183 prop_value (object): python object.
9284 """
9385 node = self .get_node_by_id (node_id )
94- node .set_property (prop_name , prop_value )
95- self .property_changed .emit (node , prop_name , prop_value )
86+
87+ # prevent signals from causing a infinite loop.
88+ if node .get_property (prop_name ) != prop_value :
89+ node .set_property (prop_name , prop_value )
9690
9791 def _on_node_double_clicked (self , node_id ):
9892 """
@@ -103,9 +97,6 @@ def _on_node_double_clicked(self, node_id):
10397 node_id (str): node id emitted by the viewer.
10498 """
10599 node = self .get_node_by_id (node_id )
106- if self ._properties_bin :
107- self ._properties_bin .add_node (node )
108-
109100 self .node_double_clicked .emit (node )
110101
111102 def _on_node_selected (self , node_id ):
@@ -237,32 +228,63 @@ def scene(self):
237228 """
238229 return self ._viewer .scene ()
239230
240- def properties_bin (self ):
231+ def background_color (self ):
241232 """
242- Initializes the node properties bin widget when first called .
233+ Return the node graph background color .
243234
244235 Returns:
245- PropBinWidget: the initialized widget.
236+ tuple: r, g ,b
237+ """
238+ return self .scene ().background_color
239+
240+ def set_background_color (self , r , g , b ):
246241 """
247- if self ._properties_bin is None :
248- self ._properties_bin = PropertiesBinWidget ()
249- # wire up widget.
250- self ._properties_bin .property_changed .connect (
251- self ._on_property_changed
252- )
253- return self ._properties_bin
242+ Set node graph background color.
254243
255- def nodes_tree (self ):
244+ Args:
245+ r (int): red value.
246+ g (int): green value.
247+ b (int): blue value.
248+ """
249+ self .scene ().background_color = (r , g , b )
250+
251+ def grid_color (self ):
256252 """
257- Initializes the nodes list widget when first called .
253+ Return the node graph grid color .
258254
259255 Returns:
260- NodeTreeWidget: the initialized widget.
256+ tuple: r, g ,b
257+ """
258+ return self .scene ().grid_color
259+
260+ def set_grid_color (self , r , g , b ):
261+ """
262+ Set node graph grid color.
263+
264+ Args:
265+ r (int): red value.
266+ g (int): green value.
267+ b (int): blue value.
268+ """
269+ self .scene ().grid_color = (r , g , b )
270+
271+ def display_grid (self , display = True ):
272+ """
273+ Display node graph background grid.
274+
275+ Args:
276+ display: False to not draw the background grid.
277+ """
278+ self .scene ().grid = display
279+
280+ def add_properties_bin (self , prop_bin ):
281+ """
282+ Wire up a properties bin widget to the node graph.
283+
284+ Args:
285+ prop_bin (NodeGraphQt.PropertiesBinWidget): properties widget.
261286 """
262- if self ._nodes_tree is None :
263- self ._nodes_tree = NodeTreeWidget ()
264- self ._nodes_tree .set_node_factory (self ._node_factory )
265- return self ._nodes_tree
287+ prop_bin .property_changed .connect (self ._on_property_bin_changed )
266288
267289 def undo_stack (self ):
268290 """
@@ -315,12 +337,12 @@ def acyclic(self):
315337 """
316338 return self ._model .acyclic
317339
318- def set_acyclic (self , mode = True ):
340+ def set_acyclic (self , mode = False ):
319341 """
320- Set the node graph to be acyclic or not . (default=True )
342+ Enable the node graph to be a acyclic graph . (default=False )
321343
322344 Args:
323- mode (bool): false to disable acyclic.
345+ mode (bool): true to enable acyclic.
324346 """
325347 self ._model .acyclic = mode
326348 self ._viewer .acyclic = mode
0 commit comments