Skip to content

Commit a7f7cab

Browse files
authored
Merge pull request #181 from jchanvfx/refactor_updates
Refactor updates
2 parents cef4c6f + 78ff27e commit a7f7cab

File tree

16 files changed

+306
-104
lines changed

16 files changed

+306
-104
lines changed

NodeGraphQt/base/graph.py

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626

2727

2828
class QWidgetDrops(QtWidgets.QWidget):
29+
2930
def __init__(self):
3031
super(QWidgetDrops, self).__init__()
3132
self.setAcceptDrops(True)
@@ -61,7 +62,8 @@ def dropEvent(self, event):
6162

6263
class NodeGraph(QtCore.QObject):
6364
"""
64-
The ``NodeGraph`` class is the main controller for managing all nodes.
65+
The ``NodeGraph`` class is the main controller for managing all nodes
66+
and the node graph.
6567
6668
Inherited from: :class:`PySide2.QtCore.QObject`
6769
@@ -153,18 +155,24 @@ def __init__(self, parent=None):
153155
self._current_node_space = None
154156
self._editable = True
155157

156-
tab = QtWidgets.QShortcut(QtGui.QKeySequence(QtCore.Qt.Key_Tab), self._viewer)
157-
tab.activated.connect(self._toggle_tab_search)
158-
self._viewer.need_show_tab_search.connect(self._toggle_tab_search)
159-
160158
self._wire_signals()
161159
self._node_space_bar = node_space_bar(self)
162160
self._auto_update = True
163161

164162
def __repr__(self):
165-
return '<{} object at {}>'.format(self.__class__.__name__, hex(id(self)))
163+
return '<{} object at {}>'.format(
164+
self.__class__.__name__, hex(id(self)))
166165

167166
def _wire_signals(self):
167+
"""
168+
Connect up all the signals and slots here.
169+
"""
170+
# hard coded tab search.
171+
tab = QtWidgets.QShortcut(
172+
QtGui.QKeySequence(QtCore.Qt.Key_Tab), self._viewer)
173+
tab.activated.connect(self._toggle_tab_search)
174+
self._viewer.need_show_tab_search.connect(self._toggle_tab_search)
175+
168176
# internal signals.
169177
self._viewer.search_triggered.connect(self._on_search_triggered)
170178
self._viewer.connection_sliced.connect(self._on_connection_sliced)
@@ -231,7 +239,7 @@ def _on_property_bin_changed(self, node_id, prop_name, prop_value):
231239
Args:
232240
node_id (str): node id.
233241
prop_name (str): node property name.
234-
prop_value (object): python object.
242+
prop_value (object): python built in types.
235243
"""
236244
if not self._editable:
237245
return
@@ -391,6 +399,16 @@ def model(self):
391399
"""
392400
return self._model
393401

402+
@property
403+
def node_factory(self):
404+
"""
405+
Return the node factory object used by the node graph.
406+
407+
Returns:
408+
NodeFactory: node factory.
409+
"""
410+
return self._node_factory
411+
394412
@property
395413
def widget(self):
396414
"""

NodeGraphQt/base/model.py

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33
from collections import defaultdict
44

55
from ..constants import (NODE_PROP,
6-
NODE_PROP_QLABEL,
7-
NODE_PROP_QLINEEDIT,
8-
NODE_PROP_QCHECKBOX,
9-
NODE_PROP_COLORPICKER)
6+
NODE_PROP_QLABEL,
7+
NODE_PROP_QLINEEDIT,
8+
NODE_PROP_QCHECKBOX,
9+
NODE_PROP_COLORPICKER)
1010
from ..errors import NodePropertyError
1111

1212

@@ -23,7 +23,7 @@ def __init__(self, node):
2323
self.data_type = 'NoneType'
2424

2525
def __repr__(self):
26-
return '<{}(\'{}\') @ {}>'.format(
26+
return '<{}(\'{}\') object at {}>'.format(
2727
self.__class__.__name__, self.name, hex(id(self)))
2828

2929
@property
@@ -94,6 +94,10 @@ def __init__(self):
9494
'outputs': NODE_PROP,
9595
}
9696

