def paintEvent(self, event): size = self.geometry() rect = QtCore.QRect(1, 1, size.width() - 2, size.height() - 2) painter = QtGui.QPainter(self) painter.setPen(QtCore.Qt.NoPen) painter.setBrush(QtGui.QColor(*self._color)) painter.drawRoundedRect(rect, 1, 1)
def paint(self, painter, option, index): """ Args: painter (QtGui.QPainter): option (QtGui.QStyleOptionViewItem): index (QtCore.QModelIndex): """ painter.save() painter.setRenderHint(QtGui.QPainter.Antialiasing, False) painter.setPen(QtCore.Qt.NoPen) painter.setBrush(option.palette.midlight()) painter.drawRect(option.rect) if option.state & QtWidgets.QStyle.State_Selected: bdr_clr = option.palette.highlight().color() painter.setPen(QtGui.QPen(bdr_clr, 1.5)) else: bdr_clr = option.palette.alternateBase().color() painter.setPen(QtGui.QPen(bdr_clr, 1)) painter.setBrush(QtCore.Qt.NoBrush) painter.drawRect(QtCore.QRect(option.rect.x() + 1, option.rect.y() + 1, option.rect.width() - 2, option.rect.height() - 2)) painter.restore()
def mouseMoveEvent(self, event): alt_modifier = event.modifiers() == QtCore.Qt.AltModifier shift_modifier = event.modifiers() == QtCore.Qt.ShiftModifier if self.MMB_state and alt_modifier: pos_x = (event.x() - self._previous_pos.x()) zoom = 0.1 if pos_x > 0 else -0.1 self._set_viewer_zoom(zoom) elif self.MMB_state or (self.LMB_state and alt_modifier): pos_x = (event.x() - self._previous_pos.x()) pos_y = (event.y() - self._previous_pos.y()) self._set_viewer_pan(pos_x, pos_y) if self.LMB_state and self._rubber_band.isVisible(): rect = QtCore.QRect(self._origin_pos, event.pos()).normalized() map_rect = self.mapToScene(rect).boundingRect() path = QtGui.QPainterPath() path.addRect(map_rect) self._rubber_band.setGeometry(rect) self.scene().setSelectionArea(path, QtCore.Qt.IntersectsItemShape) self.scene().update(map_rect) if shift_modifier and self._prev_selection: for node in self._prev_selection: if node not in self.selected_nodes(): node.selected = True self._previous_pos = event.pos() super(NodeViewer, self).mouseMoveEvent(event)
def mousePressEvent(self, event): alt_modifier = event.modifiers() == QtCore.Qt.AltModifier shift_modifier = event.modifiers() == QtCore.Qt.ShiftModifier if event.button() == QtCore.Qt.LeftButton: self.LMB_state = True elif event.button() == QtCore.Qt.RightButton: self.RMB_state = True elif event.button() == QtCore.Qt.MiddleButton: self.MMB_state = True self._origin_pos = event.pos() self._previous_pos = event.pos() self._prev_selection = self.selected_nodes() # close tab search if self._search_widget.isVisible(): self.tab_search_toggle() # cursor pos. map_pos = self.mapToScene(event.pos()) # pipe slicer enabled. if event.modifiers() == (QtCore.Qt.AltModifier | QtCore.Qt.ShiftModifier): self._pipe_slicer.draw_path(map_pos, map_pos) self._pipe_slicer.setVisible(True) return if alt_modifier: return items = self._items_near(map_pos, None, 20, 20) nodes = [i for i in items if isinstance(i, AbstractNodeItem)] # toggle extend node selection. if shift_modifier: for node in nodes: node.selected = not node.selected # update the recorded node positions. self._node_positions.update( {n: n.xy_pos for n in self.selected_nodes()}) # show selection selection marquee if self.LMB_state and not items: rect = QtCore.QRect(self._previous_pos, QtCore.QSize()) rect = rect.normalized() map_rect = self.mapToScene(rect).boundingRect() self.scene().update(map_rect) self._rubber_band.setGeometry(rect) self._rubber_band.show() if not shift_modifier: super(NodeViewer, self).mousePressEvent(event)
def mouseMoveEvent(self, event): if self.ALT_state and self.SHIFT_state: if self.LMB_state and self._SLICER_PIPE.isVisible(): p1 = self._SLICER_PIPE.path().pointAtPercent(0) p2 = self.mapToScene(self._previous_pos) self._SLICER_PIPE.draw_path(p1, p2) self._SLICER_PIPE.show() self._previous_pos = event.pos() super(NodeViewer, self).mouseMoveEvent(event) return if self.MMB_state and self.ALT_state: pos_x = (event.x() - self._previous_pos.x()) zoom = 0.1 if pos_x > 0 else -0.1 self._set_viewer_zoom(zoom, 0.05) elif self.MMB_state or (self.LMB_state and self.ALT_state): pos_x = (event.x() - self._previous_pos.x()) pos_y = (event.y() - self._previous_pos.y()) self._set_viewer_pan(pos_x, pos_y) if self.LMB_state and self._rubber_band.isVisible(): rect = QtCore.QRect(self._origin_pos, event.pos()).normalized() map_rect = self.mapToScene(rect).boundingRect() path = QtGui.QPainterPath() path.addRect(map_rect) self._rubber_band.setGeometry(rect) self.scene().setSelectionArea(path, QtCore.Qt.IntersectsItemShape) self.scene().update(map_rect) if self.SHIFT_state and self._prev_selection: for node in self._prev_selection: if node not in self.selected_nodes(): node.selected = True self._previous_pos = event.pos() super(NodeViewer, self).mouseMoveEvent(event)
def mouseMoveEvent(self, event): if self.ALT_state and self.SHIFT_state: if self.LMB_state and self._SLICER_PIPE.isVisible(): p1 = self._SLICER_PIPE.path().pointAtPercent(0) p2 = self.mapToScene(self._previous_pos) self._SLICER_PIPE.draw_path(p1, p2) self._SLICER_PIPE.show() self._previous_pos = event.pos() super(NodeViewer, self).mouseMoveEvent(event) return if self.MMB_state and self.ALT_state: pos_x = (event.x() - self._previous_pos.x()) zoom = 0.1 if pos_x > 0 else -0.1 self._set_viewer_zoom(zoom, 0.05, pos=event.pos()) elif self.MMB_state or (self.LMB_state and self.ALT_state): pos_x = (event.x() - self._previous_pos.x()) pos_y = (event.y() - self._previous_pos.y()) self._set_viewer_pan(pos_x, pos_y) if self.LMB_state and self._rubber_band.isVisible(): rect = QtCore.QRect(self._origin_pos, event.pos()).normalized() map_rect = self.mapToScene(rect).boundingRect() path = QtGui.QPainterPath() path.addRect(map_rect) self._rubber_band.setGeometry(rect) self.scene().setSelectionArea(path, QtCore.Qt.IntersectsItemShape) self.scene().update(map_rect) if self.SHIFT_state or self.CTRL_state: nodes, pipes = self.selected_items() for pipe in self._prev_selection_pipes: pipe.setSelected(True) for node in self._prev_selection_nodes: node.selected = True if self.CTRL_state: for pipe in pipes: pipe.setSelected(False) for node in nodes: node.selected = False elif self.LMB_state: self.COLLIDING_state = False nodes = self.selected_nodes() if len(nodes) == 1: node = nodes[0] for pipe in self.selected_pipes(): pipe.setSelected(False) for item in node.collidingItems(): if isinstance(item, Pipe) and item.isVisible(): if not item.input_port: continue if not item.input_port.node is node and \ not item.output_port.node is node: item.setSelected(True) self.COLLIDING_state = True break self._previous_pos = event.pos() super(NodeViewer, self).mouseMoveEvent(event)
def mousePressEvent(self, event): if event.button() == QtCore.Qt.LeftButton: self.LMB_state = True elif event.button() == QtCore.Qt.RightButton: self.RMB_state = True elif event.button() == QtCore.Qt.MiddleButton: self.MMB_state = True self._origin_pos = event.pos() self._previous_pos = event.pos() self._prev_selection_nodes, \ self._prev_selection_pipes = self.selected_items() # close tab search if self._search_widget.isVisible(): self.tab_search_toggle() # cursor pos. map_pos = self.mapToScene(event.pos()) # pipe slicer enabled. if self.ALT_state and self.SHIFT_state and self.LMB_state: self._SLICER_PIPE.draw_path(map_pos, map_pos) self._SLICER_PIPE.setVisible(True) return # pan mode. if self.ALT_state: return items = self._items_near(map_pos, None, 20, 20) nodes = [i for i in items if isinstance(i, AbstractNodeItem)] pipes = [i for i in items if isinstance(i, Pipe)] if nodes: self.MMB_state = False # toggle extend node selection. if self.LMB_state: if self.SHIFT_state: for node in nodes: node.selected = not node.selected elif self.CTRL_state: for node in nodes: node.selected = False # update the recorded node positions. self._node_positions.update( {n: n.xy_pos for n in self.selected_nodes()}) # show selection selection marquee. if self.LMB_state and not items: rect = QtCore.QRect(self._previous_pos, QtCore.QSize()) rect = rect.normalized() map_rect = self.mapToScene(rect).boundingRect() self.scene().update(map_rect) self._rubber_band.setGeometry(rect) self._rubber_band.show() # allow new live pipe with the shift modifier. # if self.LMB_state: # if (not self.SHIFT_state and not self.CTRL_state) or\ # (self.SHIFT_state and pipes): if not self._LIVE_PIPE.isVisible(): super(NodeViewer, self).mousePressEvent(event)