diff --git a/pysollib/actions.py b/pysollib/actions.py index 0bd29959..b1510860 100644 --- a/pysollib/actions.py +++ b/pysollib/actions.py @@ -179,6 +179,7 @@ class PysolMenubar(PysolMenubarTk): self.updateBookmarkMenuState() self.setMenuState(ms.restart, "edit.restart") self.setMenuState(ms.custom_game, "edit.editcurrentgame") + self.setMenuState(ms.custom_game, "edit.deletecurrentgame") # Game menu self.setMenuState(ms.deal, "game.dealcards") self.setMenuState(ms.autodrop, "game.autodrop") diff --git a/pysollib/gamedb.py b/pysollib/gamedb.py index 0c22b910..ff2774a6 100644 --- a/pysollib/gamedb.py +++ b/pysollib/gamedb.py @@ -705,6 +705,11 @@ def registerGame(gameinfo): return gameinfo +def hideGame(game): + game.gameinfo.si.game_type = GI.GT_HIDDEN + registerGame(game.gameinfo) + + def loadGame(modname, filename, check_game=False): # print "load game", modname, filename GAME_DB.check_game = check_game diff --git a/pysollib/ui/tktile/menubar.py b/pysollib/ui/tktile/menubar.py index d810ee8d..ba1a46c6 100644 --- a/pysollib/ui/tktile/menubar.py +++ b/pysollib/ui/tktile/menubar.py @@ -398,6 +398,9 @@ class PysolMenubarTkCommon: menu.add_command( label=n_("&Edit current game"), command=self.mWizardEdit) + menu.add_command( + label=n_("&Delete current game"), + command=self.mWizardDelete) menu = MfxMenu(self.menubar, label=n_("&Game")) menu.add_command( @@ -932,7 +935,8 @@ class PysolMenubarTkCommon: self.updateGamesMenu(submenu, games) def _addSelectAllGameSubMenu(self, games, menu, command, variable): - menu = MfxMenu(menu, label=n_("&All games by name")) + if menu.name != "allgamesbyname": + menu = MfxMenu(menu, label=n_("&All games by name")) n, d = 0, self.cb_max i = 0 while True: @@ -1069,6 +1073,24 @@ class PysolMenubarTkCommon: games.append(gi) self.updateGamesMenu(submenu, games) + def updateCustomGamesMenu(self): + menu = self.menupath[".menubar.select.customgames"][2] + menu2 = self.menupath[".menubar.select.allgamesbyname"][2] + + def select_func_visible(gi): + return gi.si.game_type != GI.GT_HIDDEN + + def select_func_custom(gi): + return gi.si.game_type == GI.GT_CUSTOM + + games = list(map(self.app.gdb.get, + self.app.gdb.getGamesIdSortedByName())) + games = list(filter(select_func_visible, games)) + self.progress = False + self.updateGamesMenu(menu2, games) + games = list(filter(select_func_custom, games)) + self.updateGamesMenu(menu, games) + def updateBookmarkMenuState(self): state = self._getEnabledState mp1 = self.menupath.get(".menubar.edit.setbookmark") @@ -1724,14 +1746,7 @@ Error while saving game. return if SELECT_GAME_MENU: - menu = self.menupath[".menubar.select.customgames"][2] - - def select_func(gi): - return gi.si.game_type == GI.GT_CUSTOM - games = list(map(self.app.gdb.get, - self.app.gdb.getGamesIdSortedByName())) - games = list(filter(select_func, games)) - self.updateGamesMenu(menu, games) + self.updateCustomGamesMenu() self.tkopt.gameid.set(gameid) self._mSelectGame(gameid, force=True) @@ -1746,6 +1761,21 @@ Error while saving game. return self.wizardDialog(edit=True) + def mWizardDelete(self, *event): + if self._cancelDrag(break_pause=False): + return + if not self.game.areYouSure(_("Delete game"), + _("Delete the game " + + self.game.gameinfo.name + "?")): + return + from pysollib.wizardutil import delete_game + delete_game(self.game) + self.game.endGame() + self.game.quitGame(2) + + if SELECT_GAME_MENU: + self.updateCustomGamesMenu() + def toolbarConfig(self, w, v): if self._cancelDrag(break_pause=False): return diff --git a/pysollib/wizardutil.py b/pysollib/wizardutil.py index b94dcf29..2b7acc03 100644 --- a/pysollib/wizardutil.py +++ b/pysollib/wizardutil.py @@ -23,7 +23,7 @@ import os -from pysollib.gamedb import GI, loadGame +from pysollib.gamedb import GI, loadGame, hideGame from pysollib.layout import Layout from pysollib.mygettext import _, n_ from pysollib.stack import AC_FoundationStack, \ @@ -451,6 +451,12 @@ registerCustomGame(MyCustomGame) return gameid +def delete_game(game): + hideGame(game) + fn = game.MODULE_FILENAME + os.remove(fn) + + def reset_wizard(game): for w in WizardWidgets: if isinstance(w, six.string_types):