77
88from NodeGraphQt .base .menu import BaseMenu
99from NodeGraphQt .constants import (
10- LayoutDirectionEnum , PortTypeEnum , PipeLayoutEnum
10+ LayoutDirectionEnum ,
11+ PortTypeEnum ,
12+ PipeLayoutEnum ,
13+ ViewerEnum ,
14+ Z_VAL_NODE_WIDGET
1115)
1216from NodeGraphQt .qgraphics .node_abstract import AbstractNodeItem
1317from 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