Module saePisan.view.components.DragDropListView

Classes

class DragDropListView (parent=None)
Expand source code
class DragDropListView(QListView):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.parent = parent
        self.setDragEnabled(True)
        self.setAcceptDrops(True)
        self.setDropIndicatorShown(True)
        self.setDefaultDropAction(Qt.DropAction.MoveAction)
        self.setSelectionMode(QAbstractItemView.SelectionMode.ExtendedSelection)

    def dragEnterEvent(self, event):
        if event.mimeData().hasText():
            event.acceptProposedAction()
        else:
            super().dragEnterEvent(event)
    
    def edit(self, index, trigger, event):
        return False

    def dragMoveEvent(self, event):
        if event.mimeData().hasText():
            event.acceptProposedAction()
        else:
            super().dragMoveEvent(event)

    def dropEvent(self, event):
        if self.parent and hasattr(self.parent, "handle_drop"):
            items = []
            if event.mimeData().hasUrls():
                for url in event.mimeData().urls():
                    items.append(url.toLocalFile())
            if event.mimeData().hasText():
                items = event.mimeData().text().split('\n')
            self.parent.handle_drop(self, [i for i in items if i])
            event.accept()
        else:
            super().dropEvent(event)

    def startDrag(self, supportedActions):
        selected = self.selectedIndexes()
        if not selected:
            return
        data = '\n'.join([self.model().data(i) for i in selected])
        mime = QMimeData()
        mime.setText(data)
        drag = QDrag(self)
        drag.setMimeData(mime)
        drag.exec(Qt.DropAction.MoveAction)

QListView(parent: Optional[QWidget] = None)

Ancestors

  • PyQt6.QtWidgets.QListView
  • PyQt6.QtWidgets.QAbstractItemView
  • PyQt6.QtWidgets.QAbstractScrollArea
  • PyQt6.QtWidgets.QFrame
  • PyQt6.QtWidgets.QWidget
  • PyQt6.QtCore.QObject
  • PyQt6.sip.wrapper
  • PyQt6.QtGui.QPaintDevice
  • PyQt6.sip.simplewrapper

Methods

def dragEnterEvent(self, event)
Expand source code
def dragEnterEvent(self, event):
    if event.mimeData().hasText():
        event.acceptProposedAction()
    else:
        super().dragEnterEvent(event)

dragEnterEvent(self, e: Optional[QDragEnterEvent])

def dragMoveEvent(self, event)
Expand source code
def dragMoveEvent(self, event):
    if event.mimeData().hasText():
        event.acceptProposedAction()
    else:
        super().dragMoveEvent(event)

dragMoveEvent(self, e: Optional[QDragMoveEvent])

def dropEvent(self, event)
Expand source code
def dropEvent(self, event):
    if self.parent and hasattr(self.parent, "handle_drop"):
        items = []
        if event.mimeData().hasUrls():
            for url in event.mimeData().urls():
                items.append(url.toLocalFile())
        if event.mimeData().hasText():
            items = event.mimeData().text().split('\n')
        self.parent.handle_drop(self, [i for i in items if i])
        event.accept()
    else:
        super().dropEvent(event)

dropEvent(self, e: Optional[QDropEvent])

def edit(self, index, trigger, event)
Expand source code
def edit(self, index, trigger, event):
    return False

edit(self, index: QModelIndex) edit(self, index: QModelIndex, trigger: QAbstractItemView.EditTrigger, event: Optional[QEvent]) -> bool

def startDrag(self, supportedActions)
Expand source code
def startDrag(self, supportedActions):
    selected = self.selectedIndexes()
    if not selected:
        return
    data = '\n'.join([self.model().data(i) for i in selected])
    mime = QMimeData()
    mime.setText(data)
    drag = QDrag(self)
    drag.setMimeData(mime)
    drag.exec(Qt.DropAction.MoveAction)

startDrag(self, supportedActions: Qt.DropAction)