def __init__(self, parent=None): super(NodeViewer, self).__init__(parent) if parent is not None: self.setWindowFlags(QtCore.Qt.Window) scene_pos = (SCENE_AREA / 2) * -1 self.setScene(NodeScene(self)) self.setSceneRect(scene_pos, scene_pos, SCENE_AREA, SCENE_AREA) self.setRenderHint(QtGui.QPainter.Antialiasing, True) self.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) self.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) self.setViewportUpdateMode(QtWidgets.QGraphicsView.FullViewportUpdate) self.setAcceptDrops(True) self.resize(1000, 800) self._pipe_layout = PIPE_LAYOUT_CURVED self._detached_port = None self._start_port = None self._origin_pos = None self._previous_pos = QtCore.QPoint(self.width(), self.height()) self._prev_selection = [] self._node_positions = {} self._rubber_band = QtWidgets.QRubberBand( QtWidgets.QRubberBand.Rectangle, self) self._LIVE_PIPE = LivePipe() self._LIVE_PIPE.setVisible(False) self.scene().addItem(self._LIVE_PIPE) self._SLICER_PIPE = SlicerPipe() self._SLICER_PIPE.setVisible(False) self.scene().addItem(self._SLICER_PIPE) self._undo_stack = QtWidgets.QUndoStack(self) self._context_menu = QtWidgets.QMenu('main', self) self._context_menu.setStyleSheet(STYLE_QMENU) self._search_widget = TabSearchWidget(self) self._search_widget.search_submitted.connect(self._on_search_submitted) # workaround fix for shortcuts from the non-native menu actions # don't seem to trigger so we create a hidden menu bar. menu_bar = QtWidgets.QMenuBar(self) menu_bar.setNativeMenuBar(False) # shortcuts don't work with "setVisibility(False)". menu_bar.resize(0, 0) menu_bar.addMenu(self._context_menu) self.acyclic = True self.LMB_state = False self.RMB_state = False self.MMB_state = False self.ALT_state = False self.CTRL_state = False self.SHIFT_state = False
def tab_search_toggle(self): pos = self._previous_pos state = not self._search_widget.isVisible() if state: rect = self._search_widget.rect() new_pos = QtCore.QPoint(pos.x() - rect.width() / 2, pos.y() - rect.height() / 2) self._search_widget.move(new_pos) self._search_widget.setVisible(state) rect = self.mapToScene(rect).boundingRect() self.scene().update(rect) else: self._search_widget.setVisible(state) self.clearFocus()
def __init__(self, parent=None): super(NodeViewer, self).__init__(parent) self.setScene(NodeScene(self)) self.setRenderHint(QtGui.QPainter.Antialiasing, True) self.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) self.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) self.setViewportUpdateMode(QtWidgets.QGraphicsView.FullViewportUpdate) self.setCacheMode(QtWidgets.QGraphicsView.CacheBackground) self.setOptimizationFlag( QtWidgets.QGraphicsView.DontAdjustForAntialiasing) self.setAcceptDrops(True) self.resize(850, 800) self._scene_range = QtCore.QRectF(0, 0, self.size().width(), self.size().height()) self._update_scene() self._last_size = self.size() self._pipe_layout = PIPE_LAYOUT_CURVED self._detached_port = None self._start_port = None self._origin_pos = None self._previous_pos = QtCore.QPoint(self.width(), self.height()) self._prev_selection_nodes = [] self._prev_selection_pipes = [] self._node_positions = {} self._rubber_band = QtWidgets.QRubberBand( QtWidgets.QRubberBand.Rectangle, self) self._LIVE_PIPE = LivePipe() self._LIVE_PIPE.setVisible(False) self.scene().addItem(self._LIVE_PIPE) self._SLICER_PIPE = SlicerPipe() self._SLICER_PIPE.setVisible(False) self.scene().addItem(self._SLICER_PIPE) self._undo_stack = QtWidgets.QUndoStack(self) self._search_widget = TabSearchMenuWidget(self) self._search_widget.search_submitted.connect(self._on_search_submitted) # workaround fix for shortcuts from the non-native menu actions # don't seem to trigger so we create a hidden menu bar. menu_bar = QtWidgets.QMenuBar(self) menu_bar.setNativeMenuBar(False) # shortcuts don't work with "setVisibility(False)". menu_bar.setMaximumWidth(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) self._ctx_node_menu.setDisabled(True) self.acyclic = True self.LMB_state = False self.RMB_state = False self.MMB_state = False self.ALT_state = False self.CTRL_state = False self.SHIFT_state = False self.COLLIDING_state = False
def dropEvent(self, event): pos = self.mapToScene(event.pos()) event.setDropAction(QtCore.Qt.MoveAction) self.data_dropped.emit(event.mimeData(), QtCore.QPoint(pos.x(), pos.y()))