Exemplo n.º 1
0
def dragEnterLeave(widget: QWidget,
                   mime: QMimeData,
                   pos=QPoint(),
                   action=Qt.CopyAction,
                   buttons=Qt.LeftButton,
                   modifiers=Qt.NoModifier) -> None:
    """
    Simulate a drag/move/leave interaction on the `widget`.

    A QDragEnterEvent, QDragMoveEvent and a QDragLeaveEvent are created
    and dispatched to the widget.
    """
    if pos.isNull():
        pos = widget.rect().center()

    ev = QDragEnterEvent(pos, action, mime, buttons, modifiers)
    ev.setAccepted(False)
    QApplication.sendEvent(widget, ev)

    ev = QDragMoveEvent(pos, action, mime, buttons, modifiers,
                        QDragMoveEvent.DragMove)
    ev.setAccepted(False)
    QApplication.sendEvent(widget, ev)

    ev = QDragLeaveEvent()
    ev.setAccepted(False)
    QApplication.sendEvent(widget, ev)
    return
Exemplo n.º 2
0
 def _drag_enter_event(self, url):
     # make sure data does not get garbage collected before it used
     self.event_data = data = QMimeData()
     data.setUrls([QUrl(url)])
     return QDragEnterEvent(
         QPoint(0, 0), Qt.MoveAction, data,
         Qt.NoButton, Qt.NoModifier)
Exemplo n.º 3
0
 def _drag_enter_event(self, url):
     # make sure data does not get garbage collected before it used
     # pylint: disable=attribute-defined-outside-init
     self.event_data = data = QMimeData()
     data.setUrls([QUrl(url)])
     return QDragEnterEvent(QPoint(0, 0), Qt.MoveAction, data, Qt.NoButton,
                            Qt.NoModifier)
 def test_drop(self):
     widget = self.widget
     with tempfile.TemporaryDirectory() as tmpdir:
         urlpath = QUrl.fromLocalFile(tmpdir)
         data = QMimeData()
         data.setUrls([urlpath])
         pos = widget.recent_cb.rect().center()
         actions = Qt.LinkAction | Qt.CopyAction
         ev = QDragEnterEvent(pos, actions, data, Qt.LeftButton,
                              Qt.NoModifier)
         assert QApplication.sendEvent(widget.recent_cb, ev)
         self.assertTrue(ev.isAccepted())
         del ev
         ev = QDropEvent(pos, actions, data, Qt.LeftButton, Qt.NoModifier,
                         QDropEvent.Drop)
         assert QApplication.sendEvent(widget.recent_cb, ev)
         self.assertTrue(ev.isAccepted())
         del ev
         self.assertEqual(widget.currentPath, urlpath.toLocalFile())
         self._startandwait(widget)
         self.widget.commit()
Exemplo n.º 5
0
def dragDrop(widget: 'QWidget',
             mime: QMimeData,
             pos: QPoint = QPoint(-1, -1),
             action=Qt.CopyAction,
             buttons=Qt.LeftButton,
             modifiers=Qt.NoModifier) -> bool:
    if pos == QPoint(-1, -1):
        pos = widget.rect().center()

    ev = QDragEnterEvent(pos, action, mime, buttons, modifiers)
    ev.setAccepted(False)
    QApplication.sendEvent(widget, ev)
    if not ev.isAccepted():
        return False
    ev = QDropEvent(QPointF(pos), action, mime, buttons, modifiers)
    ev.setAccepted(False)
    QApplication.sendEvent(widget, ev)
    return ev.isAccepted()
 def test_drop(self):
     widget = self.widget
     with tempfile.TemporaryDirectory() as tmpdir:
         urlpath = QUrl.fromLocalFile(tmpdir)
         data = QMimeData()
         data.setUrls([urlpath])
         pos = widget.recent_cb.rect().center()
         actions = Qt.LinkAction | Qt.CopyAction
         ev = QDragEnterEvent(pos, actions, data,
                              Qt.LeftButton, Qt.NoModifier)
         assert QApplication.sendEvent(widget.recent_cb, ev)
         self.assertTrue(ev.isAccepted())
         del ev
         ev = QDropEvent(pos, actions, data,
                         Qt.LeftButton, Qt.NoModifier, QDropEvent.Drop)
         assert QApplication.sendEvent(widget.recent_cb, ev)
         self.assertTrue(ev.isAccepted())
         del ev
         self.assertEqual(widget.recent_paths[0].abspath,
                          urlpath.toLocalFile())
         self._startandwait(widget)
         self.widget.commit()
Exemplo n.º 7
0
 def _drag_enter_event(self, variables):
     self.event_data = mime = QMimeData()
     mime.setProperty("_items", variables)
     return QDragEnterEvent(QPoint(0, 0), Qt.MoveAction, mime, Qt.NoButton,
                            Qt.NoModifier)
Exemplo n.º 8
0
 def _drag_enter_event(self, variables):
     # pylint: disable=attribute-defined-outside-init
     self.event_data = mime = QMimeData()
     mime.setProperty("_items", variables)
     return QDragEnterEvent(QPoint(0, 0), Qt.MoveAction, mime, Qt.NoButton,
                            Qt.NoModifier)
Exemplo n.º 9
0
 def dragEnterEvent(self, event: QDragEnterEvent):
     if event.source() != self:
         self.__disconnected = True
         self.model().dataChanged.disconnect(self.__data_changed_cb)
     super().dragEnterEvent(event)
Exemplo n.º 10
0
def dragDrop(widget: QWidget,
             mime: QMimeData,
             pos: QPoint = QPoint(),
             action=Qt.CopyAction,
             buttons=Qt.LeftButton,
             modifiers=Qt.NoModifier) -> bool:
    """
    Simulate a drag/drop interaction on the `widget`.

    A `QDragEnterEvent`, `QDragMoveEvent` and `QDropEvent` are created and
    dispatched to the `widget`. However if any of the `QDragEnterEvent` or
    `QDragMoveEvent` are not accepted, a `QDragLeaveEvent` is dispatched
    to 'reset' the widget state before this function returns `False`

    Parameters
    ----------
    widget: QWidget
        The target widget.
    mime: QMimeData
        The mime data associated with the drag/drop.
    pos: QPoint
        Position of the drop
    action: Qt.DropActions
        Type of acceptable drop actions
    buttons: Qt.MouseButtons:
        Pressed mouse buttons.
    modifiers: Qt.KeyboardModifiers
        Pressed keyboard modifiers.

    Returns
    -------
    state: bool
        Were the events accepted.

    See Also
    --------
    QDragEnterEvent, QDropEvent
    """
    if pos.isNull():
        pos = widget.rect().center()

    ev = QDragEnterEvent(pos, action, mime, buttons, modifiers)
    ev.setAccepted(False)
    QApplication.sendEvent(widget, ev)

    ev = QDragMoveEvent(pos, action, mime, buttons, modifiers)
    ev.setAccepted(False)
    QApplication.sendEvent(widget, ev)

    if not ev.isAccepted():
        QApplication.sendEvent(widget, QDragLeaveEvent())
        return False

    ev = QDropEvent(QPointF(pos), action, mime, buttons, modifiers)
    ev.setAccepted(False)
    QApplication.sendEvent(widget, ev)
    return ev.isAccepted()