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)