Added dynamic on-the-fly backdrop node renaming.

This commit is contained in:
Nicole Rappe 2025-02-16 00:07:29 -07:00
parent 2e5fbad9be
commit 2ee93ca374
2 changed files with 24 additions and 39 deletions

View File

@ -1,16 +1,15 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
from Qt import QtWidgets, QtGui from Qt import QtWidgets, QtGui, QtCore
from OdenGraphQt import BaseNode from OdenGraphQt import BaseNode
from OdenGraphQt.constants import NodePropWidgetEnum from OdenGraphQt.constants import NodePropWidgetEnum
from OdenGraphQt.qgraphics.node_backdrop import BackdropNodeItem from OdenGraphQt.qgraphics.node_backdrop import BackdropNodeItem
class BackdropNode(BaseNode): class BackdropNode(BaseNode):
""" """
Backdrop Node: Backdrop Node:
- Allows grouping or annotating other nodes by resizing a large rectangle. - Allows grouping or annotating other nodes by resizing a large rectangle.
- Provides a custom context menu for renaming and recoloring (via on_context_menu). - Title is set by double-clicking in the title area.
""" """
__identifier__ = 'bunny-lab.io.backdrop' __identifier__ = 'bunny-lab.io.backdrop'
@ -23,6 +22,9 @@ class BackdropNode(BaseNode):
# Default color (teal). # Default color (teal).
self.model.color = (5, 129, 138, 255) self.model.color = (5, 129, 138, 255)
# Set default title without prompting:
self.set_name("Double-Click to Add Name to Backdrop")
# Multi-line text property for storing the backdrop text. # Multi-line text property for storing the backdrop text.
self.create_property( self.create_property(
'backdrop_text', 'backdrop_text',
@ -31,6 +33,24 @@ class BackdropNode(BaseNode):
tab='Backdrop' tab='Backdrop'
) )
# Override the view's double-click event to allow editing the title.
original_double_click = self.view.mouseDoubleClickEvent
def new_double_click_event(event):
# Assume the title is in the top 30 pixels of the node.
if event.pos().y() < 30:
new_title, ok = QtWidgets.QInputDialog.getText(
None, "Edit Title", "Enter new backdrop title:", text=self.name()
)
if ok and new_title:
self.set_name(new_title)
self.view.update() # force immediate update of the node title
else:
if original_double_click:
original_double_click(event)
self.view.mouseDoubleClickEvent = new_double_click_event
# -------------------------------------------------------------------------- # --------------------------------------------------------------------------
# Resizing / Geometry # Resizing / Geometry
# -------------------------------------------------------------------------- # --------------------------------------------------------------------------
@ -139,38 +159,3 @@ class BackdropNode(BaseNode):
def outputs(self): def outputs(self):
return return
# --------------------------------------------------------------------------
# Custom Context Menu
# --------------------------------------------------------------------------
def on_context_menu(self, menu):
"""
Called manually by the node context menu callback in older NodeGraphQt versions.
"""
rename_action = menu.addAction("Set Title...")
rename_action.triggered.connect(self._change_title)
color_action = menu.addAction("Set Color...")
color_action.triggered.connect(self._change_color)
def _change_title(self):
"""
Prompt for a new backdrop title (header).
"""
new_title, ok = QtWidgets.QInputDialog.getText(
None, "Backdrop Title", "Enter new backdrop title:"
)
if ok and new_title:
self.set_name(new_title)
def _change_color(self):
"""
Prompt for a new backdrop color via QColorDialog.
"""
current_color = QtGui.QColor(*self.model.color)
color = QtWidgets.QColorDialog.getColor(
current_color, None, "Select Backdrop Color"
)
if color.isValid():
self.model.color = (color.red(), color.green(), color.blue(), color.alpha())
self.view.update()