diff --git a/Gui.py b/Gui.py index 7a8fe0dc..fa51c557 100755 --- a/Gui.py +++ b/Gui.py @@ -9,7 +9,7 @@ from CLI import get_settings from DungeonRandomizer import parse_arguments from gui.adjust.overview import adjust_page from gui.custom.overview import custom_page -from gui.loadcliargs import loadcliargs +from gui.loadcliargs import loadcliargs, loadadjustargs from gui.randomize.item import item_page from gui.randomize.entrando import entrando_page from gui.randomize.enemizer import enemizer_page @@ -29,6 +29,8 @@ def guiMain(args=None): settings_path = os.path.join(user_resources_path) if not os.path.exists(settings_path): os.makedirs(settings_path) + for widget in self.pages["adjust"].content.widgets: + args["adjust." + widget] = self.pages["adjust"].content.widgets[widget].storageVar.get() with open(os.path.join(settings_path, "settings.json"), "w+") as f: f.write(json.dumps(args, indent=2)) os.chmod(os.path.join(settings_path, "settings.json"),0o755) @@ -141,8 +143,11 @@ def guiMain(args=None): return False vcmd=(self.pages["custom"].content.register(validation), '%P') + # load adjust settings into options + loadadjustargs(self, self.settings) + # load args from CLI into options - loadcliargs(self, args) + loadcliargs(self, args, self.settings) mainWindow.mainloop() diff --git a/gui/adjust/overview.py b/gui/adjust/overview.py index 74d84452..14999eee 100644 --- a/gui/adjust/overview.py +++ b/gui/adjust/overview.py @@ -180,14 +180,19 @@ def adjust_page(top, parent, settings): adjustRomFrame.pack(fill=X, expand=True) def adjustRom(): + options = { + "heartbeep": "heartbeep", + "heartcolor": "heartcolor", + "menuspeed": "fastmenu", + "owpalettes": "ow_palettes", + "uwpalettes": "uw_palettes", + "quickswap": "quickswap", + "nobgm": "disablemusic" + } guiargs = Namespace() - guiargs.heartbeep = self.widgets["heartbeep"].storageVar.get() - guiargs.heartcolor = self.widgets["heartcolor"].storageVar.get() - guiargs.fastmenu = self.widgets["menuspeed"].storageVar.get() - guiargs.ow_palettes = self.widgets["owpalettes"].storageVar.get() - guiargs.uw_palettes = self.widgets["uwpalettes"].storageVar.get() - guiargs.quickswap = bool(self.widgets["quickswap"].storageVar.get()) - guiargs.disablemusic = bool(self.widgets["nobgm"].storageVar.get()) + for option in options: + arg = options[option] + setattr(guiargs, arg, self.widgets[option].storageVar.get()) guiargs.rom = self.romVar2.get() guiargs.baserom = top.pages["randomizer"].pages["generation"].romVar.get() guiargs.sprite = self.sprite diff --git a/gui/loadcliargs.py b/gui/loadcliargs.py index 0db97113..5ae18c22 100644 --- a/gui/loadcliargs.py +++ b/gui/loadcliargs.py @@ -3,7 +3,7 @@ from gui.randomize.gameoptions import set_sprite from Rom import Sprite -def loadcliargs(gui, args): +def loadcliargs(gui, args, settings=None): if args is not None: for k, v in vars(args).items(): if type(v) is dict: @@ -13,57 +13,57 @@ def loadcliargs(gui, args): # set up options to get # Page::Subpage::GUI-id::param-id options = { - "randomizer": { - "item": { - "retro": "retro", - "worldstate": "mode", - "logiclevel": "logic", - "goal": "goal", - "crystals_gt": "crystals_gt", - "crystals_ganon": "crystals_ganon", - "weapons": "swords", - "itempool": "difficulty", - "itemfunction": "item_functionality", - "timer": "timer", - "progressives": "progressive", - "accessibility": "accessibility", - "sortingalgo": "algorithm" - }, - "entrance": { - "openpyramid": "openpyramid", - "shuffleganon": "shuffleganon", - "entranceshuffle": "shuffle" - }, - "enemizer": { - "potshuffle": "shufflepots", - "enemyshuffle": "shuffleenemies", - "bossshuffle": "shufflebosses", - "enemydamage": "enemy_damage", - "enemyhealth": "enemy_health" - }, - "dungeon": { - "mapshuffle": "mapshuffle", - "compassshuffle": "compassshuffle", - "smallkeyshuffle": "keyshuffle", - "bigkeyshuffle": "bigkeyshuffle", - "dungeondoorshuffle": "door_shuffle", - "experimental": "experimental" - }, - "gameoptions": { - "hints": "hints", - "nobgm": "disablemusic", - "quickswap": "quickswap", - "heartcolor": "heartcolor", - "heartbeep": "heartbeep", - "menuspeed": "fastmenu", - "owpalettes": "ow_palettes", - "uwpalettes": "uw_palettes" - }, - "generation": { - "spoiler": "create_spoiler", - "suppressrom": "suppress_rom" - } - } + "randomizer": { + "item": { + "retro": "retro", + "worldstate": "mode", + "logiclevel": "logic", + "goal": "goal", + "crystals_gt": "crystals_gt", + "crystals_ganon": "crystals_ganon", + "weapons": "swords", + "itempool": "difficulty", + "itemfunction": "item_functionality", + "timer": "timer", + "progressives": "progressive", + "accessibility": "accessibility", + "sortingalgo": "algorithm" + }, + "entrance": { + "openpyramid": "openpyramid", + "shuffleganon": "shuffleganon", + "entranceshuffle": "shuffle" + }, + "enemizer": { + "potshuffle": "shufflepots", + "enemyshuffle": "shuffleenemies", + "bossshuffle": "shufflebosses", + "enemydamage": "enemy_damage", + "enemyhealth": "enemy_health" + }, + "dungeon": { + "mapshuffle": "mapshuffle", + "compassshuffle": "compassshuffle", + "smallkeyshuffle": "keyshuffle", + "bigkeyshuffle": "bigkeyshuffle", + "dungeondoorshuffle": "door_shuffle", + "experimental": "experimental" + }, + "gameoptions": { + "hints": "hints", + "nobgm": "disablemusic", + "quickswap": "quickswap", + "heartcolor": "heartcolor", + "heartbeep": "heartbeep", + "menuspeed": "fastmenu", + "owpalettes": "ow_palettes", + "uwpalettes": "uw_palettes" + }, + "generation": { + "spoiler": "create_spoiler", + "suppressrom": "suppress_rom" + } + } } for mainpage in options: for subpage in options[mainpage]: @@ -71,7 +71,10 @@ def loadcliargs(gui, args): arg = options[mainpage][subpage][widget] gui.pages[mainpage].pages[subpage].widgets[widget].storageVar.set(getattr(args, arg)) if subpage == "gameoptions" and not widget == "hints": - gui.pages["adjust"].content.widgets[widget].storageVar.set(getattr(args, arg)) + hasSettings = settings is not None + hasWidget = ("adjust." + widget) in settings if hasSettings else None + if hasWidget is None: + gui.pages["adjust"].content.widgets[widget].storageVar.set(getattr(args, arg)) gui.pages["randomizer"].pages["enemizer"].enemizerCLIpathVar.set(args.enemizercli) gui.pages["randomizer"].pages["generation"].romVar.set(args.rom) @@ -101,3 +104,23 @@ def loadcliargs(gui, args): set_sprite(sprite_obj, r_sprite_flag, spriteSetter=sprite_setter_adj, spriteNameVar=gui.pages["adjust"].content.spriteNameVar2, randomSpriteVar=gui.randomSprite) + +def loadadjustargs(gui, settings): + options = { + "adjust": { + "content": { + "nobgm": "adjust.nobgm", + "quickswap": "adjust.quickswap", + "heartcolor": "adjust.heartcolor", + "heartbeep": "adjust.heartbeep", + "menuspeed": "adjust.menuspeed", + "owpalettes": "adjust.owpalettes", + "uwpalettes": "adjust.uwpalettes" + } + } + } + for mainpage in options: + for subpage in options[mainpage]: + for widget in options[mainpage][subpage]: + key = options[mainpage][subpage][widget] + gui.pages[mainpage].content.widgets[widget].storageVar.set(settings[key])