diff --git a/cartridges/details_dialog.py b/cartridges/details_dialog.py index c3f6d3f..a305cea 100644 --- a/cartridges/details_dialog.py +++ b/cartridges/details_dialog.py @@ -59,8 +59,15 @@ class DetailsDialog(Adw.Dialog): cover_changed: bool = False + is_open = False + def __init__(self, game: Optional[Game] = None, **kwargs: Any): super().__init__(**kwargs) + + # Make it so only one dialog can be open at a time + self.__class__.is_open = True + self.connect("closed", lambda *_: self.set_is_open(False)) + self.game: Game = game self.game_cover: GameCover = GameCover({self.cover}) @@ -325,3 +332,6 @@ class DetailsDialog(Adw.Dialog): def choose_cover(self, *_args: Any) -> None: self.image_file_dialog.open(self.get_root(), None, self.set_cover) + + def set_is_open(self, is_open: bool) -> None: + self.__class__.is_open = is_open diff --git a/cartridges/main.py b/cartridges/main.py index 3d0e29e..bb49923 100644 --- a/cartridges/main.py +++ b/cartridges/main.py @@ -69,12 +69,32 @@ if sys.platform == "darwin": 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) @@ -111,11 +131,23 @@ if sys.platform == "darwin": 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.on_show_hidden_action() + 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())): @@ -360,7 +392,7 @@ class CartridgesApplication(Adw.Application): _parameter: Any = None, page_name: Optional[str] = None, expander_row: Optional[str] = None, - ) -> CartridgesWindow: + ) -> Optional[CartridgesPreferences]: if CartridgesPreferences.is_open: return @@ -383,6 +415,9 @@ class CartridgesApplication(Adw.Application): DetailsDialog(shared.win.active_game).present(shared.win) def on_add_game_action(self, *_args: Any) -> None: + if DetailsDialog.is_open: + return + DetailsDialog().present(shared.win) def on_import_action(self, *_args: Any) -> None: