Exemple #1
0
 def mouseMoveEvent(self, event: QGraphicsSceneMouseEvent):
     drag = QDrag(event.widget())
     mime = QMimeData()
     mime.setText(str(self.id))
     drag.setMimeData(mime)
     # self.setCursor(Qt.ClosedHandCursor)
     drag.exec_()
Exemple #2
0
    def mouseMoveEvent(self, event):
        if (self._clickPos is None
                or (event.pos() - self._clickPos).manhattanLength() <
                QApplication.startDragDistance()):
            return

        # _log.debug("Drag move")
        # render before detachment otherwise it might look ugly
        pixmap = QPixmap(self.size())
        self.render(pixmap)

        self.setVisible(False)
        if len(self._dock.parentContainer.flatDockList) == 1:
            self._dock.parentContainer.setVisible(False)

        # Build drag object
        event.accept()
        drag = QDrag(self)
        mimeData = QMimeData()
        encodedData = QByteArray(pickle.dumps(self._dock.uid))
        mimeData.setData(MIME_TYPE, encodedData)
        drag.setMimeData(mimeData)
        drag.setPixmap(pixmap)
        action = drag.exec_(Qt.MoveAction)

        _log.debug("After drag. Action: {}".format(action))
        if Qt.IgnoreAction == action:
            _log.debug("D'n'D canceled")
            self.setVisible(True)
            self._dock.parentContainer.setVisible(True)
Exemple #3
0
 def startDrag(self, dropActions):
     """Reimplement Qt Method - handle drag event"""
     data = QMimeData()
     data.setUrls([QUrl(fname) for fname in self.get_selected_filenames()])
     drag = QDrag(self)
     drag.setMimeData(data)
     drag.exec_()
Exemple #4
0
 def startDrag(self, dropActions):
     """Reimplement Qt Method - handle drag event"""
     data = QMimeData()
     data.setUrls([QUrl(fname) for fname in self.get_selected_filenames()])
     drag = QDrag(self)
     drag.setMimeData(data)
     drag.exec_()
Exemple #5
0
 def mouseMoveEvent(self, event):
     """Override Qt method"""
     if event.buttons() == Qt.MouseButtons(Qt.LeftButton) and \
        (event.pos() - self.__drag_start_pos).manhattanLength() > \
             QApplication.startDragDistance():
         drag = QDrag(self)
         mimeData = QMimeData()
         # Converting id's to long to avoid an OverflowError with PySide
         if PY2:
             ancestor_id = long(id(self.ancestor))
             parent_widget_id = long(id(self.parentWidget()))
             self_id = long(id(self))
         else:
             ancestor_id = id(self.ancestor)
             parent_widget_id = id(self.parentWidget())
             self_id = id(self)
         mimeData.setData("parent-id", QByteArray.number(ancestor_id))
         mimeData.setData("tabwidget-id",
                          QByteArray.number(parent_widget_id))
         mimeData.setData("tabbar-id", QByteArray.number(self_id))
         mimeData.setData(
             "source-index",
             QByteArray.number(self.tabAt(self.__drag_start_pos)))
         drag.setMimeData(mimeData)
         drag.exec_()
     QTabBar.mouseMoveEvent(self, event)
Exemple #6
0
    def mouseMoveEvent(self, event):
        """Drag and drop layer with mouse movement.

        Parameters
        ----------
        event : qtpy.QtCore.QEvent
            Event from the Qt context.
        """
        position = np.array([event.pos().x(), event.pos().y()])
        distance = np.linalg.norm(position - self._drag_start_position)
        if (distance < QApplication.startDragDistance()
                or self._drag_name is None):
            return
        mimeData = QMimeData()
        mimeData.setText(self._drag_name)
        drag = QDrag(self)
        drag.setMimeData(mimeData)
        drag.setHotSpot(event.pos() - self.rect().topLeft())
        drag.exec_()
        # Check if dragged layer still exists or was deleted during drag
        names = [layer.name for layer in self.layers]
        dragged_layer_exists = self._drag_name in names
        if self._drag_name is not None and dragged_layer_exists:
            index = self.layers.index(self._drag_name)
            layer = self.layers[index]
            self._ensure_visible(layer)
Exemple #7
0
    def mouseMoveEvent(self, event):
        distance = (event.pos() - self.dragStartPosition).manhattanLength()
        if distance < QApplication.startDragDistance():
            return
        mimeData = QMimeData()
        if not self.layer.selected:
            name = self.layer.name
        else:
            name = ''
            for layer in self.layer.viewer.layers:
                if layer.selected:
                    name = layer.name + '; ' + name
            name = name[:-2]
        mimeData.setText(name)
        drag = QDrag(self)
        drag.setMimeData(mimeData)
        drag.setHotSpot(event.pos() - self.rect().topLeft())
        dropAction = drag.exec_(Qt.MoveAction | Qt.CopyAction)

        if dropAction == Qt.CopyAction:
            if not self.layer.selected:
                index = self.layer.viewer.layers.index(self.layer)
                self.layer.viewer.layers.pop(index)
            else:
                self.layer.viewer.layers.remove_selected()
Exemple #8
0
def copy_files_clipboard(create_folders_files):
    """Fixture to copy files/folders into the clipboard"""
    file_paths = create_folders_files[0]
    file_content = QMimeData()
    file_content.setUrls([QUrl.fromLocalFile(fname) for fname in file_paths])
    cb = QApplication.clipboard()
    cb.setMimeData(file_content, mode=cb.Clipboard)
    return file_paths
Exemple #9
0
def copy_files_clipboard(create_folders_files):
    """Fixture to copy files/folders into the clipboard"""
    file_paths = create_folders_files[0]
    file_content = QMimeData()
    file_content.setUrls([QUrl.fromLocalFile(fname) for fname in file_paths])
    cb = QApplication.clipboard()
    cb.setMimeData(file_content, mode=cb.Clipboard)
    return file_paths
Exemple #10
0
 def mouseMoveEvent(self, _event):
     item = self.currentItem()
     if item is not None:
         reaction: cobra.Reaction = item.data(3, 0)
         mime_data = QMimeData()
         mime_data.setText(reaction.id)
         drag = QDrag(self)
         drag.setMimeData(mime_data)
         drag.exec_(Qt.CopyAction | Qt.MoveAction, Qt.CopyAction)
Exemple #11
0
def export_to_clipboard_as_svg(scene):
    print(f"exporting SVG to clipboard")
    buffer = QBuffer()
    svg_gen = QSvgGenerator()
    svg_gen.setOutputDevice(buffer)
    render_to_svggen(scene, svg_gen)
    data = QMimeData()
    data.setData("image/svg+xml", buffer.buffer())
    qApp.clipboard().setMimeData(data, QClipboard.Clipboard)
Exemple #12
0
 def dropMimeData(self, parent: QTreeWidgetItem, index: int,
                  data: QMimeData, a) -> bool:
     if data.hasUrls():
         for url in data.urls():
             lf = url.toLocalFile()
             if lf.endswith((".xml", ".tiff", ".tif")):
                 self.update(lf)
                 return True
     return False
Exemple #13
0
 def mouseMoveEvent(self, event):
     """Override Qt method"""
     if event.buttons() == Qt.MouseButtons(Qt.LeftButton) and \
        (event.pos() - self.__drag_start_pos).manhattanLength() > \
             QApplication.startDragDistance():
         drag = QDrag(self)
         mimeData = QMimeData()
         # Converting id's to long to avoid an OverflowError with PySide
         if PY2:
             ancestor_id = long(id(self.ancestor))
             parent_widget_id = long(id(self.parentWidget()))
             self_id = long(id(self))
         else:
             ancestor_id = id(self.ancestor)
             parent_widget_id = id(self.parentWidget())
             self_id = id(self)
         mimeData.setData("parent-id", QByteArray.number(ancestor_id))
         mimeData.setData("tabwidget-id",
                          QByteArray.number(parent_widget_id))
         mimeData.setData("tabbar-id", QByteArray.number(self_id))
         mimeData.setData("source-index", 
                      QByteArray.number(self.tabAt(self.__drag_start_pos)))
         drag.setMimeData(mimeData)
         drag.exec_()
     QTabBar.mouseMoveEvent(self, event)
Exemple #14
0
    def mimeData(self, indexes):
        self.indexes = [
            index.internalPointer() for index in indexes if index.column() == 0
        ]
        mimedata = QMimeData()
        mimedata.setData('application/x-qabstractitemmodeldatalist',
                         QByteArray())

        # run virtual function
        self.dragStartEvent(self.indexes)
        return mimedata
Exemple #15
0
 def mouseMoveEvent(self, event):
     position = np.array([event.pos().x(), event.pos().y()])
     distance = np.linalg.norm(position - self.drag_start_position)
     if (distance < QApplication.startDragDistance()
             or self.drag_name is None):
         return
     mimeData = QMimeData()
     mimeData.setText(self.drag_name)
     drag = QDrag(self)
     drag.setMimeData(mimeData)
     drag.setHotSpot(event.pos() - self.rect().topLeft())
     dropAction = drag.exec_()
    def eventFilter(self, source, event):
        if isinstance(source, QListView):
            if event.type() == QEvent.KeyPress and event.key() == Qt.Key_C and event.modifiers() & Qt.ControlModifier:
                rows = sorted(source.selectionModel().selectedRows())
                data = QMimeData()
                data.setText("\n".join(str(source.model().data(row)) for row in rows))

                QApplication.instance().clipboard().setMimeData(data)

                return True

        return False
    def _copy(self):
        '''
        Copies all of the selected items to the clipboard.
        '''
        # Copy the urls of the selected files to the clipboard.
        filePath = self._model.filePath
        urls = [QUrl.fromLocalFile(filePath(index)) for index in self._view.selectedIndexes()]

        mime_data = QMimeData()
        mime_data.setUrls(urls)

        clipboard = QApplication.clipboard()
        clipboard.setMimeData(mime_data)
Exemple #18
0
    def on_copy(self):
        """
        copy file or dir , save path in pasteAction data.
        :return:
        """
        path = self.get_current_file_path()
        self.pasteAction.setEnabled(True)
        self.pasteAction.setData(path)

        data = QMimeData()
        data.setUrls([QUrl.fromLocalFile(path)])  # 复制到系统剪贴板

        clip = QApplication.clipboard()
        clip.setMimeData(data)
Exemple #19
0
    def mimeData(self, indexes):
        # type: (List[QModelIndex])
        """Function used for preparing tree data for drag+drop. Preserves the hierarchy of the dropped item.

        """
        mimedata = QMimeData()
        item = self.getItem(indexes[0])

        # track representations and hierarchal relationships
        hierarchy_builder = MimeHierarchyTool()
        hierarchy_rep = hierarchy_builder.build_config(item)

        data = json.dumps(hierarchy_rep)
        mimedata.setText(data)
        return mimedata
Exemple #20
0
    def dropMimeData(
        self,
        data: QMimeData,
        action: Qt.DropAction,
        destRow: int,
        col: int,
        parent: QModelIndex,
    ) -> bool:
        """Handles `data` from a drag and drop operation ending with `action`.

        The specified row, column and parent indicate the location of an item
        in the model where the operation ended. It is the responsibility of the
        model to complete the action at the correct location.

        Returns
        -------
        bool ``True`` if the `data` and `action` were handled by the model;
            otherwise returns ``False``.
        """
        if not data or action != Qt.MoveAction:
            return False
        if not data.hasFormat(self.mimeTypes()[0]):
            return False

        if isinstance(data, ItemMimeData):
            moving_indices = data.indices

            logger.debug(f"dropMimeData: indices {moving_indices} ➡ {destRow}")

            if len(moving_indices) == 1:
                return self._root.move(moving_indices[0], destRow)
            else:
                return bool(self._root.move_multiple(moving_indices, destRow))
        return False
Exemple #21
0
 def mouseMoveEvent(self, event):
     position = np.array([event.pos().x(), event.pos().y()])
     distance = np.linalg.norm(position - self.drag_start_position)
     if (distance < QApplication.startDragDistance()
             or self.drag_name is None):
         return
     mimeData = QMimeData()
     mimeData.setText(self.drag_name)
     drag = QDrag(self)
     drag.setMimeData(mimeData)
     drag.setHotSpot(event.pos() - self.rect().topLeft())
     drag.exec_()
     if self.drag_name is not None:
         index = self.layers.index(self.drag_name)
         layer = self.layers[index]
         self._ensure_visible(layer)
Exemple #22
0
def test_add_drop(botlicense):
    qtbot, dialog = botlicense
    mime_no_data = QMimeData()
    mime_data = QMimeData()
    mime_data.setUrls([QUrl.fromLocalFile(EXPIRED_LICENSE_PATH)])

    event = create_event(dialog.table, mime_data, QDropEvent)
    dialog.table.dropEvent(event)

    assert bool(dialog.count())
    assert dialog.count() == 5

    event = create_event(dialog.table, mime_no_data, QDropEvent)
    dialog.table.dropEvent(event)

    assert bool(dialog.count())
    assert dialog.count() == 5
Exemple #23
0
    def mimeData(self, indexes):
        def path(x):
            return "/".join(x.path)

        def node(x):
            return self.node_from_index(x)

        mimedata = QMimeData()
        data = QByteArray()
        stream = QDataStream(data, QIODevice.WriteOnly)

        for path in set(path(node(index)) for index
                        in indexes if index.isValid()):
            stream.writeQString(path)

        mimedata.setData("application/x_nodepath.list", data)
        return mimedata
Exemple #24
0
def test_drag_move_events(botlicense):
    qtbot, dialog = botlicense

    mime_data = QMimeData()
    mime_no_data = QMimeData()
    mime_data.setUrls([QUrl.fromLocalFile(EXPIRED_LICENSE_PATH)])

    event = create_event(dialog.table, mime_data, QDragEnterEvent)
    dialog.table.dragEnterEvent(event)

    event = create_event(dialog.table, mime_no_data, QDragEnterEvent)
    dialog.table.dragEnterEvent(event)

    event = create_event(dialog.table, mime_data, QDragMoveEvent)
    dialog.table.dragMoveEvent(event)

    event = create_event(dialog.table, mime_no_data, QDragMoveEvent)
    dialog.table.dragMoveEvent(event)

    event = QDragLeaveEvent()
    dialog.table.dragLeaveEvent(event)
Exemple #25
0
    def mouseMoveEvent(self, event):
        from qtpy.QtCore import QMimeData, QByteArray
        from qtpy.QtGui import QPixmap, QDrag

        if not (event.button() != Qt.LeftButton
                and isinstance(self.dragLabel, QLabel)):
            return

        if (event.pos() - self.dragStartPosition
            ).manhattanLength() < QApplication.startDragDistance():
            return

        axis_index = self.filters_layout.indexOf(self.dragLabel) // 2

        # prepare hotSpot, mimeData and pixmap objects
        mimeData = QMimeData()
        mimeData.setText(self.dragLabel.text())
        mimeData.setData("application/x-axis-index",
                         QByteArray.number(axis_index))
        pixmap = QPixmap(self.dragLabel.size())
        self.dragLabel.render(pixmap)

        # prepare drag object
        drag = QDrag(self)
        drag.setMimeData(mimeData)
        drag.setPixmap(pixmap)
        drag.setHotSpot(event.pos() - self.dragStartPosition)

        drag.exec_(Qt.MoveAction | Qt.CopyAction, Qt.CopyAction)
Exemple #26
0
    def _parse_dropped_data(self, mime_data: QMimeData) -> pd.DataFrame:
        byte_data = mime_data.data('application/node')
        as_dict = pickle.loads(byte_data)

        as_dataframe = pd.DataFrame.from_dict(as_dict)
        # filter out rows containing any zero values
        # this avoids adding data associated with h5py.Group objects when
        # dragging from a DraggableTreeModel
        as_dataframe = as_dataframe.loc[as_dataframe.all(1), :]
        columns = np.isin(as_dataframe.columns, self._dataFrame.columns)
        as_dataframe = as_dataframe.loc[:, columns]
        as_dataframe.astype(self._dataFrame.dtypes.to_dict(), copy=False)
        return as_dataframe
Exemple #27
0
    def mouseMoveEvent(self, event):
        """Override Qt method"""
        if event.buttons() == Qt.MouseButtons(Qt.LeftButton) and \
           (event.pos() - self.__drag_start_pos).manhattanLength() > \
                QApplication.startDragDistance():
            drag = QDrag(self)
            mimeData = QMimeData()

            ancestor_id = to_text_string(id(self.ancestor))
            parent_widget_id = to_text_string(id(self.parentWidget()))
            self_id = to_text_string(id(self))
            source_index = to_text_string(self.tabAt(self.__drag_start_pos))

            mimeData.setData("parent-id", to_binary_string(ancestor_id))
            mimeData.setData("tabwidget-id",
                             to_binary_string(parent_widget_id))
            mimeData.setData("tabbar-id", to_binary_string(self_id))
            mimeData.setData("source-index", to_binary_string(source_index))

            drag.setMimeData(mimeData)
            drag.exec_()
        QTabBar.mouseMoveEvent(self, event)
Exemple #28
0
 def mimeData(self, indexes):
     mimedata = QMimeData()
     mimedata.setText(str(indexes[0].row()))
     return mimedata
Exemple #29
0
 def canDropMimeData(self, data: QMimeData, *args):
     if any([data.hasFormat(typ) for typ in self.mimeTypes()]):
         return True
     else:
         return False
Exemple #30
0
 def mimeData(self, indices) -> QMimeData:
     data = dict(self.get_nodes_as_dict(indices))
     mime = QMimeData()
     mime.setData('application/node', pickle.dumps(data))
     return mime