97+
def __repr__(self):
98+
return '<{}(\'{}\') object at {}>'.format(
99+
self.__class__.__name__, self.name, self.id)
100+
97101
def add_property(self, name, value, items=None, range=None,
98102
widget_type=NODE_PROP, tab='Properties',
99103
ext=None, funcs=None):
@@ -240,15 +244,23 @@ def to_dict(self):
240244
output_ports = []
241245
for name, model in node_dict.pop('inputs').items():
242246
if self.dynamic_port:
243-
input_ports.append({'name': name, 'multi_connection': model.multi_connection,
244-
'display_name': model.display_name, 'data_type': model.data_type})
247+
input_ports.append({
248+
'name': name,
249+
'multi_connection': model.multi_connection,
250+
'display_name': model.display_name,
251+
'data_type': model.data_type
252+
})
245253
connected_ports = model.to_dict['connected_ports']
246254
if connected_ports:
247255
inputs[name] = connected_ports
248256
for name, model in node_dict.pop('outputs').items():
249257
if self.dynamic_port:
250-
output_ports.append({'name': name, 'multi_connection': model.multi_connection,
251-
'display_name': model.display_name, 'data_type': model.data_type})
258+
output_ports.append({
259+
'name': name,
260+
'multi_connection': model.multi_connection,
261+
'display_name': model.display_name,
262+
'data_type': model.data_type
263+
})
252264
connected_ports = model.to_dict['connected_ports']
253265
if connected_ports:
254266
outputs[name] = connected_ports

NodeGraphQt/base/node.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -281,9 +281,11 @@ def create_property(self, name, value, items=None, range=None,
281281
widget_type (int): widget flag to display in the ``PropertiesBinWidget``
282282
tab (str): name of the widget tab to display in the properties bin.
283283
ext (str): file ext of ``NODE_PROP_FILE``
284-
funcs (list) list of functions for NODE_PROP_BUTTON
284+
funcs (list[function]) list of functions for NODE_PROP_BUTTON
285285
"""
286-
self.model.add_property(name, value, items, range, widget_type, tab, ext, funcs)
286+
self.model.add_property(
287+
name, value, items, range, widget_type, tab, ext, funcs
288+
)
287289

288290
def properties(self):
289291
"""
@@ -317,7 +319,7 @@ def set_property(self, name, value):
317319
318320
Args:
319321
name (str): name of the property.
320-
value (object): property data.
322+
value (object): property data (python built in types).
321323
"""
322324

323325
# prevent signals from causing a infinite loop.

NodeGraphQt/base/port.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@ def __init__(self, node, port):
2626

2727
def __repr__(self):
2828
port = str(self.__class__.__name__)
29-
return '<{}("{}") object at {}>'.format(port, self.name(), hex(id(self)))
29+
return '<{}("{}") object at {}>'.format(
30+
port, self.name(), hex(id(self)))
3031

3132
@property
3233
def view(self):

NodeGraphQt/pkg_info.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#!/usr/bin/python
22
# -*- coding: utf-8 -*-
3-
__version__ = '0.1.1'
3+
__version__ = '0.1.2'
44
__status__ = 'Work in Progress'
55
__license__ = 'MIT'
66

NodeGraphQt/qgraphics/node_abstract.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,12 @@ def boundingRect(self):
3838
return QtCore.QRectF(0.0, 0.0, self._width, self._height)
3939

4040
def mousePressEvent(self, event):
41+
"""
42+
Re-implemented to update "self._properties['selected']" attribute.
43+
44+
Args:
45+
event (QtWidgets.QGraphicsSceneMouseEvent): mouse event.
46+
"""
4147
self._properties['selected'] = True
4248
super(AbstractNodeItem, self).mousePressEvent(event)
4349

NodeGraphQt/qgraphics/node_base.py

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -197,12 +197,23 @@ def paint(self, painter, option, widget):
197197
painter.restore()
198198

199199
def mousePressEvent(self, event):
200+
"""
201+
Re-implemented to ignore event if LMB is over port collision area.
202+
203+
Args:
204+
event (QtWidgets.QGraphicsSceneMouseEvent): mouse event.
205+
"""
200206
if event.button() == QtCore.Qt.LeftButton:
201-
start = PortItem().boundingRect().width() - PORT_FALLOFF
202-
end = self.boundingRect().width() - start
203-
x_pos = event.pos().x()
204-
if not start <= x_pos <= end:
205-
event.ignore()
207+
for p in self._input_items.keys():
208+
if p.hovered:
209+
event.ignore()
210+
super(NodeItem, self).mousePressEvent(event)
211+
return
212+
for p in self._output_items.keys():
213+
if p.hovered:
214+
event.ignore()
215+
super(NodeItem, self).mousePressEvent(event)
216+
return
206217
super(NodeItem, self).mousePressEvent(event)
207218

208219
def mouseReleaseEvent(self, event):

NodeGraphQt/qgraphics/port.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,11 +61,13 @@ def paint(self, painter, option, widget):
6161
"""
6262
painter.save()
6363

64-
### display the falloff colision ###
64+
# display falloff collision for debugging
65+
# ----------------------------------------------------------------------
6566
# pen = QtGui.QPen(QtGui.QColor(255, 255, 255, 80), 0.8)
6667
# pen.setStyle(QtCore.Qt.DotLine)
6768
# painter.setPen(pen)
6869
# painter.drawRect(self.boundingRect())
70+
# ----------------------------------------------------------------------
6971

7072
rect_w = self._width / 1.8
7173
rect_h = self._height / 1.8
@@ -123,8 +125,6 @@ def itemChange(self, change, value):
123125
return super(PortItem, self).itemChange(change, value)
124126

125127
def mousePressEvent(self, event):
126-
# if event.modifiers() != QtCore.Qt.AltModifier:
127-
# self.viewer_start_connection()
128128
super(PortItem, self).mousePressEvent(event)
129129

130130
def mouseReleaseEvent(self, event):

NodeGraphQt/widgets/file_dialog.py renamed to NodeGraphQt/widgets/dialogs.py

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,11 @@ def set_dir(file):
1414
current_dir = os.path.split(file)[0]
1515

1616

17-
class file_dialog(object):
17+
class FileDialog(object):
1818

1919
@staticmethod
20-
def getSaveFileName(parent=None, title="Save File", file_dir=None, ext_filter="*"):
20+
def getSaveFileName(parent=None, title="Save File", file_dir=None,
21+
ext_filter="*"):
2122
if not file_dir:
2223
file_dir = current_dir
2324
file_dlg = QtWidgets.QFileDialog.getSaveFileName(
@@ -28,7 +29,8 @@ def getSaveFileName(parent=None, title="Save File", file_dir=None, ext_filter="*
2829
return file_dlg
2930

3031
@staticmethod
31-
def getOpenFileName(parent=None, title="Open File", file_dir=None, ext_filter="*"):
32+
def getOpenFileName(parent=None, title="Open File", file_dir=None,
33+
ext_filter="*"):
3234
if not file_dir:
3335
file_dir = current_dir
3436

@@ -42,10 +44,25 @@ def getOpenFileName(parent=None, title="Open File", file_dir=None, ext_filter="*
4244
return file_dlg
4345

4446

45-
def messageBox(text, title , buttons):
46-
msg = QtWidgets.QMessageBox()
47-
msg.setStyleSheet(STYLE_MESSAGEBOX)
48-
msg.setWindowTitle(title)
49-
msg.setInformativeText(text)
50-
msg.setStandardButtons(buttons)
51-
return msg.exec_()
47+
class BaseDialog(object):
48+
49+
@staticmethod
50+
def message_dialog(text, title):
51+
dlg = QtWidgets.QMessageBox()
52+
dlg.setStyleSheet(STYLE_MESSAGEBOX)
53+
dlg.setWindowTitle(title)
54+
dlg.setInformativeText(text)
55+
dlg.setStandardButtons(QtWidgets.QMessageBox.Ok)
56+
return dlg.exec_()
57+
58+
@staticmethod
59+
def question_dialog(text, title):
60+
dlg = QtWidgets.QMessageBox()
61+
dlg.setStyleSheet(STYLE_MESSAGEBOX)
62+
dlg.setWindowTitle(title)
63+
dlg.setInformativeText(text)
64+
dlg.setStandardButtons(
65+
QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No
66+
)
67+
dlg.exec_()
68+
return bool(dlg == QtWidgets.QMessageBox.Yes)

NodeGraphQt/widgets/node_space_bar.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44

55
class node_space_bar(QtWidgets.QWidget):
6+
67
def __init__(self, graph):
78
super(node_space_bar, self).__init__()
89
self.setMaximumHeight(20)
@@ -55,4 +56,4 @@ def set_node(self, node):
5556
self.add_node(node)
5657

5758
self._layout.addStretch()
58-
self.update()
59+
self.update()

0 commit comments

Comments
 (0)