Skip to content

Commit 5ae4f4c

Browse files
committed
implemented cursor info overlay text.
1 parent 79a62da commit 5ae4f4c

File tree

1 file changed

+48
-4
lines changed

1 file changed

+48
-4
lines changed

NodeGraphQt/widgets/viewer.py

Lines changed: 48 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,11 @@
77

88
from NodeGraphQt.base.menu import BaseMenu
99
from NodeGraphQt.constants import (
10-
LayoutDirectionEnum, PortTypeEnum, PipeLayoutEnum
10+
LayoutDirectionEnum,
11+
PortTypeEnum,
12+
PipeLayoutEnum,
13+
ViewerEnum,
14+
Z_VAL_NODE_WIDGET
1115
)
1216
from NodeGraphQt.qgraphics.node_abstract import AbstractNodeItem
1317
from NodeGraphQt.qgraphics.node_backdrop import BackdropNodeItem
@@ -89,6 +93,19 @@ def __init__(self, parent=None, undo_stack=None):
8993
)
9094
self._rubber_band.isActive = False
9195

96+
text_color = QtGui.QColor(*tuple(map(
97+
lambda i, j: i - j, (255, 255, 255),
98+
ViewerEnum.BACKGROUND_COLOR.value
99+
)))
100+
text_color.setAlpha(50)
101+
self._cusor_text = QtWidgets.QGraphicsTextItem()
102+
self._cusor_text.setDefaultTextColor(text_color)
103+
self._cusor_text.setZValue(Z_VAL_NODE_WIDGET + 1)
104+
font = self._cusor_text.font()
105+
font.setPointSize(7)
106+
self._cusor_text.setFont(font)
107+
self.scene().addItem(self._cusor_text)
108+
92109
self._LIVE_PIPE = LivePipeItem()
93110
self._LIVE_PIPE.setVisible(False)
94111
self.scene().addItem(self._LIVE_PIPE)
@@ -400,12 +417,12 @@ def mousePressEvent(self, event):
400417
if nodes:
401418
self.MMB_state = False
402419

403-
# record the node selection as "self.selected_nodes()" is not as
404-
# reliable here.
420+
# record the node selection as "self.selected_nodes()" is not updated
421+
# here on the mouse press event.
405422
selection = set([])
406423

407-
# toggle extend node selection.
408424
if self.LMB_state:
425+
# toggle extend node selection.
409426
if self.SHIFT_state:
410427
if items and backdrop == items[0]:
411428
backdrop.selected = not backdrop.selected
@@ -420,12 +437,14 @@ def mousePressEvent(self, event):
420437
node.selected = not node.selected
421438
if node.selected:
422439
selection.add(node)
440+
# unselected nodes with the "ctrl" key.
423441
elif self.CTRL_state:
424442
if items and backdrop == items[0]:
425443
backdrop.selected = False
426444
else:
427445
for node in nodes:
428446
node.selected = False
447+
# if no modifier keys then add to selection set.
429448
else:
430449
if backdrop:
431450
selection.add(backdrop)
@@ -546,6 +565,10 @@ def mouseMoveEvent(self, event):
546565
delta = previous_pos - current_pos
547566
self._set_viewer_pan(delta.x(), delta.y())
548567

568+
if not self.ALT_state:
569+
if self.SHIFT_state or self.CTRL_state:
570+
self._cusor_text.setPos(self.mapToScene(event.pos()))
571+
549572
if self.LMB_state and self._rubber_band.isActive:
550573
rect = QtCore.QRect(self._origin_pos, event.pos()).normalized()
551574
# if the rubber band is too small, do not show it.
@@ -650,6 +673,23 @@ def keyPressEvent(self, event):
650673
self.ALT_state = True
651674
self.SHIFT_state = True
652675

676+
# show cursor text
677+
self._cusor_text.setVisible(False)
678+
if not self.ALT_state:
679+
if self.SHIFT_state:
680+
self._cusor_text.setPlainText(
681+
'\n SHIFT:'
682+
'\n Toggle/Extend Selection'
683+
)
684+
elif self.CTRL_state:
685+
self._cusor_text.setPlainText(
686+
'\n CTRL:'
687+
'\n Deselect Nodes'
688+
)
689+
if self.SHIFT_state or self.CTRL_state:
690+
self._cusor_text.setPos(self.mapToScene(self._previous_pos))
691+
self._cusor_text.setVisible(True)
692+
653693
super(NodeViewer, self).keyPressEvent(event)
654694

655695
def keyReleaseEvent(self, event):
@@ -667,6 +707,10 @@ def keyReleaseEvent(self, event):
667707
self.SHIFT_state = event.modifiers() == QtCore.Qt.ShiftModifier
668708
super(NodeViewer, self).keyReleaseEvent(event)
669709

710+
# hide and reset cursor text.
711+
self._cusor_text.setPlainText('')
712+
self._cusor_text.setVisible(False)
713+
670714
# --- scene events ---
671715

672716
def sceneMouseMoveEvent(self, event):

0 commit comments

Comments
 (0)