Commit 3e89df81 authored by dmMaze's avatar dmMaze
Browse files

impl ImgSaveThread to write edited image

parent c240fb6c
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -57,7 +57,7 @@

## 界面说明及快捷键
* Ctrl+Z, Ctrl+Y可以撤销重做大部分操作,注意翻页后撤消重做栈会清空
* A/D翻页, 如果当前页面未保存会自动保存, 大图会卡一会
* A/D翻页, 如果当前页面未保存会自动保存
* 文本编辑模式下(底部最右"T"图标), W激活文本块创建模式后在画布右键拉文本框
* 画板模式下右下角滑条改原图透明度
* 底部左侧"OCR"和"A"按钮控制启用/禁用OCR翻译功能, 禁用后再Run程序就只做文本检测和抹字  
+16 −7
Original line number Diff line number Diff line
@@ -2,9 +2,9 @@ import os.path as osp
import os
import json

from PyQt5.QtWidgets import QMainWindow, QHBoxLayout, QVBoxLayout, QApplication, QStackedWidget, QWidget, QFileDialog, QLabel, QSizePolicy, QComboBox, QListView, QToolBar, QMenu, QSpacerItem, QPushButton, QAction, QCheckBox, QToolButton, QSplitter, QListWidget, QShortcut, QListWidgetItem
from PyQt5.QtWidgets import QMainWindow, QHBoxLayout, QVBoxLayout, QApplication, QStackedWidget, QWidget, QSizePolicy, QComboBox, QListView, QToolBar, QMenu, QSpacerItem, QPushButton, QAction, QCheckBox, QToolButton, QSplitter, QListWidget, QShortcut, QListWidgetItem
from PyQt5.QtCore import Qt, pyqtSignal, QPoint, QSize, QThread
from PyQt5.QtGui import QGuiApplication, QIcon, QCloseEvent, QKeySequence, QImage, QPainter
from PyQt5.QtGui import QGuiApplication, QIcon, QCloseEvent, QKeySequence, QImage, QPainter, QFont

from typing import List, Union, Tuple

@@ -17,12 +17,11 @@ from .drawingpanel import DrawingPanel
from .scenetext_manager import SceneTextManager
from .mainwindowbars import TitleBar, LeftBar, RightBar, BottomBar
from .io_thread import ImgSaveThread
from .stylewidgets import FrameLessMessageBox
from .constants import STYLESHEET_PATH, CONFIG_PATH, DPI, LDPI, LANG_SUPPORT_VERTICAL
from . import constants




class PageListView(QListWidget):    
    def __init__(self, *args, **kwargs) -> None:
        super().__init__(*args, **kwargs)
@@ -100,7 +99,7 @@ class MainWindow(FrameLessWindow):
        self.centralStackWidget = QStackedWidget(self)
        
        self.titleBar = TitleBar(self)
        
        self.titleBar.closebtn_clicked.connect(self.on_closebtn_clicked)
        self.bottomBar = BottomBar(self)
        self.bottomBar.textedit_checkchanged.connect(self.setTextEditMode)
        self.bottomBar.paintmode_checkchanged.connect(self.setPaintMode)
@@ -272,7 +271,6 @@ class MainWindow(FrameLessWindow):
        config_dict = self.config.to_dict()
        with open(CONFIG_PATH, 'w', encoding='utf8') as f:
            f.write(json.dumps(config_dict, ensure_ascii=False, indent=4, separators=(',', ':')))
            # yaml.safe_dump(config_dict, f)
        return super().closeEvent(event)

    def onHideCanvas(self):
@@ -313,7 +311,6 @@ class MainWindow(FrameLessWindow):
                row = (row + 1) % page_count
                self.pageList.setCurrentRow(row)


    def shortcutBefore(self):
        if self.centralStackWidget.currentIndex() == 0:
            index = self.pageList.currentIndex()
@@ -456,3 +453,15 @@ class MainWindow(FrameLessWindow):
                                    size.height() - msg_size.height()))
        self.dl_manager.progress_msgbox.move(p)

    

    def on_closebtn_clicked(self):
        if self.imsave_thread.isRunning():
            self.imsave_thread.finished.connect(self.close)
            mb = FrameLessMessageBox()
            mb.setText(self.tr('Saving image...'))
            self.imsave_thread.finished.connect(mb.close)
            mb.exec()
            return
        self.close()
+2 −5
Original line number Diff line number Diff line
@@ -357,7 +357,7 @@ class RightBar(Widget):


class TitleBar(Widget):

    closebtn_clicked = pyqtSignal()
    def __init__(self, parent, *args, **kwargs) -> None:
        super().__init__(parent, *args, **kwargs)
        self.mainwindow : QMainWindow = parent
@@ -382,7 +382,7 @@ class TitleBar(Widget):
        self.maxBtn.clicked.connect(self.onMaxBtnClicked)
        self.closeBtn = QPushButton()
        self.closeBtn.setObjectName('closeBtn')
        self.closeBtn.clicked.connect(self.onCloseBtnClicked)
        self.closeBtn.clicked.connect(self.closebtn_clicked)
        self.maxBtn.setFixedSize(72, 40)
        hlayout = QHBoxLayout(self)
        hlayout.setAlignment(Qt.AlignmentFlag.AlignCenter)
@@ -406,9 +406,6 @@ class TitleBar(Widget):
    def onMinBtnClicked(self):
        self.mainwindow.showMinimized()

    def onCloseBtnClicked(self):
        self.mainwindow.close()

    def mousePressEvent(self, event: QMouseEvent) -> None:
        if event.button() == Qt.LeftButton:
            if not self.mainwindow.isMaximized() and \
+6 −1
Original line number Diff line number Diff line
from PyQt5.QtWidgets import QGraphicsOpacityEffect, QFrame, QWidget, QComboBox, QLabel, QSizePolicy, QDialog, QProgressBar, QToolBar, QMenu, QSpacerItem, QPushButton, QHBoxLayout, QVBoxLayout, QToolButton, QSplitter, QStylePainter, QStyleOption, QStyle, QSlider, QProxyStyle, QStyle, QStyleOptionSlider, QColorDialog
from PyQt5.QtWidgets import QGraphicsOpacityEffect, QFrame, QWidget, QComboBox, QLabel, QSizePolicy, QDialog, QProgressBar, QMessageBox, QMenu, QSpacerItem, QPushButton, QHBoxLayout, QVBoxLayout, QToolButton, QSplitter, QStylePainter, QStyleOption, QStyle, QSlider, QProxyStyle, QStyle, QStyleOptionSlider, QColorDialog
from PyQt5.QtCore import Qt, QPropertyAnimation, QEasingCurve, QPointF, QRect, pyqtSignal, QSizeF, QObject, QEvent
from PyQt5.QtGui import QFontMetrics, QMouseEvent, QShowEvent, QWheelEvent, QResizeEvent, QKeySequence, QPainter, QTextFrame, QTransform, QTextBlock, QAbstractTextDocumentLayout, QTextLayout, QFont, QFontMetrics, QColor, QTextFormat, QTextCursor, QTextCharFormat, QTextDocument
from typing import List, Union, Tuple
@@ -81,6 +81,11 @@ class TaskProgressBar(Widget):
        self.textlabel.setText(msg)
        self.progressbar.setValue(progress)

class FrameLessMessageBox(QMessageBox):
    def __init__(self, *args, **kwargs) -> None:
        super().__init__(*args, **kwargs)
        self.setWindowFlags(Qt.WindowType.FramelessWindowHint)
        
class ProgressMessageBox(QDialog):
    showed = pyqtSignal()
    def __init__(self, *args, **kwargs) -> None: