Skip to content

Commit

Permalink
Merge pull request #2 from olive-groves/developer-lars
Browse files Browse the repository at this point in the history
Fix #1 by changing how dragged files are checked as image type
  • Loading branch information
larsmaxfield-asml authored Oct 4, 2023
2 parents 8e04c07 + d800ec6 commit 661eaa6
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 41 deletions.
66 changes: 46 additions & 20 deletions butterfly_viewer/aux_dragdrop.py
Original file line number Diff line number Diff line change
Expand Up @@ -197,6 +197,14 @@ def __init__(self, show_filename=False, show_pushbuttons=True, is_main=False, te

self.show_filename = show_filename
self.show_pushbuttons = show_pushbuttons

self.image_filetypes = [
".jpeg", ".jpg", ".jpe", ".jif", ".jfif", ".jfi", ".pjpeg", ".pjp",
".png",
".tiff", ".tif",
".bmp",
".webp",
".ico", ".cur"]

self.setAcceptDrops(True)

Expand Down Expand Up @@ -288,15 +296,15 @@ def set_addable(self, boolean):


def dragEnterEvent(self, event):
"""event: Override dragEnterEvent() to set stylesheet as hovered and read filepath from a dragged image, but reject multiple files or non-image files."""
"""event: Override dragEnterEvent() to set stylesheet as hovered and read filepath from a dragged image, but reject multiple files."""
if len(event.mimeData().urls()) is 1 and self.grab_image_urls_from_mimedata(event.mimeData()):
self.image_label_child.set_stylesheet_hovered(True)
event.accept()
else:
event.ignore()

def dragMoveEvent(self, event):
"""event: Override dragMoveEvent() to reject multiple files or non-image files."""
"""event: Override dragMoveEvent() to reject multiple files."""
if len(event.mimeData().urls()) is 1 and self.grab_image_urls_from_mimedata(event.mimeData()):
event.accept()
else:
Expand All @@ -312,19 +320,20 @@ def dropEvent(self, event):
if len(urls) is 1 and urls:
event.setDropAction(QtCore.Qt.CopyAction)
file_path = urls[0].toLocalFile()
self.load_image(file_path)

event.accept()
loaded = self.load_image(file_path)
if loaded:
event.accept()
else:
event.ignore()
self.image_label_child.set_stylesheet_hovered(False)
else:
event.ignore()

def grab_image_urls_from_mimedata(self, mimedata):
"""mimeData: Get urls (filepaths) from drag event and filter out non-image files."""
"""mimeData: Get urls (filepaths) from drag event."""
urls = list()
db = QtCore.QMimeDatabase()
for url in mimedata.urls():
mimetype = db.mimeTypeForUrl(url)
if "image/" in mimetype.name():
if any([filetype in url.toLocalFile().lower() for filetype in self.image_filetypes]):
urls.append(url)
return urls

Expand All @@ -347,20 +356,24 @@ def set_image(self, pixmap):
self.clear_pushbutton.setVisible(True)

def load_image(self, file_path):
"""str: Load image from filepath with loading grayout; set filename text."""
"""str: Load image from filepath with loading grayout; set filename text.
Returns:
loaded (bool): True if image successfully loaded; False if not."""
loading_text = "Loading..."
if self.show_filepath_while_loading:
loading_text = loading_text.replace("...", " '" + file_path.split("/")[-1] + "'...")
self.display_loading_grayout(True, loading_text)
pixmap = QtGui.QPixmap(file_path)
if pixmap.depth() is 0:
self.display_loading_grayout(False)
return
return False

self.set_image(pixmap)
self.set_filename_label(file_path)
self.file_path = file_path
self.display_loading_grayout(False)
return True

def open_image_via_dialog(self):
"""Open dialog window to select and load image from file."""
Expand Down Expand Up @@ -437,6 +450,14 @@ class FourDragDropImageLabel(QtWidgets.QFrame):
def __init__(self):
super().__init__()

self.image_filetypes = [
".jpeg", ".jpg", ".jpe", ".jif", ".jfif", ".jfi", ".pjpeg", ".pjp",
".png",
".tiff", ".tif",
".bmp",
".webp",
".ico", ".cur"]

self.setAcceptDrops(True)

main_layout = QtWidgets.QGridLayout()
Expand Down Expand Up @@ -504,31 +525,38 @@ def dropEvent(self, event):
n_str = str(n)
if n >= 1 and n <= 4 and urls:
event.setDropAction(QtCore.Qt.CopyAction)

i = 0
file_path = urls[i].toLocalFile()

self.will_start_loading.emit(True, "Loading to creator " + str(i+1) + "/" + n_str + "...")

self.app_main_topleft.load_image(file_path)
loaded = self.app_main_topleft.load_image(file_path)
if not loaded:
self.app_main_topleft.image_label_child.set_stylesheet_hovered(False)

if n >= 2:
i += 1
file_path = urls[i].toLocalFile()
self.will_start_loading.emit(True, "Loading to creator " + str(i+1) + "/" + n_str + "...")
self.app_topright.load_image(file_path)
loaded = self.app_topright.load_image(file_path)
if not loaded:
self.app_topright.image_label_child.set_stylesheet_hovered(False)

if n >= 3:
i += 1
file_path = urls[i].toLocalFile()
self.will_start_loading.emit(True, "Loading to creator " + str(i+1) + "/" + n_str + "...")
self.app_bottomright.load_image(file_path)
loaded = self.app_bottomright.load_image(file_path)
if not loaded:
self.app_bottomright.image_label_child.set_stylesheet_hovered(False)

if n >= 4:
i += 1
file_path = urls[i].toLocalFile()
self.will_start_loading.emit(True, "Loading to creator " + str(i+1) + "/" + n_str + "...")
self.app_bottomleft.load_image(file_path)
loaded = self.app_bottomleft.load_image(file_path)
if not loaded:
self.app_bottomleft.image_label_child.set_stylesheet_hovered(False)

self.has_stopped_loading.emit(False)

Expand All @@ -537,12 +565,10 @@ def dropEvent(self, event):
event.ignore()

def grab_image_urls_from_mimedata(self, mimedata):
"""mimeData: Get urls (filepaths) from drag event and filter out non-image files."""
"""mimeData: Get urls (filepaths) from drag event."""
urls = list()
db = QtCore.QMimeDatabase()
for url in mimedata.urls():
mimetype = db.mimeTypeForUrl(url)
if "image/" in mimetype.name():
if any([filetype in url.toLocalFile().lower() for filetype in self.image_filetypes]):
urls.append(url)
return urls

Expand Down
35 changes: 14 additions & 21 deletions butterfly_viewer/aux_mdi.py
Original file line number Diff line number Diff line change
Expand Up @@ -111,38 +111,31 @@ def tile_what_was_done_last_time(self):
self.tileSubWindows()

def dragEnterEvent(self, event):
"""event: Signal that one or more image files have been dragged into the area."""
if event.mimeData().hasImage:
self.file_path_dragged.emit(True)
event.accept()
else:
event.ignore()
"""event: Signal that one or more files have been dragged into the area."""
self.file_path_dragged.emit(True)
event.accept()

def dragMoveEvent(self, event):
"""event: Signal that one or more image files are being dragged in the area."""
if event.mimeData().hasImage:
event.accept()
else:
event.ignore()
"""event: Signal that one or more files are being dragged in the area."""
event.accept()

def dragLeaveEvent(self, event):
"""event: Signal that one or more image files have been dragged out of the area."""
"""event: Signal that one or more files have been dragged out of the area."""
self.file_path_dragged.emit(False)
event.accept()

def dropEvent(self, event):
"""event: Signal that one or more image files have been dropped into the area."""
if event.mimeData().hasImage:
"""event: Signal that one or more files have been dropped into the area."""
event.setDropAction(QtCore.Qt.CopyAction)

event.setDropAction(QtCore.Qt.CopyAction)
self.file_path_dragged.emit(False)

self.file_path_dragged.emit(False)
urls = event.mimeData().urls()

i = -1
for url in event.mimeData().urls():
i += 1
file_path = event.mimeData().urls()[i].toLocalFile()
if urls:
for url in urls:
file_path = url.toLocalFile()
self.file_path_dragged_and_dropped.emit(file_path)

event.accept()
else:
event.ignore()
Expand Down

0 comments on commit 661eaa6

Please # to comment.