HoDA_Radio/app/ui/widgets/drag_drop_frame.py
2025-09-26 17:51:43 +02:00

59 lines
1.9 KiB
Python

from PyQt6.QtWidgets import QFrame, QLabel
from PyQt6.QtCore import Qt
class DragDropFrame(QFrame):
def __init__(self, parent=None):
super().__init__(parent)
self.parent_window = parent
self.setAcceptDrops(True)
self.is_dragging = False
self.drag_indicator = self.getDragIndicator()
self.drag_text = self.getDragText()
def dragEnterEvent(self, event):
if event.mimeData().hasUrls():
self.is_dragging = True
self.drag_text.hide()
self.drag_indicator.show()
event.acceptProposedAction()
else:
event.ignore()
def dragLeaveEvent(self, event):
self.is_dragging = False
self.drag_indicator.hide()
self.drag_text.show()
super().dragLeaveEvent(event)
def dropEvent(self, event):
self.is_dragging = False
self.drag_indicator.hide()
self.drag_text.show()
urls = event.mimeData().urls()
if urls and self.parent_window:
file_path = urls[0].toLocalFile()
self.parent_window.set_dicom_from_files(file_path)
def getDragIndicator(self) -> QLabel:
drag_indicator = QLabel(self)
drag_indicator.setText("+")
drag_indicator.setObjectName("drag_indicator")
drag_indicator.setAlignment(Qt.AlignmentFlag.AlignCenter)
drag_indicator.show()
return drag_indicator
def getDragText(self) -> QLabel:
drag_text = QLabel(self)
drag_text.setObjectName("drag_area")
drag_text.setAlignment(Qt.AlignmentFlag.AlignCenter)
drag_text.show()
return drag_text
def setDragText(self, text: str):
self.drag_text.setText(text)
def resizeEvent(self, event):
super().resizeEvent(event)
# Ensure components fill the entire frame
self.drag_indicator.resize(self.size())
self.drag_text.resize(self.size())