55 NODE_WIDTH , NODE_HEIGHT ,
66 NODE_ICON_SIZE , ICON_NODE_BASE ,
77 NODE_SEL_COLOR , NODE_SEL_BORDER_COLOR ,
8- PORT_FALLOFF , Z_VAL_NODE , Z_VAL_NODE_WIDGET )
8+ PORT_FALLOFF , Z_VAL_NODE , Z_VAL_NODE_WIDGET ,
9+ ITEM_CACHE_MODE )
910from NodeGraphQt .errors import NodeWidgetError
1011from NodeGraphQt .qgraphics .node_abstract import AbstractNodeItem
1112from NodeGraphQt .qgraphics .port import PortItem
1213
13-
1414class XDisabledItem (QtWidgets .QGraphicsItem ):
1515 """
1616 Node disabled overlay item.
@@ -40,7 +40,9 @@ def paint(self, painter, option, widget):
4040 used to describe the parameters needed to draw.
4141 widget (QtWidgets.QWidget): not used.
4242 """
43+
4344 painter .save ()
45+ painter .setClipRect (option .exposedRect )
4446
4547 margin = 20
4648 rect = self .boundingRect ()
@@ -131,6 +133,12 @@ def __init__(self, name='node', parent=None):
131133 self ._input_items = {}
132134 self ._output_items = {}
133135 self ._widgets = {}
136+ self ._proxy_mode = False
137+ self ._porxy_mode_threshold = 70
138+
139+ # def paint(self, painter, option, widget,force=False):
140+ # if self.auto_switch_mode() or force:
141+ # self._paint(self, painter, option, widget)
134142
135143 def paint (self , painter , option , widget ):
136144 """
@@ -142,6 +150,8 @@ def paint(self, painter, option, widget):
142150 used to describe the parameters needed to draw.
143151 widget (QtWidgets.QWidget): not used.
144152 """
153+ self .auto_switch_mode ()
154+
145155 painter .save ()
146156 bg_border = 1.0
147157 rect = QtCore .QRectF (0.5 - (bg_border / 2 ),
@@ -155,6 +165,7 @@ def paint(self, painter, option, widget):
155165 path .addRoundedRect (rect , radius , radius )
156166
157167 rect = self .boundingRect ()
168+
158169 bg_color = QtGui .QColor (* self .color )
159170 painter .setBrush (bg_color )
160171 painter .setPen (QtCore .Qt .NoPen )
@@ -392,7 +403,7 @@ def arrange_widgets(self, v_offset=0.0):
392403 def arrange_ports (self , v_offset = 0.0 ):
393404 """
394405 Arrange input, output ports in the node layout.
395-
406+
396407 Args:
397408 v_offset (float): port vertical offset.
398409 """
@@ -468,6 +479,7 @@ def draw_node(self):
468479 self .arrange_ports (v_offset = height + (height / 2 ))
469480 # arrange node widgets
470481 self .arrange_widgets (v_offset = height / 2 )
482+ self .update ()
471483
472484 def post_init (self , viewer = None , pos = None ):
473485 """
@@ -484,6 +496,42 @@ def post_init(self, viewer=None, pos=None):
484496 if pos :
485497 self .xy_pos = pos
486498
499+ def auto_switch_mode (self ):
500+ if ITEM_CACHE_MODE is QtWidgets .QGraphicsItem .ItemCoordinateCache :
501+ return
502+ rect = self .sceneBoundingRect ()
503+ l = self .viewer ().mapToGlobal (self .viewer ().mapFromScene (rect .topLeft ()))
504+ r = self .viewer ().mapToGlobal (self .viewer ().mapFromScene ( rect .topRight ()))
505+ # with is the node with in screen
506+ width = r .x ()- l .x ()
507+
508+ self .set_proxy_mode (width < self ._porxy_mode_threshold )
509+
510+ def set_proxy_mode (self ,mode ):
511+ if mode is self ._proxy_mode :
512+ return
513+
514+ self ._proxy_mode = mode
515+
516+ visible = not mode
517+
518+ for w in self ._widgets .values ():
519+ w .widget .setVisible (visible )
520+ for port , text in self ._input_items .items ():
521+ port .setVisible (visible )
522+ text .setVisible (visible )
523+ for pipe in port .connected_pipes :
524+ pipe .setVisible (visible )
525+
526+ for port , text in self ._output_items .items ():
527+ port .setVisible (visible )
528+ text .setVisible (visible )
529+ for pipe in port .connected_pipes :
530+ pipe .setVisible (visible )
531+
532+ self ._text_item .setVisible (visible )
533+ self ._icon_item .setVisible (visible )
534+
487535 @property
488536 def icon (self ):
489537 return self ._properties ['icon' ]
@@ -500,6 +548,8 @@ def icon(self, path=None):
500548 if self .scene ():
501549 self .post_init ()
502550
551+ self .update ()
552+
503553 @AbstractNodeItem .width .setter
504554 def width (self , width = 0.0 ):
505555 w , h = self .calc_size ()
@@ -533,17 +583,20 @@ def name(self, name=''):
533583 self ._text_item .setPlainText (name )
534584 if self .scene ():
535585 self .draw_node ()
586+ self .update ()
536587
537588 @AbstractNodeItem .color .setter
538589 def color (self , color = (100 , 100 , 100 , 255 )):
539590 AbstractNodeItem .color .fset (self , color )
540591 if self .scene ():
541592 self .scene ().update ()
593+ self .update ()
542594
543595 @AbstractNodeItem .text_color .setter
544596 def text_color (self , color = (100 , 100 , 100 , 255 )):
545597 AbstractNodeItem .text_color .fset (self , color )
546598 self ._set_text_color (color )
599+ self .update ()
547600
548601 @property
549602 def inputs (self ):
@@ -566,7 +619,7 @@ def add_input(self, name='input', multi_port=False, display_name=True):
566619 Args:
567620 name (str): name for the port.
568621 multi_port (bool): allow multiple connections.
569- display_name (bool): display the port name.
622+ display_name (bool): display the port name.
570623
571624 Returns:
572625 PortItem: input item widget
@@ -580,6 +633,7 @@ def add_input(self, name='input', multi_port=False, display_name=True):
580633 text .font ().setPointSize (8 )
581634 text .setFont (text .font ())
582635 text .setVisible (display_name )
636+ text .setCacheMode (ITEM_CACHE_MODE )
583637 self ._input_items [port ] = text
584638 if self .scene ():
585639 self .post_init ()
@@ -604,6 +658,7 @@ def add_output(self, name='output', multi_port=False, display_name=True):
604658 text .font ().setPointSize (8 )
605659 text .setFont (text .font ())
606660 text .setVisible (display_name )
661+ text .setCacheMode (ITEM_CACHE_MODE )
607662 self ._output_items [port ] = text
608663 if self .scene ():
609664 self .post_init ()
0 commit comments