From 64e0d8ebcf7c369af2d876a14621d51f86889d65 Mon Sep 17 00:00:00 2001 From: "Mike A. Trethewey" Date: Tue, 11 Feb 2020 01:59:41 -0800 Subject: [PATCH] Pretty Multiworld options --- gui/bottom.py | 2 +- gui/loadcliargs.py | 2 +- gui/randomize/multiworld.py | 34 ++++++++++++++++++++++------------ gui/widgets.py | 22 +++++++++++++++++++++- 4 files changed, 45 insertions(+), 15 deletions(-) diff --git a/gui/bottom.py b/gui/bottom.py index cc426d16..3eee7427 100644 --- a/gui/bottom.py +++ b/gui/bottom.py @@ -31,7 +31,7 @@ def bottom_frame(self,parent,args=None): def generateRom(): guiargs = Namespace() - guiargs.multi = int(parent.multiworldWindow.worldVar.get()) + guiargs.multi = int(parent.multiworldWindow.multiworldWidgets["worlds"].storageVar.get()) guiargs.names = parent.multiworldWindow.namesVar.get() guiargs.seed = int(parent.farBottomFrame.seedVar.get()) if parent.farBottomFrame.seedVar.get() else None guiargs.count = int(parent.farBottomFrame.countVar.get()) if parent.farBottomFrame.countVar.get() != '1' else None diff --git a/gui/loadcliargs.py b/gui/loadcliargs.py index 4a5afa7a..d72209d7 100644 --- a/gui/loadcliargs.py +++ b/gui/loadcliargs.py @@ -15,7 +15,7 @@ def loadcliargs(gui,args): gui.gameOptionsWindow.quickSwapVar.set(int(args.quickswap)) gui.gameOptionsWindow.disableMusicVar.set(int(args.disablemusic)) if args.multi: - gui.multiworldWindow.worldVar.set(str(args.multi)) + gui.multiworldWindow.multiworldWidgets["worlds"].storageVar.set(str(args.multi)) if args.count: gui.farBottomFrame.countVar.set(str(args.count)) if args.seed: diff --git a/gui/randomize/multiworld.py b/gui/randomize/multiworld.py index dcacf293..8e5e6f7c 100644 --- a/gui/randomize/multiworld.py +++ b/gui/randomize/multiworld.py @@ -1,25 +1,35 @@ -from tkinter import ttk, StringVar, Entry, Frame, Label, Spinbox, E, W, LEFT, RIGHT +from tkinter import ttk, StringVar, Entry, Frame, Label, Spinbox, N, E, W, X, LEFT, RIGHT +import gui.widgets as widgets def multiworld_page(parent,working_dirs): + # Multiworld self = ttk.Frame(parent) - # Multiworld - multiFrame = Frame(self) + # Multiworld options + self.multiworldWidgets = {} + ## Number of Worlds - worldLabel = Label(multiFrame, text='Worlds') - self.worldVar = StringVar(value=working_dirs["multi.worlds"]) - worldSpinbox = Spinbox(multiFrame, from_=1, to=100, width=5, textvariable=self.worldVar) - worldLabel.pack(side=LEFT) - worldSpinbox.pack(side=LEFT) + key = "worlds" + self.multiworldWidgets[key] = widgets.make_widget( + self, + "spinbox", + self, + "Worlds", + None, + {"label": {"side": LEFT}, "spinbox": {"side": RIGHT}} + ) + self.multiworldWidgets[key].pack(side=LEFT, anchor=N) + ## List of Player Names - namesLabel = Label(multiFrame, text='Player names') + namesFrame = Frame(self) + namesLabel = Label(namesFrame, text='Player names') self.namesVar = StringVar(value=working_dirs["multi.names"]) def saveMultiNames(caller,_,mode): working_dirs["multi.names"] = self.namesVar.get() self.namesVar.trace_add("write",saveMultiNames) - namesEntry = Entry(multiFrame, textvariable=self.namesVar) + namesEntry = Entry(namesFrame, textvariable=self.namesVar) namesLabel.pack(side=LEFT) - namesEntry.pack(side=LEFT) - multiFrame.pack(anchor=W) + namesEntry.pack(side=LEFT, fill=X, expand=True) + namesFrame.pack(anchor=N, fill=X, expand=True) return self,working_dirs diff --git a/gui/widgets.py b/gui/widgets.py index 5887919a..db2629e8 100644 --- a/gui/widgets.py +++ b/gui/widgets.py @@ -1,4 +1,4 @@ -from tkinter import Checkbutton, Entry, Frame, IntVar, Label, OptionMenu, StringVar +from tkinter import Checkbutton, Entry, Frame, IntVar, Label, OptionMenu, Spinbox, StringVar def make_checkbox(self, parent, label, storageVar, packAttrs): self = Frame(parent) @@ -28,6 +28,22 @@ def make_selectbox(self, parent, label, options, storageVar, packAttrs): self.selectbox.pack(packAttrs["selectbox"]) return self +def make_spinbox(self, parent, label, storageVar, packAttrs): + self = Frame(parent) + self.storageVar = storageVar + self.label = Label(self, text=label) + self.label.pack(packAttrs["label"]) + fromNum = 1 + toNum = 100 + if "spinbox" in packAttrs: + if "from" in packAttrs: + fromNum = packAttrs["spinbox"]["from"] + if "to" in packAttrs: + toNum = packAttrs["spinbox"]["to"] + self.spinbox = Spinbox(self, from_=fromNum, to=toNum, width=5, textvariable=self.storageVar) + self.spinbox.pack(packAttrs["spinbox"]) + return self + def make_textbox(self, parent, label, storageVar, packAttrs): self = Frame(parent) self.storageVar = storageVar @@ -54,6 +70,10 @@ def make_widget(self, type, parent, label, storageVar=None, packAttrs=dict(), op if thisStorageVar is None: thisStorageVar = StringVar() widget = make_selectbox(self, parent, label, options, thisStorageVar, packAttrs) + elif type == "spinbox": + if thisStorageVar is None: + thisStorageVar = StringVar() + widget = make_spinbox(self, parent, label, thisStorageVar, packAttrs) elif type == "textbox": if thisStorageVar is None: thisStorageVar = StringVar()