Skip to content

Commit 70e8300

Browse files
committed
implement context_menu_prompt signal.
1 parent 556ad2c commit 70e8300

File tree

2 files changed

+34
-2
lines changed

2 files changed

+34
-2
lines changed

NodeGraphQt/base/graph.py

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,9 +122,18 @@ class NodeGraph(QtCore.QObject):
122122
"""
123123
Signal is triggered when session has been changed.
124124
125-
:parameters: :str
125+
:parameters: str
126126
:emits: new session path
127127
"""
128+
context_menu_prompt = QtCore.Signal(object, object)
129+
"""
130+
Signal is triggered just before a context menu is shown.
131+
132+
:parameters:
133+
:class:`NodeGraphQt.NodeGraphMenu` or :class:`NodeGraphQt.NodesMenu`,
134+
:class:`NodeGraphQt.BaseNode`
135+
:emits: triggered context menu, node object.
136+
"""
128137

129138
def __init__(self, parent=None, **kwargs):
130139
"""
@@ -220,6 +229,19 @@ def _wire_signals(self):
220229
self._viewer.node_selection_changed.connect(
221230
self._on_node_selection_changed)
222231
self._viewer.data_dropped.connect(self._on_node_data_dropped)
232+
self._viewer.context_menu_prompt.connect(self._on_context_menu_prompt)
233+
234+
def _on_context_menu_prompt(self, menu_name, node_id):
235+
"""
236+
Slot function triggered just before a context menu is shown.
237+
238+
Args:
239+
menu_name (str): context menu name.
240+
node_id (str): node id if triggered from the nodes context menu.
241+
"""
242+
node = self.get_node_by_id(node_id)
243+
menu = self.get_context_menu(menu_name)
244+
self.context_menu_prompt.emit(menu, node)
223245

224246
def _on_insert_node(self, pipe, node_id, prev_node_pos):
225247
"""

NodeGraphQt/widgets/viewer.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ class NodeViewer(QtWidgets.QGraphicsView):
5151
node_selection_changed = QtCore.Signal(list, list)
5252
node_double_clicked = QtCore.Signal(str)
5353
data_dropped = QtCore.Signal(QtCore.QMimeData, QtCore.QPoint)
54+
context_menu_prompt = QtCore.Signal(str, object)
5455

5556
def __init__(self, parent=None, undo_stack=None):
5657
"""
@@ -354,6 +355,8 @@ def contextMenuEvent(self, event):
354355
ctx_menu = None
355356
ctx_menus = self.context_menus()
356357

358+
prompted_data = None, None
359+
357360
if ctx_menus['nodes'].isEnabled():
358361
pos = self.mapToScene(self._previous_pos)
359362
items = self._items_near(pos)
@@ -365,10 +368,17 @@ def contextMenuEvent(self, event):
365368
for action in ctx_menu.actions():
366369
if not action.menu():
367370
action.node_id = node.id
371+
prompted_data = 'nodes', node.id
372+
373+
if not ctx_menu:
374+
ctx_menu = ctx_menus['graph']
375+
prompted_data = 'graph', None
368376

369-
ctx_menu = ctx_menu or ctx_menus['graph']
370377
if len(ctx_menu.actions()) > 0:
371378
if ctx_menu.isEnabled():
379+
self.context_menu_prompt.emit(
380+
prompted_data[0], prompted_data[1]
381+
)
372382
ctx_menu.exec_(event.globalPos())
373383
else:
374384
return super(NodeViewer, self).contextMenuEvent(event)

0 commit comments

Comments
 (0)