Ejemplo n.º 1
0
 def addCommentAct(self):
     mimeData = QtCore.QMimeData()
     data = 'Comment'
     mimeData.setText(data)
     drag = QtGui.QDrag(self)
     drag.setMimeData(mimeData)
     drag.exec_(QtCore.Qt.CopyAction)
Ejemplo n.º 2
0
 def graphicsMouseMoveEvent(self, event, itemId=0):
     """This function is called by the owned
     :class:`~ts2.scenery.helper.TrackGraphicsItem` to handle
     its :meth:`~ts2.scenery.helper.TrackGraphicsItem.mouseMoveEvent`.
     Reimplemented in the ResizableItem class to begin a drag operation on
     corners."""
     if event.buttons() == Qt.LeftButton and \
        self.simulation.context == utils.Context.EDITOR_SCENERY:
         if QtCore.QLineF(event.scenePos(),
                          event.buttonDownScenePos(
                              Qt.LeftButton)).length() < 3.0:
             return
         drag = QtGui.QDrag(event.widget())
         mime = QtCore.QMimeData()
         pos = event.buttonDownScenePos(Qt.LeftButton) - self.origin
         if QtCore.QRectF(-5, -5, 9, 9).contains(pos):
             movedEnd = "start"
         elif QtCore.QRectF(self.end.x() - self.origin.x() - 5,
                            self.end.y() - self.origin.y() - 5, 9,
                            9).contains(pos):
             movedEnd = "end"
             pos -= self.end - self.origin
         # elif self._gi[itemId].shape().contains(pos):
         else:
             movedEnd = "origin"
         if movedEnd is not None:
             mime.setText(
                 type(self).__name__ + "#" + str(self.tiId) + "#" +
                 str(pos.x()) + "#" + str(pos.y()) + "#" + movedEnd)
             drag.setMimeData(mime)
             drag.exec_()
Ejemplo n.º 3
0
    def mousePressEvent(self, event):
        super(NodeBoxTreeWidget, self).mousePressEvent(event)
        item_clicked = self.currentItem()
        if not item_clicked:
            event.ignore()
            return
        # check if clicked item is a category
        if item_clicked.bCategory:
            event.ignore()
            return
        # find top level parent
        rootItem = item_clicked
        while not rootItem.parent() is None:
            rootItem = rootItem.parent()
        packageName = rootItem.text(0)
        pressed_text = item_clicked.text(0)
        libName = item_clicked.libName

        if pressed_text in self.categoryPaths.keys():
            event.ignore()
            return

        jsonTemplate = NodeBase.jsonTemplate()
        jsonTemplate['package'] = packageName
        jsonTemplate['lib'] = libName
        jsonTemplate['type'] = pressed_text
        jsonTemplate['name'] = pressed_text
        jsonTemplate['uuid'] = str(uuid.uuid4())
        jsonTemplate['meta']['label'] = pressed_text

        # TODO: Rewrite self.bGripsEnabled. Node box can be floating window or a tool.
        # If node box is a tool it onbly can create nodes by dragging and dropping
        if self.canvas.pressedPin is not None and self.bGripsEnabled:
            a = self.canvas.mapToScene(self.canvas.mouseReleasePos)
            jsonTemplate["x"] = a.x()
            jsonTemplate["y"] = a.y()
            node = self.canvas.createNode(jsonTemplate)
            self.canvas.hideNodeBox()
            pressedPin = self.canvas.pressedPin
            if pressedPin.direction == PinDirection.Input:
                for pin in node.UIoutputs.values():
                    wire = self.canvas.connectPinsInternal(pressedPin, pin)
                    if wire is not None:
                        EditorHistory().saveState("Connect pins", modify=True)
                        break
            if pressedPin.direction == PinDirection.Output:
                for pin in node.UIinputs.values():
                    wire = self.canvas.connectPinsInternal(pin, pressedPin)
                    if wire is not None:
                        EditorHistory().saveState("Connect pins", modify=True)
                        break
        else:
            drag = QtGui.QDrag(self)
            mime_data = QtCore.QMimeData()

            pressed_text = json.dumps(jsonTemplate)
            mime_data.setText(pressed_text)
            drag.setMimeData(mime_data)
            drag.exec_()
Ejemplo n.º 4
0
    def addPinAct(self):
        mimeData = QtCore.QMimeData()

        data = 'ipin'
        mimeData.setText(data)
        drag = QtGui.QDrag(self)
        drag.setMimeData(mimeData)
        drag.exec_(QtCore.Qt.CopyAction)
 def mouseMoveEvent(self, event):
     name = self.label
     drag = QtGui.QDrag(self)
     ba = bytearray(name, "utf-8")
     drag_mime_data = QtCore.QMimeData()
     drag_mime_data.setData(self.QMimeDataType, QtCore.QByteArray(ba))
     drag.setMimeData(drag_mime_data)
     drag.exec_(QtCore.Qt.MoveAction)
Ejemplo n.º 6
0
def lwMousePressEvent(self, event):
    QListWidget.mousePressEvent(self, event)
    w = self.itemWidget(self.currentItem())
    if w:
        drag = QtGui.QDrag(self)
        mime_data = QtCore.QMimeData()
        mime_data.setText("Var|" + str(w.uid))
        drag.setMimeData(mime_data)
        drag.exec_()
Ejemplo n.º 7
0
 def mouseMoveEvent(self, event):
     name = self._label
     print(name)
     drag = QtGui.QDrag(self)
     # ba = bytearray(name, 'utf-8')
     drag_mime_data = QtCore.QMimeData()
     drag_mime_data.setData(self.QMimeDataType, QtCore.QByteArray(name))
     drag.setMimeData(drag_mime_data)
     drag.exec_(QtCore.Qt.MoveAction)
Ejemplo n.º 8
0
 def clickCell(self):
     cell = self.cells.currentItem()
     if (cell):
         mimeData = QtCore.QMimeData()
         data = '@'.join([self.libraries.currentItem().text(), cell.text()])
         mimeData.setText(data)
         drag = QtGui.QDrag(self)
         drag.setMimeData(mimeData)
         drag.exec_(QtCore.Qt.CopyAction)
Ejemplo n.º 9
0
 def mousePressEvent(self, event):
     super(VariablesListWidget, self).mousePressEvent(event)
     w = self.itemWidget(self.currentItem())
     if w:
         drag = QtGui.QDrag(self)
         mime_data = QtCore.QMimeData()
         varJson = w.serialize()
         dataJson = {VARIABLE_TAG: True, VARIABLE_DATA_TAG: varJson}
         mime_data.setText(json.dumps(dataJson))
         drag.setMimeData(mime_data)
         drag.exec_()
Ejemplo n.º 10
0
 def mouseMoveEvent(self, event):
     if event.buttons() == QtCore.Qt.LeftButton and isinstance(
             self.actComp, Block):
         mimeData = QtCore.QMimeData()
         block = self.actComp
         #            attributes = {'name':c.name,'input':c.inp,'output':c.outp,'icon':c.icon,'flip':c.flip,'libname':c.libname,'type':c.type}
         #            data = '@'.join([str(attributes),str(c.parameters),str(c.properties),c.blockname,c.libname])
         data = '@'.join([block.libname, block.blockname])
         mimeData.setText(data)
         drag = QtGui.QDrag(self.parent)
         drag.setMimeData(mimeData)
         drag.exec_(QtCore.Qt.CopyAction)
Ejemplo n.º 11
0
 def startDrag(self, event):
     # create mime data object
     mime = QtCore.QMimeData()
     mime.setText(self.currentItem().text(self.columnPath))
     # start drag
     drag = QtGui.QDrag(self)
     drag.setMimeData(mime)
     if not Qt.USE_QT_PY == Qt.PYQT5:
         start = drag.start
     else:
         start = drag.exec_
     start(QtCore.Qt.MoveAction)
Ejemplo n.º 12
0
    def mousePressEvent(self, event):
        super(NodeBoxTreeWidget, self).mousePressEvent(event)
        canvas = self.parent().canvasRef()
        item_clicked = self.currentItem()
        if not item_clicked:
            event.ignore()
            return
        # check if clicked item is a category
        if item_clicked.bCategory:
            event.ignore()
            return
        # find top level parent
        rootItem = item_clicked
        while not rootItem.parent() is None:
            rootItem = rootItem.parent()
        packageName = rootItem.text(0)
        pressed_text = item_clicked.text(0)
        libName = item_clicked.libName

        if pressed_text in self.categoryPaths.keys():
            event.ignore()
            return

        try:
            mousePos = canvas.mapToScene(canvas.mousePressPose)
        except:
            mousePos = canvas.mapToScene(canvas.mousePressPose.toPoint())

        jsonTemplate = NodeBase.jsonTemplate()
        jsonTemplate['package'] = packageName
        jsonTemplate['lib'] = libName
        jsonTemplate['type'] = pressed_text
        jsonTemplate['name'] = pressed_text
        jsonTemplate['uuid'] = str(uuid.uuid4())
        jsonTemplate['x'] = mousePos.x()
        jsonTemplate['y'] = mousePos.y()
        jsonTemplate['meta']['label'] = pressed_text

        if self.bUseDragAndDrop:
            drag = QtGui.QDrag(self)
            mime_data = QtCore.QMimeData()

            pressed_text = json.dumps(jsonTemplate)
            mime_data.setText(pressed_text)
            drag.setMimeData(mime_data)
            drag.exec_()
        else:
            canvas.createNode(jsonTemplate)
