Skip to content

Commit 8fe1a3d

Browse files
authored
Merge pull request #2 from StableLlama/drag_support_workflow
Add support to drag selected images to external applications
2 parents 8c04472 + 8defd95 commit 8fe1a3d

File tree

2 files changed

+23
-2
lines changed

2 files changed

+23
-2
lines changed

taggui/models/image_list_model.py

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010

1111
import exifread
1212
import imagesize
13-
from PySide6.QtCore import (QAbstractListModel, QModelIndex, QPoint, QRect,
14-
QSize, Qt, Signal, Slot)
13+
from PySide6.QtCore import (QAbstractListModel, QModelIndex, QMimeData, QPoint,
14+
QRect, QSize, Qt, QUrl, Signal, Slot)
1515
from PySide6.QtGui import QIcon, QImageReader, QPixmap
1616
from PySide6.QtWidgets import QMessageBox
1717

@@ -63,6 +63,25 @@ def __init__(self, image_list_image_width: int, tag_separator: str):
6363
self.proxy_image_list_model = None
6464
self.image_list_selection_model = None
6565

66+
def flags(self, index):
67+
default_flags = super().flags(index)
68+
if index.isValid():
69+
return Qt.ItemFlags.ItemIsDragEnabled | default_flags
70+
return default_flags
71+
72+
def mimeTypes(self):
73+
return ('text/uri-list', 'text/plain')
74+
75+
def mimeData(self, indexes):
76+
mimeData = QMimeData()
77+
mimeData.setUrls([QUrl('file://' + str(self.data(
78+
image_index, Qt.ItemDataRole.UserRole
79+
).path)) for image_index in indexes])
80+
mimeData.setText('\r\n'.join(['file://' + str(self.data(
81+
image_index, Qt.ItemDataRole.UserRole
82+
).path) for image_index in indexes]))
83+
return mimeData
84+
6685
def rowCount(self, parent=None) -> int:
6786
return len(self.images)
6887

taggui/widgets/image_list.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,7 @@ def __init__(self, parent, proxy_image_list_model: ProxyImageListModel,
141141
self.delegate = ImageDelegate(self)
142142
self.setItemDelegate(self.delegate)
143143
self.setWordWrap(True)
144+
self.setDragEnabled(True)
144145
# If the actual height of the image is greater than 3 times the width,
145146
# the image will be scaled down to fit.
146147
self.setIconSize(QSize(image_width, image_width * 3))
@@ -478,3 +479,4 @@ def jump_to_first_untagged_image(self):
478479

479480
def get_selected_image_indices(self) -> list[QModelIndex]:
480481
return self.list_view.get_selected_image_indices()
482+

0 commit comments

Comments
 (0)