Commit 61936be7 authored by dmMaze's avatar dmMaze
Browse files

support import folder with drag-drop

parent e6488bd9
Loading
Loading
Loading
Loading
+32 −2
Original line number Diff line number Diff line
import numpy as np
from typing import List, Union, Tuple
import os

from qtpy.QtWidgets import QShortcut, QMenu, QGraphicsScene, QGraphicsView, QGraphicsRectItem, QGraphicsItem, QScrollBar, QGraphicsPixmapItem, QGraphicsSceneMouseEvent, QGraphicsSceneContextMenuEvent, QRubberBand
from qtpy.QtWidgets import QShortcut, QMenu, QGraphicsScene, QGraphicsView, QGraphicsSceneDragDropEvent, QGraphicsRectItem, QGraphicsItem, QScrollBar, QGraphicsPixmapItem, QGraphicsSceneMouseEvent, QGraphicsSceneContextMenuEvent, QRubberBand
from qtpy.QtCore import Qt, QDateTime, QRectF, QPointF, QPoint, Signal, QSizeF, QEvent
from qtpy.QtGui import QKeySequence, QPixmap, QHideEvent, QKeyEvent, QWheelEvent, QResizeEvent, QPainter, QPen, QPainterPath, QCursor
from qtpy.QtGui import QDropEvent, QPixmap, QHideEvent, QKeyEvent, QWheelEvent, QResizeEvent, QPainter, QPen, QPainterPath, QCursor

try:
    from qtpy.QtWidgets import QUndoStack, QUndoCommand
@@ -112,6 +113,7 @@ class Canvas(QGraphicsScene):
    projstate_unsaved = False
    proj_savestate_changed = Signal(bool)
    textstack_changed = Signal()
    drop_open_folder = Signal(str)

    def __init__(self, parent=None):
        super().__init__(parent)
@@ -132,6 +134,7 @@ class Canvas(QGraphicsScene):
        self.gv.hide_canvas.connect(self.on_hide_canvas)
        self.gv.setRenderHint(QPainter.RenderHint.Antialiasing)
        self.gv.canvas = self
        self.gv.setAcceptDrops(True)
        
        if not C.FLAG_QT6:
            # mitigate https://bugreports.qt.io/browse/QTBUG-93417
@@ -177,6 +180,12 @@ class Canvas(QGraphicsScene):
        self.drawingLayer.setTransformationMode(Qt.TransformationMode.FastTransformation)
        self.textLayer = QGraphicsPixmapItem()

        self.imgLayer.setAcceptDrops(True)
        self.inpaintLayer.setAcceptDrops(True)
        self.maskLayer.setAcceptDrops(True)
        self.drawingLayer.setAcceptDrops(True)
        self.textLayer.setAcceptDrops(True)
        
        self.addItem(self.baseLayer)
        self.inpaintLayer.setParentItem(self.baseLayer)
        self.imgLayer.setParentItem(self.baseLayer)
@@ -199,6 +208,27 @@ class Canvas(QGraphicsScene):

        self.clipboard_blks: List[TextBlock] = []

        self.drop_folder: str = None

    def dragEnterEvent(self, e: QGraphicsSceneDragDropEvent):
        self.drop_folder = None
        if e.mimeData().hasUrls():
            urls = e.mimeData().urls()
            ufolder = None
            for url in urls:
                furl = url.toLocalFile()
                if os.path.isdir(furl):
                    ufolder = furl
                    break
            if ufolder is not None:
                e.acceptProposedAction()
                self.drop_folder = ufolder

    def dropEvent(self, event) -> None:
        if self.drop_folder is not None:
            self.drop_open_folder.emit(self.drop_folder)
        return super().dropEvent(event)

    def textEditMode(self) -> bool:
        return self.editor_index == 1

+1 −1
Original line number Diff line number Diff line
@@ -379,7 +379,7 @@ class FontFormatPanel(Widget):
        self.fontsizebox = FontSizeBox(self)
        self.fontsizebox.setToolTip(self.tr("Font Size"))
        self.fontsizebox.setObjectName("FontSizeBox")
        self.fontsizebox.fcombobox.setToolTip("Change font size")
        self.fontsizebox.fcombobox.setToolTip(self.tr("Change font size"))
        self.fontsizebox.apply_fontsize.connect(self.onApplyFontsize)
        self.fontsizebox.fcombobox.editTextChanged.connect(self.onSizeEditorChanged)

+1 −0
Original line number Diff line number Diff line
@@ -139,6 +139,7 @@ class MainWindow(FramelessWindow):
        self.canvas.proj_savestate_changed.connect(self.on_savestate_changed)
        self.canvas.textstack_changed.connect(self.on_textstack_changed)
        self.canvas.run_blktrans.connect(self.on_run_blktrans)
        self.canvas.drop_open_folder.connect(self.openDir)

        self.bottomBar.originalSlider.valueChanged.connect(self.canvas.setOriginalTransparencyBySlider)

+0 −1
Original line number Diff line number Diff line
@@ -547,7 +547,6 @@ class TextBlkItem(QGraphicsTextItem):
    def endEdit(self) -> None:
        self.end_edit.emit(self.idx)
        cursor = self.textCursor()
        self.old_cursorpos = cursor.position()
        cursor.clearSelection()
        self.setTextCursor(cursor)
        self.setTextInteractionFlags(Qt.TextInteractionFlag.NoTextInteraction)