diff --git a/dangerzone/gui/__init__.py b/dangerzone/gui/__init__.py index b18aed2..f92d419 100644 --- a/dangerzone/gui/__init__.py +++ b/dangerzone/gui/__init__.py @@ -12,7 +12,6 @@ from PySide2 import QtCore, QtGui, QtWidgets from .. import args, errors from ..document import Document -from ..logic import DangerzoneCore from .logic import DangerzoneGui from .main_window import MainWindow from .systray import SysTray @@ -71,14 +70,13 @@ def gui_main(filename: Optional[str]) -> bool: app = app_wrapper.app # Common objects - dangerzone = DangerzoneCore() - gui_common = DangerzoneGui(app, dangerzone) + dangerzone = DangerzoneGui(app) # Allow Ctrl-C to smoothly quit the program instead of throwing an exception signal.signal(signal.SIGINT, signal.SIG_DFL) # Create the system tray - systray = SysTray(dangerzone, gui_common, app, app_wrapper) + systray = SysTray(dangerzone, app, app_wrapper) closed_windows: Dict[str, MainWindow] = {} windows: Dict[str, MainWindow] = {} @@ -91,7 +89,7 @@ def gui_main(filename: Optional[str]) -> bool: def new_window(input_filename: Optional[str] = None) -> None: document = Document(input_filename) window_id = uuid.uuid4().hex - window = MainWindow(dangerzone, gui_common, window_id, document) + window = MainWindow(dangerzone, window_id, document) window.delete_window.connect(delete_window) windows[window_id] = window diff --git a/dangerzone/gui/logic.py b/dangerzone/gui/logic.py index 856e8fd..9498cf1 100644 --- a/dangerzone/gui/logic.py +++ b/dangerzone/gui/logic.py @@ -24,18 +24,17 @@ from ..util import get_resource_path log = logging.getLogger(__name__) -class DangerzoneGui(object): +class DangerzoneGui(DangerzoneCore): """ - The DangerzoneGui class is a singleton of shared functionality for the GUI + Singleton of shared state / functionality for the GUI and core app logic """ - def __init__(self, app: QtWidgets.QApplication, dangerzone: DangerzoneCore) -> None: + def __init__(self, app: QtWidgets.QApplication) -> None: + super().__init__() + # Qt app self.app = app - # Global common singleton - self.dangerzone = dangerzone - # Preload font self.fixed_font = QtGui.QFontDatabase.systemFont(QtGui.QFontDatabase.FixedFont) @@ -64,9 +63,7 @@ class DangerzoneGui(object): elif platform.system() == "Linux": # Get the PDF reader command - args = shlex.split( - self.pdf_viewers[self.dangerzone.settings.get("open_app")] - ) + args = shlex.split(self.pdf_viewers[self.settings.get("open_app")]) # %f, %F, %u, and %U are filenames or URLS -- so replace with the file to open for i in range(len(args)): if ( @@ -115,18 +112,16 @@ class DangerzoneGui(object): class Alert(QtWidgets.QDialog): def __init__( self, - dangerzone_gui: DangerzoneGui, - dangerzone: DangerzoneCore, + gui_common: DangerzoneGui, message: str, ok_text: str = "Ok", extra_button_text: str = None, ) -> None: super(Alert, self).__init__() - self.dangerzone = dangerzone - self.dangerzone_gui = dangerzone_gui + self.gui_common = gui_common self.setWindowTitle("dangerzone") - self.setWindowIcon(self.dangerzone_gui.get_window_icon()) + self.setWindowIcon(self.gui_common.get_window_icon()) self.setModal(True) flags = ( diff --git a/dangerzone/gui/main_window.py b/dangerzone/gui/main_window.py index def411b..2e2e2d8 100644 --- a/dangerzone/gui/main_window.py +++ b/dangerzone/gui/main_window.py @@ -13,7 +13,6 @@ from PySide2 import QtCore, QtGui, QtWidgets from .. import container from ..container import convert from ..document import Document -from ..logic import DangerzoneCore from ..util import get_resource_path, get_subprocess_startupinfo from .logic import DangerzoneGui @@ -25,19 +24,17 @@ class MainWindow(QtWidgets.QMainWindow): def __init__( self, - dangerzone: DangerzoneCore, - gui_common: DangerzoneGui, + dangerzone: DangerzoneGui, window_id: str, document: Document, ) -> None: super(MainWindow, self).__init__() self.dangerzone = dangerzone - self.gui_common = gui_common self.window_id = window_id self.document = document self.setWindowTitle("Dangerzone") - self.setWindowIcon(self.gui_common.get_window_icon()) + self.setWindowIcon(self.dangerzone.get_window_icon()) self.setMinimumWidth(600) self.setMinimumHeight(400) @@ -48,7 +45,7 @@ class MainWindow(QtWidgets.QMainWindow): QtGui.QPixmap.fromImage(QtGui.QImage(get_resource_path("icon.png"))) ) header_label = QtWidgets.QLabel("dangerzone") - header_label.setFont(self.gui_common.fixed_font) + header_label.setFont(self.dangerzone.fixed_font) header_label.setStyleSheet("QLabel { font-weight: bold; font-size: 50px; }") header_layout = QtWidgets.QHBoxLayout() header_layout.addStretch() @@ -58,17 +55,15 @@ class MainWindow(QtWidgets.QMainWindow): header_layout.addStretch() # Waiting widget, replaces content widget while container runtime isn't available - self.waiting_widget = WaitingWidget(self.dangerzone, self.gui_common) + self.waiting_widget = WaitingWidget(self.dangerzone) self.waiting_widget.finished.connect(self.waiting_finished) # Content widget, contains all the window content except waiting widget - self.content_widget = ContentWidget( - self.dangerzone, self.gui_common, self.document - ) + self.content_widget = ContentWidget(self.dangerzone, self.document) self.content_widget.close_window.connect(self.close) # Only use the waiting widget if container runtime isn't available - if self.gui_common.is_waiting_finished: + if self.dangerzone.is_waiting_finished: self.waiting_widget.hide() self.content_widget.show() else: @@ -88,7 +83,7 @@ class MainWindow(QtWidgets.QMainWindow): self.show() def waiting_finished(self) -> None: - self.gui_common.is_waiting_finished = True + self.dangerzone.is_waiting_finished = True self.waiting_widget.hide() self.content_widget.show() @@ -97,15 +92,14 @@ class MainWindow(QtWidgets.QMainWindow): self.delete_window.emit(self.window_id) if platform.system() != "Darwin": - self.gui_common.app.quit() + self.dangerzone.app.quit() class InstallContainerThread(QtCore.QThread): finished = QtCore.Signal() - def __init__(self, dangerzone: DangerzoneCore) -> None: + def __init__(self) -> None: super(InstallContainerThread, self).__init__() - self.dangerzone = dangerzone def run(self) -> None: container.install() @@ -124,10 +118,9 @@ class WaitingWidget(QtWidgets.QWidget): # - "install_container" finished = QtCore.Signal() - def __init__(self, dangerzone: DangerzoneCore, gui_common: DangerzoneGui) -> None: + def __init__(self, dangerzone: DangerzoneGui) -> None: super(WaitingWidget, self).__init__() self.dangerzone = dangerzone - self.gui_common = gui_common self.label = QtWidgets.QLabel() self.label.setAlignment(QtCore.Qt.AlignCenter) @@ -201,7 +194,7 @@ class WaitingWidget(QtWidgets.QWidget): "Installing the Dangerzone container image.

This might take a few minutes..." ) self.buttons.hide() - self.install_container_t = InstallContainerThread(self.dangerzone) + self.install_container_t = InstallContainerThread() self.install_container_t.finished.connect(self.finished) self.install_container_t.start() @@ -209,13 +202,10 @@ class WaitingWidget(QtWidgets.QWidget): class ContentWidget(QtWidgets.QWidget): close_window = QtCore.Signal() - def __init__( - self, dangerzone: DangerzoneCore, gui_common: DangerzoneGui, document: Document - ) -> None: + def __init__(self, dangerzone: DangerzoneGui, document: Document) -> None: super(ContentWidget, self).__init__() self.dangerzone = dangerzone - self.gui_common = gui_common self.document = document # Doc selection widget @@ -223,9 +213,7 @@ class ContentWidget(QtWidgets.QWidget): self.doc_selection_widget.document_selected.connect(self.document_selected) # Settings - self.settings_widget = SettingsWidget( - self.dangerzone, self.gui_common, self.document - ) + self.settings_widget = SettingsWidget(self.dangerzone, self.document) self.doc_selection_widget.document_selected.connect( self.settings_widget.document_selected ) @@ -234,9 +222,7 @@ class ContentWidget(QtWidgets.QWidget): self.settings_widget.hide() # Convert - self.convert_widget = ConvertWidget( - self.dangerzone, self.gui_common, self.document - ) + self.convert_widget = ConvertWidget(self.dangerzone, self.document) self.convert_widget.close_window.connect(self._close_window) self.doc_selection_widget.document_selected.connect( self.convert_widget.document_selected @@ -308,12 +294,9 @@ class SettingsWidget(QtWidgets.QWidget): start_clicked = QtCore.Signal() close_window = QtCore.Signal() - def __init__( - self, dangerzone: DangerzoneCore, gui_common: DangerzoneGui, document: Document - ) -> None: + def __init__(self, dangerzone: DangerzoneGui, document: Document) -> None: super(SettingsWidget, self).__init__() self.dangerzone = dangerzone - self.gui_common = gui_common self.document = document # Dangerous document label @@ -358,8 +341,8 @@ class SettingsWidget(QtWidgets.QWidget): ) self.open_checkbox.clicked.connect(self.update_ui) self.open_combobox = QtWidgets.QComboBox() - for k in self.gui_common.pdf_viewers: - self.open_combobox.addItem(k, self.gui_common.pdf_viewers[k]) + for k in self.dangerzone.pdf_viewers: + self.open_combobox.addItem(k, self.dangerzone.pdf_viewers[k]) if platform.system() == "Darwin" or platform.system() == "Linux": open_layout = QtWidgets.QHBoxLayout() @@ -498,7 +481,7 @@ class ConvertThread(QtCore.QThread): finished = QtCore.Signal(bool) update = QtCore.Signal(bool, str, int) - def __init__(self, dangerzone: DangerzoneCore, document: Document) -> None: + def __init__(self, dangerzone: DangerzoneGui, document: Document) -> None: super(ConvertThread, self).__init__() self.dangerzone = dangerzone self.document = document @@ -546,12 +529,9 @@ class ConvertThread(QtCore.QThread): class ConvertWidget(QtWidgets.QWidget): close_window = QtCore.Signal() - def __init__( - self, dangerzone: DangerzoneCore, gui_common: DangerzoneGui, document: Document - ) -> None: + def __init__(self, dangerzone: DangerzoneGui, document: Document) -> None: super(ConvertWidget, self).__init__() self.dangerzone = dangerzone - self.gui_common = gui_common self.document = document self.error = False @@ -629,11 +609,11 @@ class ConvertWidget(QtWidgets.QWidget): # Open if self.dangerzone.settings.get("open"): - self.gui_common.open_pdf_viewer(self.document.output_filename) + self.dangerzone.open_pdf_viewer(self.document.output_filename) # Quit if platform.system() == "Darwin": # In macOS, just close the window self.close_window.emit() else: - self.gui_common.app.quit() + self.dangerzone.app.quit() diff --git a/dangerzone/gui/systray.py b/dangerzone/gui/systray.py index 1c4850a..cc3d554 100644 --- a/dangerzone/gui/systray.py +++ b/dangerzone/gui/systray.py @@ -3,7 +3,6 @@ from typing import TYPE_CHECKING from PySide2 import QtWidgets -from ..logic import DangerzoneCore from .logic import DangerzoneGui if TYPE_CHECKING: @@ -13,18 +12,16 @@ if TYPE_CHECKING: class SysTray(QtWidgets.QSystemTrayIcon): def __init__( self, - dangerzone: DangerzoneCore, - gui_common: DangerzoneGui, + dangerzone: DangerzoneGui, app: QtWidgets.QApplication, app_wrapper: "ApplicationWrapper", ) -> None: super(SysTray, self).__init__() self.dangerzone = dangerzone - self.gui_common = gui_common self.app = app self.app_wrapper = app_wrapper - self.setIcon(self.gui_common.get_window_icon()) + self.setIcon(self.dangerzone.get_window_icon()) menu = QtWidgets.QMenu() diff --git a/dangerzone/logic.py b/dangerzone/logic.py index 7f803ae..ec53fae 100644 --- a/dangerzone/logic.py +++ b/dangerzone/logic.py @@ -20,7 +20,7 @@ log = logging.getLogger(__name__) class DangerzoneCore(object): """ - The DangerzoneCore class is a singleton of shared functionality throughout the app + Singleton of shared state / functionality throughout the app """ def __init__(self) -> None: