Skip to content

Commit 10a416e

Browse files
authored
Merge pull request #248 from jchanvfx/group_node
Group Node / Sub Graph system
2 parents eaa9b89 + d1d867a commit 10a416e

File tree

109 files changed

+4789
-13232
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

109 files changed

+4789
-13232
lines changed

NodeGraphQt/__init__.py

Lines changed: 16 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -72,52 +72,45 @@ def __init__(self):
7272
7373
app.exec_()
7474
"""
75+
from .pkg_info import __version__ as VERSION
76+
from .pkg_info import __license__ as LICENSE
7577

78+
# node graph
7679
from .base.graph import NodeGraph, SubGraph
7780
from .base.menu import NodesMenu, NodeGraphMenu, NodeGraphCommand
78-
from .base.node import NodeObject, BaseNode, BackdropNode
79-
from .base.port import Port
80-
from .pkg_info import __version__ as VERSION
81-
from .pkg_info import __license__ as LICENSE
8281

83-
# functions
84-
from .base.utils import setup_context_menu, \
85-
topological_sort_by_up, topological_sort_by_down, \
86-
update_node_down_stream, update_node_up_stream,\
87-
update_nodes_by_up, update_nodes_by_down
82+
# nodes & ports
83+
from .base.port import Port
84+
from .base.node import NodeObject
85+
from .nodes.base_node import BaseNode
86+
from .nodes.backdrop_node import BackdropNode
87+
from .nodes.group_node import GroupNode
8888

8989
# widgets
90-
from .widgets.nodes_tree import NodeTreeWidget
91-
from .widgets.nodes_palette import NodesPaletteWidget
92-
from .widgets.properties_bin import PropertiesBinWidget
93-
from .widgets.node_publish_widget import NodePublishWidget
9490
from .widgets.node_widgets import NodeBaseWidget
91+
from .custom_widgets.nodes_tree import NodesTreeWidget
92+
from .custom_widgets.nodes_palette import NodesPaletteWidget
93+
from .custom_widgets.properties_bin import PropertiesBinWidget
9594

9695

9796
__version__ = VERSION
9897
__all__ = [
9998
'BackdropNode',
10099
'BaseNode',
100+
'GroupNode',
101101
'LICENSE',
102102
'NodeBaseWidget',
103103
'NodeGraph',
104104
'NodeGraphCommand',
105105
'NodeGraphMenu',
106106
'NodeObject',
107107
'NodesPaletteWidget',
108-
'NodeTreeWidget',
108+
'NodesTreeWidget',
109109
'NodesMenu',
110110
'Port',
111111
'PropertiesBinWidget',
112+
'SubGraph',
112113
'VERSION',
113114
'constants',
114-
'setup_context_menu',
115-
'NodePublishWidget',
116-
'SubGraph',
117-
'topological_sort_by_up',
118-
'topological_sort_by_down',
119-
'update_node_up_stream',
120-
'update_node_down_stream',
121-
'update_nodes_by_up',
122-
'update_nodes_by_down',
115+
'custom_widgets'
123116
]

NodeGraphQt/base/commands.py

Lines changed: 5 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
#!/usr/bin/python
22
from Qt import QtWidgets
33

4-
from .utils import minimize_node_ref_count
5-
from ..constants import IN_PORT, OUT_PORT
4+
from NodeGraphQt.constants import IN_PORT, OUT_PORT
65

76

87
class PropertyChangedCmd(QtWidgets.QUndoCommand):
@@ -52,29 +51,15 @@ def set_node_prop(self, name, value):
5251
setattr(view, name, value)
5352

5453
def undo(self):
55-
do_undo = False
56-
try:
57-
if self.old_val != self.new_val:
58-
do_undo = True
59-
except:
60-
do_undo = True
61-
62-
if do_undo:
54+
if self.old_val != self.new_val:
6355
self.set_node_prop(self.name, self.old_val)
6456

6557
# emit property changed signal.
6658
graph = self.node.graph
6759
graph.property_changed.emit(self.node, self.name, self.old_val)
6860

6961
def redo(self):
70-
do_redo = False
71-
try:
72-
if self.old_val != self.new_val:
73-
do_redo = True
74-
except:
75-
do_redo = True
76-
77-
if do_redo:
62+
if self.old_val != self.new_val:
7863
self.set_node_prop(self.name, self.new_val)
7964

8065
# emit property changed signal.
@@ -126,17 +111,15 @@ def __init__(self, graph, node, pos=None):
126111
self.model = graph.model
127112
self.node = node
128113
self.pos = pos
129-
self.node_parent = node.parent()
130114

131115
def undo(self):
132116
self.pos = self.pos or self.node.pos()
133117
self.model.nodes.pop(self.node.id)
134-
self.node.delete()
118+
self.node.view.delete()
135119

136120
def redo(self):
137121
self.model.nodes[self.node.id] = self.node
138122
self.viewer.add_node(self.node.view, self.pos)
139-
self.node.set_parent(self.node_parent)
140123

141124

142125
class NodeRemovedCmd(QtWidgets.QUndoCommand):
@@ -154,19 +137,14 @@ def __init__(self, graph, node):
154137
self.scene = graph.scene()
155138
self.model = graph.model
156139
self.node = node
157-
self.node_parent = node.parent()
158140

159141
def undo(self):
160142
self.model.nodes[self.node.id] = self.node
161143
self.scene.addItem(self.node.view)
162-
self.node.set_parent(self.node_parent)
163144

164145
def redo(self):
165146
self.model.nodes.pop(self.node.id)
166-
self.node.delete()
167-
168-
def __del__(self):
169-
minimize_node_ref_count(self.node)
147+
self.node.view.delete()
170148

171149

172150
class NodeInputConnectedCmd(QtWidgets.QUndoCommand):

NodeGraphQt/base/factory.py

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#!/usr/bin/python
2-
from ..errors import NodeRegistrationError
2+
from NodeGraphQt.errors import NodeRegistrationError
33

44

55
class NodeFactory(object):
@@ -42,24 +42,23 @@ def nodes(self):
4242
"""
4343
return self.__nodes
4444

45-
def create_node_instance(self, node_type=None, alias=None):
45+
def create_node_instance(self, node_type=None):
4646
"""
4747
create node object by the node type identifier or alias.
4848
4949
Args:
50-
node_type (str): node type.
51-
alias (str): alias name (optional).
50+
node_type (str): node type or optional alias name.
5251
5352
Returns:
54-
NodeGraphQt.BaseNode: new node class object.
53+
NodeGraphQt.NodeObject: new node object.
5554
"""
56-
if alias and self.aliases.get(alias):
57-
node_type = self.aliases[alias]
55+
if node_type in self.aliases:
56+
node_type = self.aliases[node_type]
5857

59-
NodeClass = self.__nodes.get(node_type)
60-
if not NodeClass:
58+
_NodeClass = self.__nodes.get(node_type)
59+
if not _NodeClass:
6160
print('can\'t find node type {}'.format(node_type))
62-
return NodeClass
61+
return _NodeClass()
6362

6463
def register_node(self, node, alias=None):
6564
"""
@@ -77,9 +76,9 @@ def register_node(self, node, alias=None):
7776

7877
if self.__nodes.get(node_type):
7978
raise NodeRegistrationError(
80-
'id "{}" already registered! '
79+
'node type "{}" already registered to "{}"! '
8180
'Please specify a new plugin class name or __identifier__.'
82-
.format(node_type))
81+
.format(node_type, self.__nodes[node_type]))
8382
self.__nodes[node_type] = node
8483

8584
if self.__names.get(name):

0 commit comments

Comments
 (0)