From 33d05c1b1f1b88e1be715c3f13cb3aaf1ca909eb Mon Sep 17 00:00:00 2001 From: "Mike A. Trethewey" Date: Tue, 23 Feb 2021 01:38:10 -0800 Subject: [PATCH] Fix Selectors --- source/gui/adjust/overview.py | 105 +++++++++++++++++++++------- source/gui/randomize/gameoptions.py | 88 ++++++++++++++++------- source/gui/randomize/generation.py | 4 +- 3 files changed, 142 insertions(+), 55 deletions(-) diff --git a/source/gui/adjust/overview.py b/source/gui/adjust/overview.py index 4f7fe543..e857696d 100644 --- a/source/gui/adjust/overview.py +++ b/source/gui/adjust/overview.py @@ -1,6 +1,7 @@ from tkinter import ttk, filedialog, messagebox, StringVar, Button, Entry, Frame, Label, E, W, LEFT, RIGHT, X, BOTTOM from AdjusterMain import adjust from argparse import Namespace +from source.classes.Empty import Empty from source.classes.SpriteSelector import SpriteSelector import source.gui.widgets as widgets import json @@ -44,49 +45,101 @@ def adjust_page(top, parent, settings): # Sprite Selection # This one's more-complicated, build it and stuff it - self.spriteNameVar2 = StringVar() - spriteDialogFrame2 = Frame(self.frames["leftAdjustFrame"]) - baseSpriteLabel2 = Label(spriteDialogFrame2, text='Sprite:') - spriteEntry2 = Label(spriteDialogFrame2, textvariable=self.spriteNameVar2) + # widget ID + widget = "sprite" + + # Empty object + self.widgets[widget] = Empty() + # pieces + self.widgets[widget].pieces = {} + + # frame + self.widgets[widget].pieces["frame"] = Frame(self.frames["leftAdjustFrame"]) + # frame: label + self.widgets[widget].pieces["frame"].label = Label(self.widgets[widget].pieces["frame"], text='Sprite: ') + # spritename: label + self.widgets[widget].pieces["frame"].spritename = Label(self.widgets[widget].pieces["frame"], text='(unchanged)') + # storage var + self.widgets[widget].storageVar = StringVar() + self.widgets[widget].storageVar.set(settings["sprite"]) + + # store sprite self.sprite = None def set_sprite(sprite_param, random_sprite=False): + top.randomSprite.set(random_sprite) + + widget = "sprite" + sprite = {} + sprite["object"] = sprite_param + sprite["label"] = { + "show": "(unchanged)", + "store": "(unchanged)" + } if sprite_param is None or not sprite_param.valid: self.sprite = None - self.spriteNameVar2.set('(unchanged)') else: self.sprite = sprite_param - self.spriteNameVar2.set(self.sprite.name) - top.randomSprite.set(random_sprite) + sprite["label"]["store"] = sprite_param.name + sprite["label"]["show"] = sprite_param.name if not random_sprite else "(random)" + self.widgets[widget].storageVar.set(sprite["label"]["store"]) + self.widgets[widget].pieces["frame"].spritename.config(text=sprite["label"]["show"]) + + print(top.randomSprite.get(),sprite["label"]) def SpriteSelectAdjuster(): SpriteSelector(parent, set_sprite, adjuster=True) - spriteSelectButton2 = Button(spriteDialogFrame2, text='...', command=SpriteSelectAdjuster) + # dialog button + self.widgets[widget].pieces["button"] = Button(self.widgets[widget].pieces["frame"], text='...', command=SpriteSelectAdjuster) - baseSpriteLabel2.pack(side=LEFT) - spriteEntry2.pack(side=LEFT) - spriteSelectButton2.pack(side=LEFT) - spriteDialogFrame2.pack(anchor=E) + # frame label: pack + self.widgets[widget].pieces["frame"].label.pack(side=LEFT) + # spritename: pack + self.widgets[widget].pieces["frame"].spritename.pack(side=LEFT) + # button: pack + self.widgets[widget].pieces["button"].pack(side=LEFT) + # frame: pack + self.widgets[widget].pieces["frame"].pack(anchor=E) + self.frames["adjustrom"] = Frame(self.frames["bottomAdjustFrame"]) + self.frames["adjustrom"].pack(anchor=W, fill=X) # Path to game file to Adjust # This one's more-complicated, build it and stuff it - adjustRomFrame = Frame(self.frames["bottomAdjustFrame"]) - adjustRomLabel = Label(adjustRomFrame, text='Rom to adjust: ') - self.romVar2 = StringVar(value=settings["rom"]) - romEntry2 = Entry(adjustRomFrame, textvariable=self.romVar2) + # widget ID + widget = "adjustrom" - def RomSelect2(): - rom = filedialog.askopenfilename(filetypes=[("Rom Files", (".sfc", ".smc")), ("All Files", "*")]) - if rom: - settings["rom"] = rom - self.romVar2.set(rom) - romSelectButton2 = Button(adjustRomFrame, text='Select Rom', command=RomSelect2) + # Empty object + self.widgets[widget] = Empty() + # pieces + self.widgets[widget].pieces = {} - adjustRomLabel.pack(side=LEFT) - romEntry2.pack(side=LEFT, fill=X, expand=True) - romSelectButton2.pack(side=LEFT) - adjustRomFrame.pack(fill=X) + # frame + self.widgets[widget].pieces["frame"] = Frame(self.frames["adjustrom"]) + # frame: label + self.widgets[widget].pieces["frame"].label = Label(self.widgets[widget].pieces["frame"], text='Rom to Adjust: ') + # storage var + self.widgets[widget].storageVar = StringVar() + # textbox + self.widgets[widget].pieces["textbox"] = Entry(self.widgets[widget].pieces["frame"], textvariable=self.widgets[widget].storageVar) + self.widgets[widget].storageVar.set(settings["rom"]) + + # FIXME: Translate these + def RomSelect(): + widget = "adjustrom" + rom = filedialog.askopenfilename(filetypes=[("Rom Files", (".sfc", ".smc")), ("All Files", "*")], initialdir=os.path.join(".")) + self.widgets[widget].storageVar.set(rom) + # dialog button + self.widgets[widget].pieces["button"] = Button(self.widgets[widget].pieces["frame"], text='Select Rom', command=RomSelect) + + # frame label: pack + self.widgets[widget].pieces["frame"].label.pack(side=LEFT) + # textbox: pack + self.widgets[widget].pieces["textbox"].pack(side=LEFT, fill=X, expand=True) + # button: pack + self.widgets[widget].pieces["button"].pack(side=LEFT) + # frame: pack + self.widgets[widget].pieces["frame"].pack(fill=X) # These are the options to Adjust def adjustRom(): diff --git a/source/gui/randomize/gameoptions.py b/source/gui/randomize/gameoptions.py index 46fda67a..cf4330d1 100644 --- a/source/gui/randomize/gameoptions.py +++ b/source/gui/randomize/gameoptions.py @@ -1,6 +1,7 @@ from tkinter import ttk, StringVar, Button, Entry, Frame, Label, E, W, LEFT, RIGHT from functools import partial -import source.classes.SpriteSelector as spriteSelector +from source.classes.Empty import Empty +from source.classes.SpriteSelector import SpriteSelector import source.gui.widgets as widgets import json import os @@ -39,46 +40,79 @@ def gameoptions_page(top, parent): packAttrs["anchor"] = W self.widgets[key].pack(packAttrs) - ## Sprite selection + # Sprite Selection # This one's more-complicated, build it and stuff it - spriteDialogFrame = Frame(self.frames["leftRomOptionsFrame"]) - baseSpriteLabel = Label(spriteDialogFrame, text='Sprite:') + # widget ID + widget = "sprite" - self.widgets["sprite"] = {} - self.widgets["sprite"]["spriteObject"] = None - self.widgets["sprite"]["spriteNameVar"] = StringVar() + # Empty object + self.widgets[widget] = Empty() + # pieces + self.widgets[widget].pieces = {} - self.widgets["sprite"]["spriteNameVar"].set('(unchanged)') - spriteEntry = Label(spriteDialogFrame, textvariable=self.widgets["sprite"]["spriteNameVar"]) + # frame + self.widgets[widget].pieces["frame"] = Frame(self.frames["leftRomOptionsFrame"]) + # frame: label + self.widgets[widget].pieces["frame"].label = Label(self.widgets[widget].pieces["frame"], text='Sprite: ') + # spritename: label + self.widgets[widget].pieces["frame"].spritename = Label(self.widgets[widget].pieces["frame"], text='(unchanged)') + # storage var + self.widgets[widget].storageVar = StringVar() - def sprite_setter(spriteObject): - self.widgets["sprite"]["spriteObject"] = spriteObject + # store sprite + self.sprite = None - def sprite_select(): - spriteSelector.SpriteSelector(parent, partial(set_sprite, spriteSetter=sprite_setter, - spriteNameVar=self.widgets["sprite"]["spriteNameVar"], - randomSpriteVar=top.randomSprite)) + def SpriteSetter(spriteObject): + sprite = {} + sprite["object"] = spriteObject + sprite["label"] = { + "show": "(unchanged)", + "store": "(unchanged)" + } + sprite["label"]["store"] = sprite["object"].name + sprite["label"]["show"] = sprite["object"].name if not top.randomSprite.get() else "(random)" - spriteSelectButton = Button(spriteDialogFrame, text='...', command=sprite_select) + print(top.randomSprite.get(),sprite["label"]) - baseSpriteLabel.pack(side=LEFT) - spriteEntry.pack(side=LEFT) - spriteSelectButton.pack(side=LEFT) - spriteDialogFrame.pack(anchor=E) + self.sprite = sprite["object"] + self.widgets[widget].pieces["frame"].spritename.config(text=sprite["label"]["show"]) + def SpriteSelect(): + SpriteSelector(parent, partial(set_sprite, spriteSetter=SpriteSetter,spriteNameVar=self.widgets[widget].storageVar,randomSpriteVar=top.randomSprite)) + + # dialog button + self.widgets[widget].pieces["button"] = Button(self.widgets[widget].pieces["frame"], text='...', command=SpriteSelect) + + # frame label: pack + self.widgets[widget].pieces["frame"].label.pack(side=LEFT) + # spritename: pack + self.widgets[widget].pieces["frame"].spritename.pack(side=LEFT) + # button: pack + self.widgets[widget].pieces["button"].pack(side=LEFT) + # frame: pack + self.widgets[widget].pieces["frame"].pack(anchor=E) return self - def set_sprite(sprite_param, random_sprite=False, spriteSetter=None, spriteNameVar=None, randomSpriteVar=None): - if sprite_param is None or not sprite_param.valid: + if randomSpriteVar: + randomSpriteVar.set(random_sprite) + + widget = "sprite" + sprite = {} + sprite["object"] = sprite_param + sprite["label"] = { + "show": "(unchanged)", + "store": "(unchanged)" + } + if sprite["object"] is None or not sprite["object"].valid: if spriteSetter: spriteSetter(None) if spriteNameVar is not None: - spriteNameVar.set('(unchanged)') + spriteNameVar.set(sprite["store"]) else: if spriteSetter: - spriteSetter(sprite_param) + spriteSetter(sprite["object"]) if spriteNameVar is not None: - spriteNameVar.set(sprite_param.name) - if randomSpriteVar: - randomSpriteVar.set(random_sprite) + spriteNameVar.set(sprite["label"]["store"]) + sprite["label"]["store"] = sprite["object"].name + sprite["label"]["show"] = sprite["object"].name if not random_sprite else "(random)" diff --git a/source/gui/randomize/generation.py b/source/gui/randomize/generation.py index 4bcb868c..37fed386 100644 --- a/source/gui/randomize/generation.py +++ b/source/gui/randomize/generation.py @@ -65,6 +65,7 @@ def generation_page(parent,settings): # FIXME: Translate these def RomSelect(): + widget = "rom" rom = filedialog.askopenfilename(filetypes=[("Rom Files", (".sfc", ".smc")), ("All Files", "*")], initialdir=os.path.join(".")) self.widgets[widget].storageVar.set(rom) # dialog button @@ -94,7 +95,6 @@ def generation_page(parent,settings): self.frames["diags"].pack() self.widgets[widget].pieces["frame"] = Frame(self.frames["diags"]) - def diags(): # Debugging purposes dims = { @@ -106,7 +106,7 @@ def generation_page(parent,settings): "width": 120, "height": 50 } - } + } diag = Tk() diag.title("Door Shuffle " + __version__) diag.geometry(str(dims["window"]["width"]) + 'x' + str(dims["window"]["height"]))