76 lines
2.7 KiB
Python
76 lines
2.7 KiB
Python
from NodeGraphQt import BaseNode
|
|
|
|
class DataNode(BaseNode):
|
|
__identifier__ = 'io.github.nicole.data'
|
|
NODE_NAME = 'Data Node'
|
|
|
|
def __init__(self):
|
|
super(DataNode, self).__init__()
|
|
self.add_input('Input')
|
|
self.add_output('Output')
|
|
self.add_text_input('value', 'Value', text='')
|
|
self.manual_input_enabled = True
|
|
self.set_name(f"Data Node: {self.get_property('value')}")
|
|
|
|
def post_create(self):
|
|
text_widget = self.get_widget('value')
|
|
if text_widget is not None:
|
|
try:
|
|
text_widget.textChanged.connect(self.process_widget_event)
|
|
except Exception as e:
|
|
print("Error connecting textChanged signal:", e)
|
|
|
|
def process_widget_event(self, event=None):
|
|
if self.manual_input_enabled:
|
|
current_text = self.get_property('value')
|
|
self.set_name(f"Data Node: {current_text}")
|
|
self.transmit_data(current_text)
|
|
|
|
def property_changed(self, property_name):
|
|
if property_name == 'value':
|
|
self.process_widget_event()
|
|
|
|
def update_stream(self):
|
|
input_port = self.input(0)
|
|
output_port = self.output(0)
|
|
|
|
if input_port.connected_ports() and output_port.connected_ports():
|
|
self.manual_input_enabled = False
|
|
self.get_widget('value').setEnabled(False)
|
|
elif output_port.connected_ports():
|
|
self.manual_input_enabled = True
|
|
self.get_widget('value').setEnabled(True)
|
|
self.transmit_data(self.get_property('value'))
|
|
elif input_port.connected_ports():
|
|
self.manual_input_enabled = False
|
|
self.get_widget('value').setEnabled(False)
|
|
else:
|
|
self.manual_input_enabled = True
|
|
self.get_widget('value').setEnabled(True)
|
|
|
|
def on_input_connected(self, input_port, output_port):
|
|
self.update_stream()
|
|
|
|
def on_input_disconnected(self, input_port, output_port):
|
|
self.update_stream()
|
|
|
|
def on_output_connected(self, output_port, input_port):
|
|
self.update_stream()
|
|
|
|
def on_output_disconnected(self, output_port, input_port):
|
|
self.update_stream()
|
|
|
|
def receive_data(self, data, source_port_name=None):
|
|
if not self.manual_input_enabled:
|
|
self.set_property('value', data)
|
|
self.set_name(f"Data Node: {data}")
|
|
self.transmit_data(data)
|
|
|
|
def transmit_data(self, data):
|
|
output_port = self.output(0)
|
|
if output_port and output_port.connected_ports():
|
|
for connected_port in output_port.connected_ports():
|
|
connected_node = connected_port.node()
|
|
if hasattr(connected_node, 'receive_data'):
|
|
connected_node.receive_data(data)
|