diff --git a/Nodes/__pycache__/blueprint_node.cpython-312.pyc b/Nodes/__pycache__/blueprint_node.cpython-312.pyc new file mode 100644 index 0000000..6a2ea35 Binary files /dev/null and b/Nodes/__pycache__/blueprint_node.cpython-312.pyc differ diff --git a/Nodes/__pycache__/flyff_low_health_alert_node.cpython-312.pyc b/Nodes/__pycache__/flyff_low_health_alert_node.cpython-312.pyc index f6b97ce..be1aa9a 100644 Binary files a/Nodes/__pycache__/flyff_low_health_alert_node.cpython-312.pyc and b/Nodes/__pycache__/flyff_low_health_alert_node.cpython-312.pyc differ diff --git a/Nodes/blueprint_node.py b/Nodes/blueprint_node.py new file mode 100644 index 0000000..cd6c742 --- /dev/null +++ b/Nodes/blueprint_node.py @@ -0,0 +1,38 @@ +#!/usr/bin/env python3 + +from OdenGraphQt import BaseNode +from Qt import QtCore + +class BlueprintNode(BaseNode): + """ + A placeholder node used to preview placement before spawning + the real node. It has a distinct color and minimal UI. + """ + __identifier__ = 'bunny-lab.io.blueprint' + NODE_NAME = 'Blueprint Node' + + def __init__(self): + super(BlueprintNode, self).__init__() + # Display a name so the user sees "Click to Place Node" + self.set_name("Click to Place Node") + + # Give it a bluish color + white text, for visibility + self.set_color(60, 120, 220) # R, G, B + self.view.text_color = (255, 255, 255, 200) + self.view.border_color = (255, 255, 255, 180) + + # Make it slightly transparent if desired (alpha=150) + self.view._bg_color = (60, 120, 220, 150) + + # Remove any default inputs/outputs (make it minimal) + for port in self.input_ports() + self.output_ports(): + self.model.delete_port(port.name(), port.port_type) + + # Store the "actual node" we want to spawn + self.create_property("actual_node_type", "", widget_type=0) + + def process_input(self): + """ + We do nothing here; it is purely a placeholder node. + """ + pass diff --git a/borealis.py b/borealis.py index 8aff9c5..8bddcc8 100644 --- a/borealis.py +++ b/borealis.py @@ -21,13 +21,11 @@ def _patched_setSelectionArea(self, painterPath, second_arg, *args, **kwargs): # Monkey-patch the setSelectionArea method. QtWidgets.QGraphicsScene.setSelectionArea = _patched_setSelectionArea -# --- End of patch section --- - import sys import pkgutil import importlib import inspect -from Qt import QtWidgets, QtCore +from Qt import QtWidgets, QtCore, QtGui from OdenGraphQt import NodeGraph, BaseNode def import_nodes_from_folder(package_name): @@ -47,12 +45,14 @@ def import_nodes_from_folder(package_name): def make_node_command(graph, nt): """ Given a NodeGraph instance and a node type string nt, return a command - function that creates a node of that type. + function that creates a node of that type at the current mouse location. """ def command(): try: - node = graph.create_node(nt) - # (No need to force top-level if nodes are created as top-level by default.) + # Get the current cursor position in scene coordinates + pos = graph.cursor_pos() + # Create the node with the current cursor position. + node = graph.create_node(nt, pos=pos) except Exception as e: print(f"Error creating node of type {nt}: {e}") return command @@ -103,4 +103,4 @@ if __name__ == '__main__': timer.timeout.connect(global_update) timer.start(500) - sys.exit(app.exec()) \ No newline at end of file + sys.exit(app.exec())