From 1f43209818d2f347dd98561ea5b88b218e3e0205 Mon Sep 17 00:00:00 2001 From: jchanvfx Date: Tue, 18 May 2021 08:57:25 +1200 Subject: [PATCH] clean up --- NodeGraphQt/base/commands.py | 2 +- NodeGraphQt/base/factory.py | 3 +- NodeGraphQt/base/graph.py | 13 ++++---- NodeGraphQt/base/menu.py | 1 + NodeGraphQt/base/model.py | 12 +++++-- NodeGraphQt/base/node.py | 9 ++--- NodeGraphQt/qgraphics/node_abstract.py | 4 +-- NodeGraphQt/qgraphics/node_base.py | 18 ++++++++-- NodeGraphQt/qgraphics/pipe.py | 10 ++++-- NodeGraphQt/qgraphics/port.py | 5 ++- NodeGraphQt/qgraphics/slicer.py | 28 +++++++++++++--- NodeGraphQt/widgets/actions.py | 2 +- NodeGraphQt/widgets/dialogs.py | 10 +++--- NodeGraphQt/widgets/node_publish_widget.py | 2 +- NodeGraphQt/widgets/node_tree.py | 2 +- NodeGraphQt/widgets/node_widgets.py | 6 ++-- NodeGraphQt/widgets/properties_bin.py | 8 ++--- NodeGraphQt/widgets/scene.py | 4 +-- NodeGraphQt/widgets/viewer.py | 38 ++++++++++++++++++---- 19 files changed, 122 insertions(+), 55 deletions(-) diff --git a/NodeGraphQt/base/commands.py b/NodeGraphQt/base/commands.py index fe82f1da..a7cf013b 100644 --- a/NodeGraphQt/base/commands.py +++ b/NodeGraphQt/base/commands.py @@ -145,7 +145,7 @@ class NodeRemovedCmd(QtWidgets.QUndoCommand): Args: graph (NodeGraphQt.NodeGraph): node graph. - node (NodeGraphQt.NodeObject): node. + node (NodeGraphQt.BaseNode or NodeGraphQt.NodeObject): node. """ def __init__(self, graph, node): diff --git a/NodeGraphQt/base/factory.py b/NodeGraphQt/base/factory.py index 7c0367a1..f9f75c9f 100644 --- a/NodeGraphQt/base/factory.py +++ b/NodeGraphQt/base/factory.py @@ -1,5 +1,4 @@ #!/usr/bin/python - from ..errors import NodeRegistrationError @@ -45,7 +44,7 @@ def nodes(self): def create_node_instance(self, node_type=None, alias=None): """ - create node class by the node type identifier or alias. + create node object by the node type identifier or alias. Args: node_type (str): node type. diff --git a/NodeGraphQt/base/graph.py b/NodeGraphQt/base/graph.py index a059d100..30be0c2c 100644 --- a/NodeGraphQt/base/graph.py +++ b/NodeGraphQt/base/graph.py @@ -172,7 +172,7 @@ def _on_insert_node(self, pipe, node_id, prev_node_pos): node = self.get_node_by_id(node_id) # exclude the BackdropNode - if not isinstance(node, BaseNode): + if isinstance(node, BackdropNode): return disconnected = [(pipe.input_port, pipe.output_port)] @@ -348,7 +348,7 @@ def _on_search_triggered(self, node_type, pos): Args: node_type (str): node identifier. - pos (tuple): x,y position for the node. + pos (tuple or list): x, y position for the node. """ self.create_node(node_type, pos=pos) @@ -578,7 +578,7 @@ def set_grid_mode(self, mode=VIEWER_GRID_LINES): * :attr:`NodeGraphQt.constants.VIEWER_GRID_LINES` Args: - mode (int): background styles. + mode (int): background style. """ self.scene().grid_mode = mode self._viewer.force_update() @@ -819,7 +819,7 @@ def registered_nodes(self): """ Return a list of all node types that have been registered. - Hint: + See Also: To register a node :meth:`NodeGraph.register_node` Returns: @@ -843,7 +843,7 @@ def register_nodes(self, nodes): Register the nodes to the :meth:`NodeGraph.node_factory` Args: - nodes (list[NodeGraphQt.NodeObject]): list of nodes. + nodes (list): list of nodes. """ [self._node_factory.register_node(n) for n in nodes] self._viewer.rebuild_tab_search() @@ -865,7 +865,7 @@ def create_node(self, node_type, name=None, selected=True, color=None, pos (list[int, int]): initial x, y position for the node (default: ``(0, 0)``). Returns: - NodeGraphQt.NodeObject: the created instance of the node. + BaseNode or NodeObject: the created instance of the node. """ if not self._editable: return @@ -1285,6 +1285,7 @@ def _deserialize(self, data, relative_pos=False, pos=None, set_parent=True): # set custom properties. for prop, val in n_data.get('custom', {}).items(): node.model.set_property(prop, val) + nodes[n_id] = node if isinstance(node, SubGraph): diff --git a/NodeGraphQt/base/menu.py b/NodeGraphQt/base/menu.py index 8711a163..44fdb562 100644 --- a/NodeGraphQt/base/menu.py +++ b/NodeGraphQt/base/menu.py @@ -177,6 +177,7 @@ def add_command(self, name, func=None, node_type=None, node_class=None): """ if not node_type and not node_class: raise NodeMenuError('Node type or Node class not specified!') + if node_class: node_type = node_class.__name__ diff --git a/NodeGraphQt/base/model.py b/NodeGraphQt/base/model.py index 4af3074c..995da85a 100644 --- a/NodeGraphQt/base/model.py +++ b/NodeGraphQt/base/model.py @@ -11,6 +11,9 @@ class PortModel(object): + """ + Data dump for a port object. + """ def __init__(self, node): self.node = node @@ -51,6 +54,9 @@ def to_dict(self): class NodeModel(object): + """ + Data dump for a node object. + """ def __init__(self): self.type_ = None @@ -225,9 +231,11 @@ def to_dict(self): 'disabled': False, 'visible': True, 'inputs': { - : {: [, ]}}, + : {: [, ]} + }, 'outputs': { - : {: [, ]}}, + : {: [, ]} + }, 'input_ports': [, ], 'output_ports': [, ], 'width': 0.0, diff --git a/NodeGraphQt/base/node.py b/NodeGraphQt/base/node.py index 44162cc1..9f11f175 100644 --- a/NodeGraphQt/base/node.py +++ b/NodeGraphQt/base/node.py @@ -30,7 +30,7 @@ NodeFilePath) -class classproperty(object): +class _ClassProperty(object): def __init__(self, f): self.f = f @@ -72,7 +72,7 @@ def __repr__(self): return '<{}("{}") object at {}>'.format( self.__class__.__name__, self.NODE_NAME, hex(id(self))) - @classproperty + @_ClassProperty def type_(cls): """ Node type identifier followed by the class name. @@ -642,7 +642,7 @@ def add_custom_widget(self, widget, widget_type=NODE_PROP_QLABEL, tab=None): up to the :meth:`NodeObject.set_property` function. Args: - widget_cls (NodeBaseWidget): node widget class object. + widget (NodeBaseWidget): node widget class object. widget_type: widget flag to display in the :class:`NodeGraphQt.PropertiesBinWidget` (default: QLabel). tab (str): name of the widget tab to display in. @@ -1221,7 +1221,8 @@ def __init__(self): # override base default color. self.model.color = (5, 129, 138, 255) self.create_property('backdrop_text', '', - widget_type=NODE_PROP_QTEXTEDIT, tab='Backdrop') + widget_type=NODE_PROP_QTEXTEDIT, + tab='Backdrop') def on_backdrop_updated(self, update_prop, value=None): """ diff --git a/NodeGraphQt/qgraphics/node_abstract.py b/NodeGraphQt/qgraphics/node_abstract.py index 4d8b7c18..d10b57b6 100644 --- a/NodeGraphQt/qgraphics/node_abstract.py +++ b/NodeGraphQt/qgraphics/node_abstract.py @@ -1,5 +1,4 @@ #!/usr/bin/python - from Qt import QtCore, QtWidgets from ..constants import (Z_VAL_NODE, NODE_WIDTH, NODE_HEIGHT, ITEM_CACHE_MODE) @@ -13,6 +12,7 @@ class AbstractNodeItem(QtWidgets.QGraphicsItem): def __init__(self, name='node', parent=None): super(AbstractNodeItem, self).__init__(parent) self.setFlags(self.ItemIsSelectable | self.ItemIsMovable) + self.setCacheMode(ITEM_CACHE_MODE) self.setZValue(Z_VAL_NODE) self._properties = { 'id': None, @@ -28,8 +28,6 @@ def __init__(self, name='node', parent=None): self._width = NODE_WIDTH self._height = NODE_HEIGHT - self.setCacheMode(ITEM_CACHE_MODE) - def __repr__(self): return '{}.{}(\'{}\')'.format( self.__module__, self.__class__.__name__, self.name) diff --git a/NodeGraphQt/qgraphics/node_base.py b/NodeGraphQt/qgraphics/node_base.py index 92e2233b..8b9ce069 100644 --- a/NodeGraphQt/qgraphics/node_base.py +++ b/NodeGraphQt/qgraphics/node_base.py @@ -121,6 +121,12 @@ def mousePressEvent(self, event): super(NodeItem, self).mousePressEvent(event) def mouseReleaseEvent(self, event): + """ + Re-implemented to ignore event if Alt modifier is pressed. + + Args: + event (QtWidgets.QGraphicsSceneMouseEvent): mouse event. + """ if event.modifiers() == QtCore.Qt.AltModifier: event.ignore() return @@ -149,6 +155,13 @@ def mouseDoubleClickEvent(self, event): super(NodeItem, self).mouseDoubleClickEvent(event) def itemChange(self, change, value): + """ + Re-implemented to update pipes on selection changed. + + Args: + change: + value: + """ if change == self.ItemSelectedChange and self.scene(): self.reset_pipes() if value: @@ -161,7 +174,7 @@ def itemChange(self, change, value): def _tooltip_disable(self, state): """ - updates the node tooltip when the node is enabled/disabled. + Updates the node tooltip when the node is enabled/disabled. Args: state (bool): node disable state. @@ -213,7 +226,7 @@ def activate_pipes(self): def highlight_pipes(self): """ - highlight pipe color. + Highlight pipe color. """ ports = self.inputs + self.outputs for port in ports: @@ -400,6 +413,7 @@ def draw_node(self): (re-implemented for vertical layout design) """ height = self._text_item.boundingRect().height() + # setup initial base size. self._set_base_size(add_w=0.0, add_h=height) # set text color when node is initialized. diff --git a/NodeGraphQt/qgraphics/pipe.py b/NodeGraphQt/qgraphics/pipe.py index d76ae3c3..3ab9246a 100644 --- a/NodeGraphQt/qgraphics/pipe.py +++ b/NodeGraphQt/qgraphics/pipe.py @@ -93,9 +93,9 @@ def paint(self, painter, option, widget): pen_width += 0.2 pen_style = PIPE_STYLES.get(PIPE_STYLE_DOTTED) - pen = QtGui.QPen(color, pen_width) - pen.setStyle(pen_style) + pen = QtGui.QPen(color, pen_width, pen_style) pen.setCapStyle(QtCore.Qt.RoundCap) + pen.setJoinStyle(QtCore.Qt.MiterJoin) painter.save() painter.setPen(pen) @@ -125,7 +125,11 @@ def paint(self, painter, option, widget): pen_width = 0.6 if dist < 1.0: pen_width *= (1.0 + dist) - painter.setPen(QtGui.QPen(color, pen_width)) + + pen = QtGui.QPen(color, pen_width) + pen.setCapStyle(QtCore.Qt.RoundCap) + pen.setJoinStyle(QtCore.Qt.MiterJoin) + painter.setPen(pen) transform = QtGui.QTransform() transform.translate(cen_x, cen_y) diff --git a/NodeGraphQt/qgraphics/port.py b/NodeGraphQt/qgraphics/port.py index 5947644e..97091383 100644 --- a/NodeGraphQt/qgraphics/port.py +++ b/NodeGraphQt/qgraphics/port.py @@ -1,5 +1,5 @@ #!/usr/bin/python -from .. import QtGui, QtCore, QtWidgets +from Qt import QtGui, QtCore, QtWidgets from ..constants import ( IN_PORT, OUT_PORT, @@ -23,6 +23,7 @@ class PortItem(QtWidgets.QGraphicsItem): def __init__(self, parent=None): super(PortItem, self).__init__(parent) self.setAcceptHoverEvents(True) + self.setCacheMode(ITEM_CACHE_MODE) self.setFlag(self.ItemIsSelectable, False) self.setFlag(self.ItemSendsScenePositionChanges, True) self.setZValue(Z_VAL_PORT) @@ -39,8 +40,6 @@ def __init__(self, parent=None): self._multi_connection = False self._locked = False - self.setCacheMode(ITEM_CACHE_MODE) - def __str__(self): return '{}.PortItem("{}")'.format(self.__module__, self.name) diff --git a/NodeGraphQt/qgraphics/slicer.py b/NodeGraphQt/qgraphics/slicer.py index 80b1e65c..af7412b1 100644 --- a/NodeGraphQt/qgraphics/slicer.py +++ b/NodeGraphQt/qgraphics/slicer.py @@ -1,5 +1,8 @@ #!/usr/bin/python -from .. import QtCore, QtGui, QtWidgets +import math + +from Qt import QtCore, QtGui, QtWidgets + from ..constants import Z_VAL_NODE_WIDGET, PIPE_SLICER_COLOR @@ -27,6 +30,7 @@ def paint(self, painter, option, widget): p2 = self.path().pointAtPercent(1) size = 6.0 offset = size / 2 + arrow_size = 4.0 painter.save() painter.setRenderHint(painter.Antialiasing, True) @@ -43,17 +47,31 @@ def paint(self, painter, option, widget): painter.setPen(QtGui.QPen(text_color, 1.5, QtCore.Qt.SolidLine)) painter.drawText(text_pos, text) - painter.setPen(QtGui.QPen(color, 1.5, QtCore.Qt.DashLine)) + painter.setPen(QtGui.QPen(color, 1.5, QtCore.Qt.DashDotLine)) painter.drawPath(self.path()) - painter.setPen(QtGui.QPen(color, 1.5, QtCore.Qt.SolidLine)) + pen = QtGui.QPen(color, 1.5, QtCore.Qt.SolidLine) + pen.setCapStyle(QtCore.Qt.RoundCap) + pen.setJoinStyle(QtCore.Qt.MiterJoin) + painter.setPen(pen) painter.setBrush(color) rect = QtCore.QRectF(p1.x() - offset, p1.y() - offset, size, size) painter.drawEllipse(rect) - rect = QtCore.QRectF(p2.x() - offset, p2.y() - offset, size, size) - painter.drawEllipse(rect) + arrow = QtGui.QPolygonF() + arrow.append(QtCore.QPointF(-arrow_size, arrow_size)) + arrow.append(QtCore.QPointF(0.0, -arrow_size * 0.9)) + arrow.append(QtCore.QPointF(arrow_size, arrow_size)) + + transform = QtGui.QTransform() + transform.translate(p2.x(), p2.y()) + radians = math.atan2(p2.y() - p1.y(), + p2.x() - p1.x()) + degrees = math.degrees(radians) - 90 + transform.rotate(degrees) + + painter.drawPolygon(transform.map(arrow)) painter.restore() def draw_path(self, p1, p2): diff --git a/NodeGraphQt/widgets/actions.py b/NodeGraphQt/widgets/actions.py index 2625f75a..0704bd67 100644 --- a/NodeGraphQt/widgets/actions.py +++ b/NodeGraphQt/widgets/actions.py @@ -1,5 +1,5 @@ #!/usr/bin/python -from .. import QtCore, QtWidgets +from Qt import QtCore, QtWidgets from .stylesheet import STYLE_QMENU diff --git a/NodeGraphQt/widgets/dialogs.py b/NodeGraphQt/widgets/dialogs.py index 7d1e36ce..baff3fb8 100644 --- a/NodeGraphQt/widgets/dialogs.py +++ b/NodeGraphQt/widgets/dialogs.py @@ -1,7 +1,7 @@ import os from .stylesheet import STYLE_MESSAGEBOX -from .. import QtWidgets +from Qt import QtWidgets current_dir = os.path.expanduser('~') @@ -17,8 +17,8 @@ def set_dir(file): class FileDialog(object): @staticmethod - def getSaveFileName(parent=None, title="Save File", file_dir=None, - ext_filter="*"): + def getSaveFileName(parent=None, title='Save File', file_dir=None, + ext_filter='*'): if not file_dir: file_dir = current_dir file_dlg = QtWidgets.QFileDialog.getSaveFileName( @@ -29,8 +29,8 @@ def getSaveFileName(parent=None, title="Save File", file_dir=None, return file_dlg @staticmethod - def getOpenFileName(parent=None, title="Open File", file_dir=None, - ext_filter="*"): + def getOpenFileName(parent=None, title='Open File', file_dir=None, + ext_filter='*'): if not file_dir: file_dir = current_dir diff --git a/NodeGraphQt/widgets/node_publish_widget.py b/NodeGraphQt/widgets/node_publish_widget.py index 421186dd..d3e0f8be 100644 --- a/NodeGraphQt/widgets/node_publish_widget.py +++ b/NodeGraphQt/widgets/node_publish_widget.py @@ -1,7 +1,7 @@ import os from .properties import PropFileSavePath -from .. import QtWidgets +from Qt import QtWidgets class _element_widget(QtWidgets.QWidget): diff --git a/NodeGraphQt/widgets/node_tree.py b/NodeGraphQt/widgets/node_tree.py index 77c81e1b..b1bf1964 100644 --- a/NodeGraphQt/widgets/node_tree.py +++ b/NodeGraphQt/widgets/node_tree.py @@ -30,7 +30,7 @@ class NodeTreeWidget(QtWidgets.QTreeWidget): def __init__(self, parent=None, node_graph=None): super(NodeTreeWidget, self).__init__(parent) self.setDragDropMode(QtWidgets.QAbstractItemView.DragOnly) - self.setWindowTitle('Node Tree') + self.setWindowTitle('Nodes Tree') self.setHeaderHidden(True) self._factory = None self._custom_labels = {} diff --git a/NodeGraphQt/widgets/node_widgets.py b/NodeGraphQt/widgets/node_widgets.py index d20c21ad..dff38f09 100644 --- a/NodeGraphQt/widgets/node_widgets.py +++ b/NodeGraphQt/widgets/node_widgets.py @@ -3,7 +3,7 @@ from .properties import _ValueEdit from .stylesheet import * -from .. import QtCore, QtWidgets +from Qt import QtCore, QtWidgets from ..constants import Z_VAL_NODE_WIDGET from ..errors import NodeWidgetError @@ -270,8 +270,8 @@ def all_items(self): combo_widget = self.get_custom_widget() return [combo_widget.itemText(i) for i in range(combo_widget.count())] - def sort_items(self): - items = sorted(self.all_items()) + def sort_items(self, reversed=False): + items = sorted(self.all_items(), reverse=reversed) combo_widget = self.get_custom_widget() combo_widget.clear() combo_widget.addItems(items) diff --git a/NodeGraphQt/widgets/properties_bin.py b/NodeGraphQt/widgets/properties_bin.py index 305f9299..741b8fc7 100644 --- a/NodeGraphQt/widgets/properties_bin.py +++ b/NodeGraphQt/widgets/properties_bin.py @@ -18,7 +18,7 @@ def paint(self, painter, option, index): painter.setPen(QtCore.Qt.NoPen) # draw background. - bg_clr = option.palette.base().color() + bg_clr = option.palette.midlight().color() painter.setBrush(QtGui.QBrush(bg_clr)) painter.drawRect(option.rect) @@ -26,9 +26,9 @@ def paint(self, painter, option, index): border_width = 1 if option.state & QtWidgets.QStyle.State_Selected: bdr_clr = option.palette.highlight().color() - painter.setPen(QtGui.QPen(bdr_clr, 2)) + painter.setPen(QtGui.QPen(bdr_clr, 1.5)) else: - bdr_clr = QtGui.QColor(100, 100, 100) + bdr_clr = option.palette.alternateBase().color() painter.setPen(QtGui.QPen(bdr_clr, 1)) painter.setBrush(QtCore.Qt.NoBrush) @@ -51,7 +51,7 @@ def __init__(self, parent=None): self.verticalHeader().hide() self.horizontalHeader().hide() QtCompat.QHeaderView.setSectionResizeMode( - self.verticalHeader(), QtWidgets.QHeaderView.Stretch) + self.verticalHeader(), QtWidgets.QHeaderView.ResizeToContents) QtCompat.QHeaderView.setSectionResizeMode( self.horizontalHeader(), 0, QtWidgets.QHeaderView.Stretch) self.setVerticalScrollMode(QtWidgets.QAbstractItemView.ScrollPerPixel) diff --git a/NodeGraphQt/widgets/scene.py b/NodeGraphQt/widgets/scene.py index 998b5d0c..77719160 100644 --- a/NodeGraphQt/widgets/scene.py +++ b/NodeGraphQt/widgets/scene.py @@ -1,5 +1,5 @@ #!/usr/bin/python -from .. import QtGui, QtCore, QtWidgets +from Qt import QtGui, QtCore, QtWidgets from ..constants import (VIEWER_BG_COLOR, VIEWER_GRID_SIZE, @@ -96,13 +96,13 @@ def drawBackground(self, painter, rect): super(NodeScene, self).drawBackground(painter, rect) painter.save() - painter.setRenderHint(QtGui.QPainter.Antialiasing, False) painter.setBrush(self.backgroundBrush()) if self._grid_mode is VIEWER_GRID_DOTS: pen = QtGui.QPen(QtGui.QColor(*self.grid_color), 0.65) self._draw_dots(painter, rect, pen, VIEWER_GRID_SIZE) + elif self._grid_mode is VIEWER_GRID_LINES: zoom = self.viewer().get_zoom() if zoom > -0.5: diff --git a/NodeGraphQt/widgets/viewer.py b/NodeGraphQt/widgets/viewer.py index 04070268..4174a7ce 100644 --- a/NodeGraphQt/widgets/viewer.py +++ b/NodeGraphQt/widgets/viewer.py @@ -55,7 +55,8 @@ def __init__(self, parent=None): self.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) self.setViewportUpdateMode(QtWidgets.QGraphicsView.FullViewportUpdate) self.setCacheMode(QtWidgets.QGraphicsView.CacheBackground) - self.setOptimizationFlag(QtWidgets.QGraphicsView.DontAdjustForAntialiasing) + self.setOptimizationFlag( + QtWidgets.QGraphicsView.DontAdjustForAntialiasing) self.setAcceptDrops(True) self.resize(850, 800) @@ -96,12 +97,15 @@ def __init__(self, parent=None): menu_bar = QtWidgets.QMenuBar(self) menu_bar.setNativeMenuBar(False) # shortcuts don't work with "setVisibility(False)". - menu_bar.setMaximumWidth(0) + menu_bar.setMaximumSize(0, 0) self._ctx_menu = BaseMenu('NodeGraph', self) self._ctx_node_menu = BaseMenu('Nodes', self) menu_bar.addMenu(self._ctx_menu) menu_bar.addMenu(self._ctx_node_menu) + + # note: context node menu will be enabled when a action + # is added through the "NodesMenu" interface. self._ctx_node_menu.setDisabled(True) self.acyclic = True @@ -120,6 +124,14 @@ def __repr__(self): # --- private --- def _set_viewer_zoom(self, value, sensitivity=None, pos=None): + """ + Sets the zoom level. + + Args: + value (float): zoom factor. + sensitivity (float): zoom sensitivity. + pos (QtCore.QPoint): mapped position. + """ if pos: pos = self.mapToScene(pos) if sensitivity is None: @@ -141,6 +153,13 @@ def _set_viewer_zoom(self, value, sensitivity=None, pos=None): self.scale(scale, scale, pos) def _set_viewer_pan(self, pos_x, pos_y): + """ + Set the viewer in panning mode. + + Args: + pos_x (float): x pos. + pos_y (float): y pos. + """ speed = self._scene_range.width() * 0.0015 x = -pos_x * speed y = -pos_y * speed @@ -231,7 +250,8 @@ def contextMenuEvent(self, event): else: return super(NodeViewer, self).contextMenuEvent(event) else: - self.need_show_tab_search.emit() + self.show_tab_search.emit() + return super(NodeViewer, self).contextMenuEvent(event) def mousePressEvent(self, event): if event.button() == QtCore.Qt.LeftButton: @@ -243,8 +263,8 @@ def mousePressEvent(self, event): self._origin_pos = event.pos() self._previous_pos = event.pos() - self._prev_selection_nodes, self._prev_selection_pipes = \ - self.selected_items() + (self._prev_selection_nodes, + self._prev_selection_pipes) = self.selected_items() # close tab search if self._search_widget.isVisible(): @@ -254,7 +274,8 @@ def mousePressEvent(self, event): map_pos = self.mapToScene(event.pos()) # pipe slicer enabled. - if self.ALT_state and self.SHIFT_state and self.LMB_state: + slicer_mode = all([self.ALT_state, self.SHIFT_state, self.LMB_state]) + if slicer_mode: self._SLICER_PIPE.draw_path(map_pos, map_pos) self._SLICER_PIPE.setVisible(True) return @@ -294,6 +315,7 @@ def mousePressEvent(self, event): if self.LMB_state and (self.SHIFT_state or self.CTRL_state): return + if not self._LIVE_PIPE.isVisible(): super(NodeViewer, self).mousePressEvent(event) @@ -397,7 +419,9 @@ def mouseMoveEvent(self, event): path = QtGui.QPainterPath() path.addRect(map_rect) self._rubber_band.setGeometry(rect) - self.scene().setSelectionArea(path, QtCore.Qt.IntersectsItemShape) + self.scene().setSelectionArea( + path, QtCore.Qt.IntersectsItemShape + ) self.scene().update(map_rect) if self.SHIFT_state or self.CTRL_state: