def mouseMoveEvent(self, event): QGraphicsItem.mouseMoveEvent(self, event) delta = self.lastMousePos - event.pos() self.lastNodePos = self.scenePos() # resize if self.bResize: delta = event.scenePos() - self.mousePressPos if self.resizeDirection == (1, 0): # right edge resize newWidth = delta.x() + self.initialRectWidth if newWidth > self.minWidth: self.label().width = newWidth self.rect.setRight(newWidth) self.label().adjustSizes() elif self.resizeDirection == (0, -1): newHeight = delta.y() + self.initialRectHeight newHeight = max(newHeight, self.label().h + 20.0) if newHeight > self.minHeight: # bottom edge resize self.rect.setHeight(newHeight) elif self.resizeDirection == (1, -1): newWidth = delta.x() + self.initialRectWidth newHeight = delta.y() + self.initialRectHeight newHeight = max(newHeight, self.label().h + 20.0) if newHeight > self.minHeight and newWidth > self.minWidth: self.label().width = newWidth self.rect.setRight(newWidth) self.label().setTextWidth(newWidth) self.rect.setHeight(newHeight) self.update() self.label().update() self.lastMousePos = event.pos()
def __init__(self, parent=None, **kwargs): QGraphicsItem.__init__(self, parent=parent) self.enabled = kwargs.get('enabled', True) self.color = kwargs.get('color', QColor(31, 32, 33, 255)) self.disabled_color = kwargs.get('disabled_color', QColor(125, 125, 125, 255)) self.selected_color = kwargs.get('selected_color', QColor(30, 35, 40, 255)) self.disabled_border_width = kwargs.get('disabled_border_width', 1.5) self.selected_border_width = kwargs.get('selected_border_width', 1.5) self.disabled_border_color = kwargs.get('disabled_border_color', QColor(40, 40, 40, 255)) self.selected_border_color = kwargs.get('selected_border_color', QColor(250, 210, 90, 255)) self.disabled_shadow_color = kwargs.get('disabled_shadow_color', QColor(35, 35, 35, 60)) self.selected_shadow_color = kwargs.get('selected_shadow_color', QColor(105, 55, 0, 60)) self.disabled_border_style = kwargs.get('disabled_border_style', Qt.DashDotLine) self.selected_border_style = kwargs.get('selected_border_style', Qt.DashLine) self._border_width = kwargs.get('border_width', 1.5) self._shadow_color = kwargs.get('shadow_color', QColor(0, 0, 0, 60)) self._border_color = kwargs.get('border_color', QColor(10, 10, 10, 255)) self._border_type = kwargs.get('border_type', Qt.SolidLine) self._current_pos = QPointF(0, 0) self._new_pos = QPointF(0, 0) self._width = kwargs.get('width', 120) self._height = kwargs.get('height', 40) self._sizes = [0, 0, self._width, self._height, 7, 7] # [x, y, width, height, radius_x, radius_x] self._is_hovered = False self._render_effects = True
def mousePressEvent(self, event): QGraphicsItem.mousePressEvent(self, event) self.mousePressPos = event.scenePos() self.lastNodePos = self.scenePos() pBottomRight = self.rect.bottomRight() bottomRightRect = QtCore.QRectF(pBottomRight.x() - 6, pBottomRight.y() - 6, 5, 5) # detect where on the node if bottomRightRect.contains(event.pos()) and self.expanded: self.initialRectWidth = self.rect.width() self.initialRectHeight = self.rect.height() self.resizeDirection = (1, 1) self.setFlag(QGraphicsItem.ItemIsMovable, False) self.bResize = True elif event.pos().x() > (self.rect.width() - 20) and self.expanded: self.initialRectWidth = self.rect.width() self.resizeDirection = (1, 0) self.setFlag(QGraphicsItem.ItemIsMovable, False) self.bResize = True elif (event.pos().y() + self.label().defaultHeight) > ( self.rect.height() - 30) and self.expanded: self.initialRectHeight = self.rect.height() self.resizeDirection = (0, 1) self.setFlag(QGraphicsItem.ItemIsMovable, False) self.bResize = True if self.expanded: self.nodesToMove.clear() self.updateChildrens(self.collidingItems()) else: nodes = [] for nodename in self.nodesNamesToMove: nodes.append(self.graph().nodes[nodename]) self.updateChildrens(nodes)
def __init__(self, name, graph, w=8000, color=Colors.NodeBackgrounds, headColor=Colors.NodeNameRect, bUseTextureBg=False): QGraphicsItem.__init__(self) NodeBase.__init__(self, name, graph) self.setCacheMode(QGraphicsItem.DeviceCoordinateCache) self.opt_node_base_color = Colors.NodeBackgrounds self.opt_selected_pen_color = Colors.NodeSelectedPenColor self.opt_pen_selected_type = QtCore.Qt.SolidLine self._left_stretch = 0 self.color = color self.height_offset = 3 self.nodeMainGWidget = QGraphicsWidget(self) self.nodeMainGWidget.setObjectName('{0}MainLayout'.format(name)) self._w = 0 self.h = 40 self.sizes = [0, 0, self.w, self.h, 10, 10] self.w = w self.setFlag(QGraphicsItem.ItemIsMovable) self.setFlag(QGraphicsItem.ItemIsFocusable) self.setFlag(QGraphicsItem.ItemIsSelectable) self.setFlag(QGraphicsItem.ItemSendsGeometryChanges) self.custom_widget_data = {} # node name self.label = weakref.ref(NodeName(self, bUseTextureBg, headColor)) # set node layouts self.nodeMainGWidget.setParentItem(self) # main self.portsMainLayout = QGraphicsLinearLayout(QtCore.Qt.Horizontal) self.portsMainLayout.setSizePolicy(QSizePolicy.Maximum, QSizePolicy.Maximum) self.portsMainLayout.setContentsMargins(1, 1, 1, 1) self.nodeMainGWidget.setLayout(self.portsMainLayout) self.nodeMainGWidget.setX(self.nodeMainGWidget.x()) # inputs layout self.inputsLayout = QGraphicsLinearLayout(QtCore.Qt.Vertical) self.inputsLayout.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Maximum) self.inputsLayout.setContentsMargins(1, 1, 1, 1) self.portsMainLayout.addItem(self.inputsLayout) # outputs layout self.outputsLayout = QGraphicsLinearLayout(QtCore.Qt.Vertical) self.outputsLayout.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Maximum) self.outputsLayout.setContentsMargins(1, 1, 1, 1) self.portsMainLayout.addItem(self.outputsLayout) self.setZValue(1) self.tweakPosition() self.icon = None self._Constraints = {} self.asGraphSides = False self.isTemp = False
def itemChange(self, change, value): if change == self.ItemPositionChange: # grid snapping value.setX( roundup( value.x() - self.graph().grid_size + self.graph().grid_size / 3.0, self.graph().grid_size)) value.setY( roundup( value.y() - self.graph().grid_size + self.graph().grid_size / 3.0, self.graph().grid_size)) value.setY(value.y() - 2) return value return QGraphicsItem.itemChange(self, change, value)
def mouseReleaseEvent(self, event): self.update() QGraphicsItem.mouseReleaseEvent(self, event)
def mousePressEvent(self, event): self.update() # self.setCursor(QtCore.Qt.ClosedHandCursor) QGraphicsItem.mousePressEvent(self, event)
def itemChange(self, change, value): return QGraphicsItem.itemChange(self, change, value)
def hoverLeaveEvent(self, event): QGraphicsItem.hoverLeaveEvent(self, event) self._is_hovered = False
def hoverEnterEvent(self, event): QGraphicsItem.hoverEnterEvent(self, event) self._is_hovered = True
def mouseDoubleClickEvent(self, event): self.update() QGraphicsItem.mouseDoubleClickEvent(self, event)
def mousePressEvent(self, event): self.update() QGraphicsItem.mousePressEvent(self, event) self._current_pos = self.pos()
def mouseReleaseEvent(self, event): QGraphicsItem.mouseReleaseEvent(self, event) self.bResize = False