Loading modules/ocr/ocr_stariver.py +1 −1 Original line number Diff line number Diff line Loading @@ -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') Loading modules/textdetector/detector_stariver.py +1 −1 Original line number Diff line number Diff line Loading @@ -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') Loading ui/io_thread.py +1 −1 Original line number Diff line number Diff line Loading @@ -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 Loading ui/mainwindow.py +8 −6 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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): Loading Loading @@ -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__() Loading Loading @@ -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
modules/ocr/ocr_stariver.py +1 −1 Original line number Diff line number Diff line Loading @@ -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') Loading
modules/textdetector/detector_stariver.py +1 −1 Original line number Diff line number Diff line Loading @@ -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') Loading
ui/io_thread.py +1 −1 Original line number Diff line number Diff line Loading @@ -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 Loading
ui/mainwindow.py +8 −6 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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): Loading Loading @@ -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__() Loading Loading @@ -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