From bba2058a5b153a1cd5aadcc595eb7ac01fe4d728 Mon Sep 17 00:00:00 2001 From: "Mike A. Trethewey" Date: Sat, 15 Feb 2020 06:55:10 -0800 Subject: [PATCH] Dictify Dungeon Rando options --- gui/randomize/dungeon.py | 135 +++++++++++++++++++-------------------- gui/widgets.py | 14 ++++ 2 files changed, 80 insertions(+), 69 deletions(-) diff --git a/gui/randomize/dungeon.py b/gui/randomize/dungeon.py index 973e4830..1b8ecf94 100644 --- a/gui/randomize/dungeon.py +++ b/gui/randomize/dungeon.py @@ -14,76 +14,73 @@ def dungeon_page(parent): mscbLabel = Label(mcsbshuffleFrame, text="Shuffle: ") mscbLabel.pack(side=LEFT) - ## Map Shuffle - key = "mapshuffle" - self.widgets[key] = widgets.make_widget( - self, - "checkbox", - mcsbshuffleFrame, - "Maps", - None - ) - self.widgets[key].pack(side=LEFT) - - ## Compass Shuffle - key = "compassshuffle" - self.widgets[key] = widgets.make_widget( - self, - "checkbox", - mcsbshuffleFrame, - "Compasses", - None - ) - self.widgets[key].pack(side=LEFT) - - ## Small Key Shuffle - key = "smallkeyshuffle" - self.widgets[key] = widgets.make_widget( - self, - "checkbox", - mcsbshuffleFrame, - "Small Keys", - None - ) - self.widgets[key].pack(side=LEFT) - - ## Big Key Shuffle - key = "bigkeyshuffle" - self.widgets[key] = widgets.make_widget( - self, - "checkbox", - mcsbshuffleFrame, - "Big Keys", - None - ) - self.widgets[key].pack(side=LEFT) - - ## Dungeon Door Shuffle - key = "dungeondoorshuffle" - self.widgets[key] = widgets.make_widget( - self, - "selectbox", - self, - "Dungeon Door Shuffle", - None, - {"label": {"side": LEFT}, "selectbox": {"side": RIGHT}, "default": "Basic"}, - { - "Vanilla": "vanilla", - "Basic": "basic", - "Crossed": "crossed" + myDict = { + ## Map Shuffle + "mapshuffle": { + "type": "checkbox", + "label": { + "text": "Maps" + } + }, + ## Compass Shuffle + "compassshuffle": { + "type": "checkbox", + "label": { + "text": "Compasses" + } + }, + ## Small Key Shuffle + "smallkeyshuffle": { + "type": "checkbox", + "label": { + "text": "Small Keys" + } + }, + ## Big Key Shuffle + "bigkeyshuffle": { + "type": "checkbox", + "label": { + "text": "Small Keys" + } } - ) - self.widgets[key].pack(anchor=W) + } - # Experimental features - key = "experimental" - self.widgets[key] = widgets.make_widget( - self, - "checkbox", - self, - "Enable Experimental Features", - None - ) - self.widgets[key].pack(anchor=W) + dictWidgets = widgets.make_widgets_from_dict(self, myDict, mcsbshuffleFrame) + + for key in dictWidgets: + self.widgets[key] = dictWidgets[key] + self.widgets[key].pack(side=LEFT) + + myDict = { + "dungeondoorshuffle": { + "type": "selectbox", + "label": { + "text": "Dungeon Door Shuffle" + }, + "packAttrs": { + "label": { "side": LEFT }, + "selectbox": {"side": RIGHT}, + "default": "Basic" + }, + "options": { + "Vanilla": "vanilla", + "Basic": "basic", + "Crossed": "crossed" + } + }, + ## Experiemental features + "experimental": { + "type": "checkbox", + "label": { + "text": "Enable Experimental Features" + } + } + } + + dictWidgets = widgets.make_widgets_from_dict(self, myDict, self) + + for key in dictWidgets: + self.widgets[key] = dictWidgets[key] + self.widgets[key].pack(anchor=W) return self diff --git a/gui/widgets.py b/gui/widgets.py index 5601482b..c943fa42 100644 --- a/gui/widgets.py +++ b/gui/widgets.py @@ -117,3 +117,17 @@ def make_widget(self, type, parent, label, storageVar=None, packAttrs=dict(), op thisStorageVar = StringVar() widget = make_textbox(self, parent, label, thisStorageVar, packAttrs) return widget + +def make_widget_from_dict(self, defn, parent): + type = defn["type"] if "type" in defn else None + label = defn["label"]["text"] if "label" in defn and "text" in defn["label"] else "" + packAttrs = defn["packAttrs"] if "packAttrs" in defn else None + options = defn["options"] if "options" in defn else None + widget = make_widget(self, type, parent, label, None, packAttrs, options) + return widget + +def make_widgets_from_dict(self, defns, parent): + widgets = {} + for key,defn in defns.items(): + widgets[key] = make_widget_from_dict(self, defn, parent) + return widgets