Fix Selectors

This commit is contained in:
Mike A. Trethewey
2021-02-23 01:38:10 -08:00
parent 37b778c71e
commit 33d05c1b1f
3 changed files with 142 additions and 55 deletions

View File

@@ -1,6 +1,7 @@
from tkinter import ttk, filedialog, messagebox, StringVar, Button, Entry, Frame, Label, E, W, LEFT, RIGHT, X, BOTTOM from tkinter import ttk, filedialog, messagebox, StringVar, Button, Entry, Frame, Label, E, W, LEFT, RIGHT, X, BOTTOM
from AdjusterMain import adjust from AdjusterMain import adjust
from argparse import Namespace from argparse import Namespace
from source.classes.Empty import Empty
from source.classes.SpriteSelector import SpriteSelector from source.classes.SpriteSelector import SpriteSelector
import source.gui.widgets as widgets import source.gui.widgets as widgets
import json import json
@@ -44,49 +45,101 @@ def adjust_page(top, parent, settings):
# Sprite Selection # Sprite Selection
# This one's more-complicated, build it and stuff it # This one's more-complicated, build it and stuff it
self.spriteNameVar2 = StringVar() # widget ID
spriteDialogFrame2 = Frame(self.frames["leftAdjustFrame"]) widget = "sprite"
baseSpriteLabel2 = Label(spriteDialogFrame2, text='Sprite:')
spriteEntry2 = Label(spriteDialogFrame2, textvariable=self.spriteNameVar2) # 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 self.sprite = None
def set_sprite(sprite_param, random_sprite=False): 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: if sprite_param is None or not sprite_param.valid:
self.sprite = None self.sprite = None
self.spriteNameVar2.set('(unchanged)')
else: else:
self.sprite = sprite_param self.sprite = sprite_param
self.spriteNameVar2.set(self.sprite.name) sprite["label"]["store"] = sprite_param.name
top.randomSprite.set(random_sprite) 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(): def SpriteSelectAdjuster():
SpriteSelector(parent, set_sprite, adjuster=True) 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) # frame label: pack
spriteEntry2.pack(side=LEFT) self.widgets[widget].pieces["frame"].label.pack(side=LEFT)
spriteSelectButton2.pack(side=LEFT) # spritename: pack
spriteDialogFrame2.pack(anchor=E) 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 # Path to game file to Adjust
# This one's more-complicated, build it and stuff it # This one's more-complicated, build it and stuff it
adjustRomFrame = Frame(self.frames["bottomAdjustFrame"]) # widget ID
adjustRomLabel = Label(adjustRomFrame, text='Rom to adjust: ') widget = "adjustrom"
self.romVar2 = StringVar(value=settings["rom"])
romEntry2 = Entry(adjustRomFrame, textvariable=self.romVar2)
def RomSelect2(): # Empty object
rom = filedialog.askopenfilename(filetypes=[("Rom Files", (".sfc", ".smc")), ("All Files", "*")]) self.widgets[widget] = Empty()
if rom: # pieces
settings["rom"] = rom self.widgets[widget].pieces = {}
self.romVar2.set(rom)
romSelectButton2 = Button(adjustRomFrame, text='Select Rom', command=RomSelect2)
adjustRomLabel.pack(side=LEFT) # frame
romEntry2.pack(side=LEFT, fill=X, expand=True) self.widgets[widget].pieces["frame"] = Frame(self.frames["adjustrom"])
romSelectButton2.pack(side=LEFT) # frame: label
adjustRomFrame.pack(fill=X) 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 # These are the options to Adjust
def adjustRom(): def adjustRom():

View File

