From 4db79c98d60163cf89999d6bc3319b6945ef045a Mon Sep 17 00:00:00 2001 From: StableLlama Date: Wed, 12 Feb 2025 19:39:21 +0100 Subject: [PATCH] Add support to grad selected images to external application. --- taggui/models/image_list_model.py | 23 +++++++++++++++++++++-- taggui/widgets/image_list.py | 2 ++ 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/taggui/models/image_list_model.py b/taggui/models/image_list_model.py index 09e9127d..5b16a995 100644 --- a/taggui/models/image_list_model.py +++ b/taggui/models/image_list_model.py @@ -8,8 +8,8 @@ import exifread import imagesize -from PySide6.QtCore import (QAbstractListModel, QModelIndex, QSize, Qt, Signal, - Slot) +from PySide6.QtCore import (QAbstractListModel, QModelIndex, QMimeData, QSize, + Qt, QUrl, Signal, Slot) from PySide6.QtGui import QIcon, QImageReader, QPixmap from PySide6.QtWidgets import QMessageBox @@ -60,6 +60,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 18af0eb0..6cda2144 100644 --- a/taggui/widgets/image_list.py +++ b/taggui/widgets/image_list.py @@ -107,6 +107,7 @@ def __init__(self, parent, proxy_image_list_model: ProxyImageListModel, self.tag_separator = tag_separator self.setModel(proxy_image_list_model) 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)) @@ -427,3 +428,4 @@ def jump_to_first_untagged_image(self): def get_selected_image_indices(self) -> list[QModelIndex]: return self.list_view.get_selected_image_indices() +