Skip to content

Commit dbbe1b0

Browse files
committed
Added Ability to Drag out of window
1 parent aeb119e commit dbbe1b0

File tree

2 files changed

+44
-9
lines changed

2 files changed

+44
-9
lines changed

tagstudio/src/qt/modals/drop_import.py

Lines changed: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,28 +2,55 @@
22
import shutil
33
import typing
44

5-
from PySide6.QtCore import QThreadPool
6-
from PySide6.QtGui import QDropEvent, QDragEnterEvent, QDragMoveEvent
5+
from PySide6.QtCore import QThreadPool,Qt,QMimeData,QUrl
6+
from PySide6.QtGui import QDropEvent, QDragEnterEvent,QImage, QDragMoveEvent,QMouseEvent,QDrag,QDragLeaveEvent
77
from PySide6.QtWidgets import QMessageBox
88
from src.qt.widgets import ProgressWidget
99
from src.qt.helpers import FunctionIterator, CustomRunnable
1010

11+
from ctypes import wintypes,windll
1112

1213
if typing.TYPE_CHECKING:
1314
from src.qt.ts_qt import QtDriver
1415

16+
import logging
1517

1618
class DropImport:
1719
def __init__(self, driver: "QtDriver"):
1820
self.driver = driver
19-
21+
22+
def mouseMoveEvent(self,event:QMouseEvent):
23+
if event.buttons() is not Qt.MouseButton.LeftButton: return
24+
if len(self.driver.selected) == 0: return
25+
26+
drag = QDrag(self.driver)
27+
paths = []
28+
mimedata = QMimeData()
29+
for selected in self.driver.selected:
30+
entry =self.driver.lib.get_entry(selected[1])
31+
url = QUrl.fromLocalFile(self.driver.lib.library_dir+"/"+entry.path+"/"+entry.filename)
32+
paths.append(url)
33+
34+
mimedata.setUrls(paths)
35+
drag.setMimeData(mimedata)
36+
drag.exec(Qt.DropAction.CopyAction)
37+
2038
def dropEvent(self, event: QDropEvent):
39+
if event.source() is self.driver: # change that if you want to drop something originating from tagstudio, for moving or so
40+
return
41+
2142
if not event.mimeData().hasUrls():
2243
return
2344

2445
self.urls = event.mimeData().urls()
2546
self.import_files()
2647

48+
def dragLeaveEvent(self,event:QDragLeaveEvent):
49+
if event.mimeData().hasUrls():
50+
event.accept()
51+
else:
52+
event.ignore()
53+
2754
def dragEnterEvent(self, event: QDragEnterEvent):
2855
if event.mimeData().hasUrls():
2956
event.accept()
@@ -34,6 +61,7 @@ def dragMoveEvent(self, event: QDragMoveEvent):
3461
if event.mimeData().hasUrls():
3562
event.accept()
3663
else:
64+
logging.info(self.driver.selected)
3765
event.ignore()
3866

3967
def import_files(self):
@@ -216,3 +244,5 @@ def get_renamed_duplicate_filename_in_lib(self, filePath: Path) -> str:
216244
)
217245
index += 1
218246
return filePath.name
247+
248+

tagstudio/src/qt/ts_qt.py

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,13 @@ def start(self):
253253
# f'QScrollBar::{{background:red;}}'
254254
# )
255255

256+
self.drop_import = DropImport(self)
257+
self.main_window.setAcceptDrops(True)
258+
self.main_window.dragEnterEvent = self.drop_import.dragEnterEvent
259+
self.main_window.dropEvent = self.drop_import.dropEvent
260+
self.main_window.dragMoveEvent = self.drop_import.dragMoveEvent
261+
262+
256263
# # self.main_window.windowFlags() &
257264
# # self.main_window.setWindowFlag(Qt.WindowType.FramelessWindowHint, True)
258265
# self.main_window.setWindowFlag(Qt.WindowType.NoDropShadowWindowHint, True)
@@ -511,12 +518,6 @@ def start(self):
511518
# self.render_times: list = []
512519
# self.main_window.setWindowFlag(Qt.FramelessWindowHint)
513520

514-
drop_import = DropImport(self)
515-
self.main_window.setAcceptDrops(True)
516-
self.main_window.dragEnterEvent = drop_import.dragEnterEvent
517-
self.main_window.dropEvent = drop_import.dropEvent
518-
self.main_window.dragMoveEvent = drop_import.dragMoveEvent
519-
520521
# NOTE: Putting this early will result in a white non-responsive
521522
# window until everything is loaded. Consider adding a splash screen
522523
# or implementing some clever loading tricks.
@@ -1015,6 +1016,10 @@ def _init_thumb_grid(self):
10151016
item_thumb = ItemThumb(
10161017
None, self.lib, self.preview_panel, (self.thumb_size, self.thumb_size)
10171018
)
1019+
1020+
item_thumb.setMouseTracking(True)
1021+
item_thumb.mouseMoveEvent = self.drop_import.mouseMoveEvent
1022+
10181023
layout.addWidget(item_thumb)
10191024
self.item_thumbs.append(item_thumb)
10201025

0 commit comments

Comments
 (0)