@@ -1,6 +1,7 @@
from tkinter import ttk, StringVar, Button, Entry, Frame, Label, E, W, LEFT, RIGHT from tkinter import ttk, StringVar, Button, Entry, Frame, Label, E, W, LEFT, RIGHT
from functools import partial 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 source.gui.widgets as widgets
import json import json
import os import os
@@ -39,46 +40,79 @@ def gameoptions_page(top, parent):
packAttrs["anchor"] = W packAttrs["anchor"] = W
self.widgets[key].pack(packAttrs) self.widgets[key].pack(packAttrs)
## Sprite selection # Sprite Selection
# This one's more-complicated, build it and stuff it # This one's more-complicated, build it and stuff it
spriteDialogFrame = Frame(self.frames["leftRomOptionsFrame"]) # widget ID
baseSpriteLabel = Label(spriteDialogFrame, text='Sprite:') widget = "sprite"
self.widgets["sprite"] = {} # Empty object
self.widgets["sprite"]["spriteObject"] = None self.widgets[widget] = Empty()
self.widgets["sprite"]["spriteNameVar"] = StringVar() # pieces
self.widgets[widget].pieces = {}
self.widgets["sprite"]["spriteNameVar"].set('(unchanged)') # frame
spriteEntry = Label(spriteDialogFrame, textvariable=self.widgets["sprite"]["spriteNameVar"]) 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): # store sprite
self.widgets["sprite"]["spriteObject"] = spriteObject self.sprite = None
def sprite_select(): def SpriteSetter(spriteObject):
spriteSelector.SpriteSelector(parent, partial(set_sprite, spriteSetter=sprite_setter, sprite = {}
spriteNameVar=self.widgets["sprite"]["spriteNameVar"], sprite["object"] = spriteObject
randomSpriteVar=top.randomSprite)) 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) self.sprite = sprite["object"]
spriteEntry.pack(side=LEFT) self.widgets[widget].pieces["frame"].spritename.config(text=sprite["label"]["show"])
spriteSelectButton.pack(side=LEFT) def SpriteSelect():
spriteDialogFrame.pack(anchor=E) 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 return self
def set_sprite(sprite_param, random_sprite=False, spriteSetter=None, spriteNameVar=None, randomSpriteVar=None): 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: if spriteSetter:
spriteSetter(None) spriteSetter(None)
if spriteNameVar is not None: if spriteNameVar is not None:
spriteNameVar.set('(unchanged)') spriteNameVar.set(sprite["store"])
else: else:
if spriteSetter: if spriteSetter:
spriteSetter(sprite_param) spriteSetter(sprite["object"])
if spriteNameVar is not None: if spriteNameVar is not None:
spriteNameVar.set(sprite_param.name) spriteNameVar.set(sprite["label"]["store"])
if randomSpriteVar: sprite["label"]["store"] = sprite["object"].name
randomSpriteVar.set(random_sprite) sprite["label"]["show"] = sprite["object"].name if not random_sprite else "(random)"

View File

@@ -65,6 +65,7 @@ def generation_page(parent,settings):
# FIXME: Translate these # FIXME: Translate these
def RomSelect(): def RomSelect():
widget = "rom"
rom = filedialog.askopenfilename(filetypes=[("Rom Files", (".sfc", ".smc")), ("All Files", "*")], initialdir=os.path.join(".")) rom = filedialog.askopenfilename(filetypes=[("Rom Files", (".sfc", ".smc")), ("All Files", "*")], initialdir=os.path.join("."))
self.widgets[widget].storageVar.set(rom) self.widgets[widget].storageVar.set(rom)
# dialog button # dialog button
@@ -94,7 +95,6 @@ def generation_page(parent,settings):
self.frames["diags"].pack() self.frames["diags"].pack()
self.widgets[widget].pieces["frame"] = Frame(self.frames["diags"]) self.widgets[widget].pieces["frame"] = Frame(self.frames["diags"])
def diags(): def diags():
# Debugging purposes # Debugging purposes
dims = { dims = {
@@ -106,7 +106,7 @@ def generation_page(parent,settings):
"width": 120, "width": 120,
"height": 50 "height": 50
} }
} }
diag = Tk() diag = Tk()
diag.title("Door Shuffle " + __version__) diag.title("Door Shuffle " + __version__)
diag.geometry(str(dims["window"]["width"]) + 'x' + str(dims["window"]["height"])) diag.geometry(str(dims["window"]["width"]) + 'x' + str(dims["window"]["height"]))