Ejemplo n.º 13
0
 def graphicsMouseMoveEvent(self, event, itemId=0):
     """This function is called by the owned TrackGraphicsItem to handle
     its mouseMoveEvent. The implementation in the base class TrackItem
     begins a drag operation."""
     if itemId == 0:
         if (event.buttons() == Qt.LeftButton and self.simulation.context
                 == utils.Context.EDITOR_SCENERY):
             if QtCore.QLineF(event.scenePos(),
                              event.buttonDownScenePos(
                                  Qt.LeftButton)).length() < 3.0:
                 return
             drag = QtGui.QDrag(event.widget())
             mime = QtCore.QMimeData()
             pos = event.buttonDownScenePos(Qt.LeftButton) - self.origin
             mime.setText(
                 type(self).__name__ + "#" + str(self.tiId) + "#" +
                 str(pos.x()) + "#" + str(pos.y()) + "#" + "origin")
             drag.setMimeData(mime)
             drag.exec_()
Ejemplo n.º 14
0
    def startDrag(self, _):
        """Start drag."""

        # Can we drag?
        model = self.model()
        if not self.dragEnabled() or model is None:
            return
        model_obj = model.obj()
        if model_obj is None:
            return

        # Get selected indexes.
        selected_indexes = self.selectedIndexes()
        if not selected_indexes:
            return

        # In a write context.
        with model_obj.app.write_context():

            # Get indexes.
            sorted_indexes = sorted(selected_indexes, key=lambda i: i.row())
            first_index, last_index = sorted_indexes[0], sorted_indexes[-1]
            selection = QtCore.QItemSelection(first_index, last_index)

            # Get mime data.
            mime_data = model.mimeData(selected_indexes)
            if mime_data is None:
                return

            # Get drag actions from the model.
            drag_actions = model.supportedDragActions()

            # Start drag.
            viewport = self.viewport()
            drag = QtGui.QDrag(viewport)
            drag.setMimeData(mime_data)

            # Prepare pixmap.
            pixmap = QtGui.QPixmap(viewport.visibleRegion().boundingRect().size())
            pixmap.fill(QtCore.Qt.transparent)
            painter = QtGui.QPainter(pixmap)
            visual_rect = self.visualRegionForSelection(selection).boundingRect()
            if hasattr(viewport, "grab"):
                painter.drawPixmap(visual_rect, viewport.grab(visual_rect))
            else:
                painter.drawPixmap(
                    visual_rect,
                    QtGui.QPixmap.grabWidget(viewport, visual_rect),
                )
            painter.end()
            drag.setPixmap(pixmap)  # TODO: gradient fade if overflowing
            drag.setHotSpot(self.viewport().mapFromGlobal(QtGui.QCursor.pos()))

            # Prepare cursor.
            move_cursor = QtGui.QCursor(QtCore.Qt.DragMoveCursor)
            copy_cursor = QtGui.QCursor(QtCore.Qt.DragCopyCursor)
            drag.setDragCursor(move_cursor.pixmap(), QtCore.Qt.MoveAction)
            drag.setDragCursor(copy_cursor.pixmap(), QtCore.Qt.CopyAction)

            # Get state before.
            state_before = model_obj._state

            # Execute drag.
            try:
                action = drag.exec_(drag_actions)
            finally:
                moved_mimed_data_id = _internal_move_cache.pop(model_obj, None)

            # Move action was performed and state did not change, so item was moved
            # somewhere else. Delete the items from the list in this case.
            if moved_mimed_data_id != id(mime_data):
                if action == QtCore.Qt.MoveAction:
                    state_after = model_obj._state
                    if state_before is state_after:
                        model_obj.delete(slice(first_index.row(), last_index.row() + 1))