Commit e883d2df authored by dmMaze's avatar dmMaze
Browse files

block set inpainter if inpainter thread is running, close #468

parent aa2a7b70
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -6,7 +6,7 @@ import base64
from typing import List

from .base import register_OCR, OCRBase, TextBlock
from utils.error_handling import create_error_dialog, create_info_dialog
from utils import create_error_dialog, create_info_dialog


@register_OCR('stariver_ocr')
+1 −1
Original line number Diff line number Diff line
@@ -5,7 +5,7 @@ import requests
import base64

from .base import register_textdetectors, TextDetectorBase, TextBlock
from utils.error_handling import create_error_dialog, create_info_dialog
from utils import create_error_dialog, create_info_dialog


@register_textdetectors('stariver_ocr')
+1 −1
Original line number Diff line number Diff line
@@ -8,7 +8,7 @@ from qtpy.QtWidgets import QDialog, QMessageBox, QFileDialog

from utils.logger import logger as LOGGER
from utils.io_utils import imread, imwrite
from utils.error_handling import create_error_dialog
from utils import create_error_dialog
from .config_proj import ProjImgTrans
from .stylewidgets import ProgressMessageBox

+8 −6
Original line number Diff line number Diff line
@@ -13,7 +13,7 @@ from utils.logger import logger as LOGGER
from utils.text_processing import is_cjk, full_len, half_len
from utils.textblock import TextBlock
from utils import shared
from utils.error_handling import create_error_dialog
from utils import create_error_dialog
from modules.translators.trans_chatgpt import GPTTranslator
from .misc import parse_stylesheet, set_html_family
from utils.config import ProgramConfig, pcfg, save_config, text_styles, save_text_styles, load_textstyle_from
@@ -34,6 +34,7 @@ from .framelesswindow import FramelessWindow
from .drawing_commands import RunBlkTransCommand
from .keywordsubwidget import KeywordSubWidget
from . import shared_widget as SW
from .message import MessageBox

class PageListView(QListWidget):

@@ -66,7 +67,7 @@ class MainWindow(mainwindow_cls):

    restart_signal = Signal()
    create_errdialog = Signal(str, str, str)
    create_infodialog = Signal(str, str)
    create_infodialog = Signal(dict)
    
    def __init__(self, app: QApplication, config: ProgramConfig, open_dir='', **exec_args) -> None:
        super().__init__()
@@ -1242,7 +1243,8 @@ class MainWindow(mainwindow_cls):
            LOGGER.error('Failed to create error dialog')
            LOGGER.error(traceback.format_exc())

    def on_create_infodialog(self, msg: str, btn_name: str):
        dialog = QMessageBox()
        dialog.setText(msg)
        dialog.exec()
 No newline at end of file
    def on_create_infodialog(self, info_dict: dict):

        QMessageBox.StandardButton.NoButton
        dialog = MessageBox(**info_dict)
        dialog.show()   # exec_ will block main thread
 No newline at end of file

ui/message.py

0 → 100644
+60 −0
Original line number Diff line number Diff line
from typing import Callable, List, Dict
from functools import partial

from qtpy.QtWidgets import QDialog, QLabel, QHBoxLayout, QVBoxLayout, QMessageBox
from qtpy.QtGui import  QCloseEvent
from qtpy.QtCore import Qt

from utils.shared import remove_from_runtime_widget_set, add_to_runtime_widget_set


class MessageBox(QMessageBox):

    def __init__(self, info_msg: str = None, btn_type = QMessageBox.StandardButton.Ok, frame_less: bool = False, modal: bool = False, signal_slot_map_list: List[Dict] = None, *args, **kwargs):
        super().__init__(text=info_msg, *args, **kwargs)
        self.register_signal_slot_map = []
        add_to_runtime_widget_set(self)

        if frame_less:
            self.setWindowFlags(Qt.WindowType.FramelessWindowHint)
        if modal:
            self.setModal(modal)
        if btn_type is not None:
            self.setStandardButtons(btn_type)

        if signal_slot_map_list is not None:
            self.connect_signals(signal_slot_map_list)

    def connect_signals(self, signal_slot_map_list):
        if signal_slot_map_list is None:
            return
        if isinstance(signal_slot_map_list, dict):
            signal_slot_map_list = [signal_slot_map_list]
        for signal_slot_map in signal_slot_map_list:
            slot = signal_slot_map['slot']
            if isinstance(slot, Callable):
                slot_func = slot
            else:
                assert isinstance(slot, str)
                slot_func = getattr(self, slot)
            signal_slot_map['signal'].connect(slot_func)
            signal_slot_map['slot_func'] = slot_func
            self.register_signal_slot_map.append(signal_slot_map)

    def disconnect_all(self):
        # https://stackoverflow.com/a/48501804/17671327
        for signal_slot_map in self.register_signal_slot_map:
            signal_slot_map['signal'].disconnect(signal_slot_map['slot_func'])
        self.register_signal_slot_map.clear()

    def clear_before_close(self):
        remove_from_runtime_widget_set(self)
        self.disconnect_all()

    def done(self, v: int = 0):
        self.clear_before_close()
        super().done(v)

    def closeEvent(self, event: QCloseEvent) -> None:
        self.clear_before_close()
        return super().closeEvent(event)
 No newline at end of file
Loading