From b3a65c3d236d761d679f1bde972de5d6af4ad877 Mon Sep 17 00:00:00 2001 From: kramo Date: Thu, 11 Jul 2024 01:18:26 +0200 Subject: [PATCH] Move ApplicationDelegate to separate module --- cartridges/application_delegate.py | 120 +++++++++++++++++++++++++++++ cartridges/main.py | 95 +---------------------- cartridges/meson.build | 1 + 3 files changed, 123 insertions(+), 93 deletions(-) create mode 100644 cartridges/application_delegate.py diff --git a/cartridges/application_delegate.py b/cartridges/application_delegate.py new file mode 100644 index 0000000..862b2ae --- /dev/null +++ b/cartridges/application_delegate.py @@ -0,0 +1,120 @@ +# application_delegate.py +# +# Copyright 2024 kramo +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +# SPDX-License-Identifier: GPL-3.0-or-later + +"""A set of methods that manage your app’s life cycle and its interaction +with common system services.""" + +from typing import Any + +from AppKit import NSApp, NSApplication, NSMenu, NSMenuItem # type: ignore +from Foundation import NSObject # type: ignore +from gi.repository import Gio # type: ignore +from showtime import shared + + +class ApplicationDelegate(NSObject): # type: ignore + """A set of methods that manage your app’s life cycle and its interaction + with common system services.""" + + def applicationDidFinishLaunching_(self, *_args: Any) -> None: + main_menu = NSApp.mainMenu() + + add_game_menu_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_( + "Add Game", "add:", "n" + ) + + import_menu_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_( + "Import", "import:", "i" + ) + + file_menu = NSMenu.alloc().init() + file_menu.addItem_(add_game_menu_item) + file_menu.addItem_(import_menu_item) + + file_menu_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_( + "File", None, "" + ) + file_menu_item.setSubmenu_(file_menu) + main_menu.addItem_(file_menu_item) + + show_hidden_menu_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_( + "Show Hidden", "hidden:", "h" + ) + + windows_menu = NSMenu.alloc().init() + + view_menu = NSMenu.alloc().init() + view_menu.addItem_(show_hidden_menu_item) + + view_menu_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_( + "View", None, "" + ) + view_menu_item.setSubmenu_(view_menu) + main_menu.addItem_(view_menu_item) + + windows_menu = NSMenu.alloc().init() + + windows_menu_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_( + "Window", None, "" + ) + windows_menu_item.setSubmenu_(windows_menu) + main_menu.addItem_(windows_menu_item) + + NSApp.setWindowsMenu_(windows_menu) + + keyboard_shortcuts_menu_item = ( + NSMenuItem.alloc().initWithTitle_action_keyEquivalent_( + "Keyboard Shortcuts", "shortcuts:", "?" + ) + ) + + help_menu = NSMenu.alloc().init() + help_menu.addItem_(keyboard_shortcuts_menu_item) + + help_menu_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_( + "Help", None, "" + ) + help_menu_item.setSubmenu_(help_menu) + main_menu.addItem_(help_menu_item) + + NSApp.setHelpMenu_(help_menu) + + def add_(self, *_args: Any) -> None: + if (not shared.win) or (not (app := shared.win.get_application())): + return + + app.lookup_action("add_game").activate() + + def import_(self, *_args: Any) -> None: + if (not shared.win) or (not (app := shared.win.get_application())): + return + + app.lookup_action("import").activate() + + def hidden_(self, *_args: Any) -> None: + if not shared.win: + return + + shared.win.lookup_action("show_hidden").activate() + + def shortcuts_(self, *_args: Any) -> None: + if (not shared.win) or (not (overlay := shared.win.get_help_overlay())): + return + + overlay.present() diff --git a/cartridges/main.py b/cartridges/main.py index bb49923..b12ad7c 100644 --- a/cartridges/main.py +++ b/cartridges/main.py @@ -58,102 +58,11 @@ from cartridges.store.store import Store from cartridges.utils.run_executable import run_executable from cartridges.window import CartridgesWindow - if sys.platform == "darwin": - from AppKit import NSApp, NSApplication, NSMenu, NSMenuItem # type: ignore - - from Foundation import NSObject # type: ignore + from AppKit import NSApp # type: ignore from PyObjCTools import AppHelper - class ApplicationDelegate(NSObject): # type: ignore - def applicationDidFinishLaunching_(self, *_args: Any) -> None: - main_menu = NSApp.mainMenu() - - add_game_menu_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_( - "Add Game", "add:", "n" - ) - - import_menu_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_( - "Import", "import:", "i" - ) - - file_menu = NSMenu.alloc().init() - file_menu.addItem_(add_game_menu_item) - file_menu.addItem_(import_menu_item) - - file_menu_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_( - "File", None, "" - ) - file_menu_item.setSubmenu_(file_menu) - main_menu.addItem_(file_menu_item) - - show_hidden_menu_item = ( - NSMenuItem.alloc().initWithTitle_action_keyEquivalent_( - "Show Hidden", "hidden:", "h" - ) - ) - - windows_menu = NSMenu.alloc().init() - - view_menu = NSMenu.alloc().init() - view_menu.addItem_(show_hidden_menu_item) - - view_menu_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_( - "View", None, "" - ) - view_menu_item.setSubmenu_(view_menu) - main_menu.addItem_(view_menu_item) - - windows_menu = NSMenu.alloc().init() - - windows_menu_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_( - "Window", None, "" - ) - windows_menu_item.setSubmenu_(windows_menu) - main_menu.addItem_(windows_menu_item) - - NSApp.setWindowsMenu_(windows_menu) - - keyboard_shortcuts_menu_item = ( - NSMenuItem.alloc().initWithTitle_action_keyEquivalent_( - "Keyboard Shortcuts", "shortcuts:", "?" - ) - ) - - help_menu = NSMenu.alloc().init() - help_menu.addItem_(keyboard_shortcuts_menu_item) - - help_menu_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_( - "Help", None, "" - ) - help_menu_item.setSubmenu_(help_menu) - main_menu.addItem_(help_menu_item) - - NSApp.setHelpMenu_(help_menu) - - def add_(self, *_args: Any) -> None: - if (not shared.win) or (not (app := shared.win.get_application())): - return - - app.lookup_action("add_game").activate() - - def import_(self, *_args: Any) -> None: - if (not shared.win) or (not (app := shared.win.get_application())): - return - - app.lookup_action("import").activate() - - def hidden_(self, *_args: Any) -> None: - if not shared.win: - return - - shared.win.lookup_action("show_hidden").activate() - - def shortcuts_(self, *_args: Any) -> None: - if (not shared.win) or (not (overlay := shared.win.get_help_overlay())): - return - - overlay.present() + from cartridges.application_delegate import ApplicationDelegate class CartridgesApplication(Adw.Application): diff --git a/cartridges/meson.build b/cartridges/meson.build index 68e1359..ee10a4f 100644 --- a/cartridges/meson.build +++ b/cartridges/meson.build @@ -15,6 +15,7 @@ install_subdir('logging', install_dir: moduledir) install_subdir('errors', install_dir: moduledir) install_data( [ + 'application_delegate.py', 'main.py', 'window.py', 'preferences.py',