Skip to content

Commit a8dd16e

Browse files
committed
add button node_prop && fix autoCook bug
1 parent 17ab198 commit a8dd16e

File tree

3 files changed

+67
-13
lines changed

3 files changed

+67
-13
lines changed

NodeGraphQt/constants.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,8 @@
8181
NODE_PROP_FLOAT = 14
8282
#: Property type represented with int widget in the properties bin.
8383
NODE_PROP_INT = 15
84+
#: Property type represented with button widget in the properties bin.
85+
NODE_PROP_BUTTON = 16
8486

8587
# === NODE VIEWER ===
8688

NodeGraphQt/widgets/properties.py

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@
1515
NODE_PROP_VECTOR3,
1616
NODE_PROP_VECTOR4,
1717
NODE_PROP_FLOAT,
18-
NODE_PROP_INT)
18+
NODE_PROP_INT,
19+
NODE_PROP_BUTTON)
1920
from NodeGraphQt.widgets.file_dialog import file_dialog
2021

2122

@@ -425,7 +426,6 @@ def mouseMoveEvent(self, event):
425426
value = self.pre_val + int(delta*self._speed) * self._step
426427
self.setValue(value)
427428

428-
429429
super(_valueEdit,self).mouseMoveEvent(event)
430430

431431
def mousePressEvent(self, event):
@@ -662,6 +662,21 @@ def __init__(self, parent=None):
662662
self.set_data_type(int)
663663

664664

665+
class PropButton(QtWidgets.QPushButton):
666+
value_changed = QtCore.Signal(str, object)
667+
668+
def __init__(self, parent=None):
669+
super(PropButton, self).__init__(parent)
670+
671+
def set_value(self, value):
672+
# value: list of functions
673+
for func in value:
674+
self.clicked.connect(func)
675+
676+
def get_value(self):
677+
return None
678+
679+
665680
WIDGET_MAP = {
666681
NODE_PROP_QLABEL: PropLabel,
667682
NODE_PROP_QLINEEDIT: PropLineEdit,
@@ -677,6 +692,7 @@ def __init__(self, parent=None):
677692
NODE_PROP_VECTOR4: PropVector4,
678693
NODE_PROP_FLOAT: PropFloat,
679694
NODE_PROP_INT: PropInt,
695+
NODE_PROP_BUTTON: PropButton
680696
}
681697

682698

@@ -716,11 +732,14 @@ def add_widget(self, name, widget, value, label=None):
716732
if row > 0:
717733
row += 1
718734

735+
label = QtWidgets.QLabel(label)
719736
label_flags = QtCore.Qt.AlignCenter | QtCore.Qt.AlignRight
720737
if widget.__class__.__name__ == 'PropTextEdit':
721738
label_flags = label_flags | QtCore.Qt.AlignTop
722-
723-
self.__layout.addWidget(QtWidgets.QLabel(label), row, 0, label_flags)
739+
elif widget.__class__.__name__ == 'PropButton':
740+
label.setVisible(False)
741+
widget.setText(name)
742+
self.__layout.addWidget(label, row, 0, label_flags)
724743
self.__layout.addWidget(widget, row, 1)
725744

726745
def get_widget(self, name):

example_auto_nodes/node_base/auto_node.py

Lines changed: 42 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from NodeGraphQt import QtCore
55
import random
66
import copy
7-
7+
import time
88

99
def rand_color(seed_type):
1010
seed = id(seed_type)
@@ -35,6 +35,9 @@ def __init__(self, defaultInputType=None, defaultOutputType=None):
3535
self.defaultInputType = defaultInputType
3636
self.defaultOutputType = defaultOutputType
3737

38+
self._cookTime = 0.0
39+
self._toolTip = self._setup_tool_tip()
40+
3841
@property
3942
def autoCook(self):
4043
return self._autoCook
@@ -51,6 +54,15 @@ def autoCook(self, mode):
5154
self.defaultColor = self.get_property("color")
5255
self.set_property('color', self.stopCookColor)
5356

57+
@property
58+
def cookTime(self):
59+
return self._cookTime
60+
61+
@autoCook.setter
62+
def cookTime(self, time):
63+
self._cookTime = time
64+
self._update_tool_tip()
65+
5466
def cookNextNode(self):
5567
for nodeList in self.connected_output_nodes().values():
5668
for n in nodeList:
@@ -80,6 +92,11 @@ def getInputData(self, port):
8092
data = from_port.node().get_property(from_port.name())
8193
return copy.deepcopy(data)
8294

95+
def when_disabled(self):
96+
num = len(self.input_ports())
97+
for index, out_port in enumerate(self.output_ports()):
98+
self.set_property(out_port.name(), self.getInputData(index % num))
99+
83100
def cook(self, forceCook=False):
84101
if not self._autoCook and forceCook is not True:
85102
return
@@ -88,18 +105,20 @@ def cook(self, forceCook=False):
88105
self._autoCook = False
89106

90107
if self.disabled():
91-
num = len(self.input_ports())
92-
for index, out_port in enumerate(self.output_ports()):
93-
self.set_property(out_port.name(), self.getInputData(index % num))
108+
self._autoCook = _tmp
109+
self.when_disabled()
94110
self.cookNextNode()
95111
return
96112

97113
if not self.needCook:
114+
self._autoCook = _tmp
98115
return
99116

100117
if self.error():
101118
self._close_error()
102119

120+
_start_time = time.time()
121+
103122
try:
104123
self.run()
105124
except Exception as error:
@@ -109,6 +128,8 @@ def cook(self, forceCook=False):
109128
if self.error():
110129
return
111130

131+
self.cookTime = time.time() - _start_time
132+
112133
self.cooked.emit()
113134
self.cookNextNode()
114135

@@ -206,18 +227,30 @@ def add_output(self, name='output', data_type=None, multi_output=True, display_n
206227
def _close_error(self):
207228
self._error = False
208229
self.set_property('color', self.defaultColor)
209-
self._view._tooltip_disable(False)
230+
self._update_tool_tip()
210231

211232
def _show_error(self, message):
212233
if not self._error:
213234
self.defaultColor = self.get_property("color")
214235

215236
self._error = True
216237
self.set_property('color', self.errorColor)
217-
tooltip = '<b>{}</b>'.format(self.name())
218-
tooltip += ' <font color="red"><br>({})</br></font>'.format(message)
219-
tooltip += '<br/>{}<br/>'.format(self._view.type_)
220-
self._view.setToolTip(tooltip)
238+
tooltip = '<font color="red"><br>({})</br></font>'.format(message)
239+
self._update_tool_tip(tooltip)
240+
241+
def _update_tool_tip(self, message = None):
242+
if message is None:
243+
tooltip = self._toolTip.format(self._cookTime)
244+
else:
245+
tooltip = '<b>{}</b>'.format(self.name())
246+
tooltip += message
247+
tooltip += '<br/>{}<br/>'.format(self._view.type_)
248+
self.view.setToolTip(tooltip)
249+
return tooltip
250+
251+
def _setup_tool_tip(self):
252+
tooltip = '<br> last cook used: {}s</br>'
253+
return self._update_tool_tip(tooltip)
221254

222255
def error(self, message=None):
223256
if message is None:

0 commit comments

Comments
 (0)