diff --git a/taggui/models/image_list_model.py b/taggui/models/image_list_model.py index 9f1791ff..042249c8 100644 --- a/taggui/models/image_list_model.py +++ b/taggui/models/image_list_model.py @@ -10,8 +10,8 @@ import exifread import imagesize -from PySide6.QtCore import (QAbstractListModel, QModelIndex, QPoint, QRect, - QSize, Qt, Signal, Slot) +from PySide6.QtCore import (QAbstractListModel, QModelIndex, QMimeData, QPoint, + QRect, QSize, Qt, QUrl, Signal, Slot) from PySide6.QtGui import QIcon, QImageReader, QPixmap from PySide6.QtWidgets import QMessageBox @@ -63,6 +63,25 @@ def __init__(self, image_list_image_width: int, tag_separator: str): self.proxy_image_list_model = None self.image_list_selection_model = None + def flags(self, index): + default_flags = super().flags(index) + if index.isValid(): + return Qt.ItemFlags.ItemIsDragEnabled | default_flags + return default_flags + + def mimeTypes(self): + return ('text/uri-list', 'text/plain') + + def mimeData(self, indexes): + mimeData = QMimeData() + mimeData.setUrls([QUrl('file://' + str(self.data( + image_index, Qt.ItemDataRole.UserRole + ).path)) for image_index in indexes]) + mimeData.setText('\r\n'.join(['file://' + str(self.data( + image_index, Qt.ItemDataRole.UserRole + ).path) for image_index in indexes])) + return mimeData + def rowCount(self, parent=None) -> int: return len(self.images) diff --git a/taggui/widgets/image_list.py b/taggui/widgets/image_list.py index 30fe3849..3fc16f6f 100644 --- a/taggui/widgets/image_list.py +++ b/taggui/widgets/image_list.py @@ -141,6 +141,7 @@ def __init__(self, parent, proxy_image_list_model: ProxyImageListModel, self.delegate = ImageDelegate(self) self.setItemDelegate(self.delegate) self.setWordWrap(True) + self.setDragEnabled(True) # If the actual height of the image is greater than 3 times the width, # the image will be scaled down to fit. self.setIconSize(QSize(image_width, image_width * 3)) @@ -478,3 +479,4 @@ def jump_to_first_untagged_image(self): def get_selected_image_indices(self) -> list[QModelIndex]: return self.list_view.get_selected_image_indices() +