114 lines
4.5 KiB
Python
114 lines
4.5 KiB
Python
from tkinter import ttk, StringVar, Button, Entry, Frame, Label, NE, NW, E, W, LEFT, RIGHT
|
|
from functools import partial
|
|
import source.classes.SpriteSelector as spriteSelector
|
|
import source.classes.ItemGfxSelector as itemGfxSelector
|
|
import source.gui.widgets as widgets
|
|
import json
|
|
import os
|
|
|
|
def gameoptions_page(top, parent):
|
|
# Game Options
|
|
self = ttk.Frame(parent)
|
|
|
|
# Game Options options
|
|
self.widgets = {}
|
|
|
|
# Game Options option sections
|
|
self.frames = {}
|
|
self.frames["checkboxes"] = Frame(self)
|
|
self.frames["checkboxes"].pack(anchor=W)
|
|
|
|
# Game Options frames
|
|
self.frames["leftRomOptionsFrame"] = Frame(self)
|
|
self.frames["rightRomOptionsFrame"] = Frame(self)
|
|
self.frames["leftRomOptionsFrame"].pack(side=LEFT, anchor=NW)
|
|
self.frames["rightRomOptionsFrame"].pack(side=RIGHT, anchor=NE)
|
|
|
|
# Load Game Options widgets as defined by JSON file
|
|
# Defns include frame name, widget type, widget options, widget placement attributes
|
|
# Checkboxes go West
|
|
# Everything else goes East
|
|
# They also get split left & right
|
|
with open(os.path.join("resources","app","gui","randomize","gameoptions","widgets.json")) as widgetDefns:
|
|
myDict = json.load(widgetDefns)
|
|
for framename,theseWidgets in myDict.items():
|
|
dictWidgets = widgets.make_widgets_from_dict(self, theseWidgets, self.frames[framename])
|
|
for key in dictWidgets:
|
|
self.widgets[key] = dictWidgets[key]
|
|
packAttrs = {"anchor":NE}
|
|
if self.widgets[key].type == "checkbox":
|
|
packAttrs["anchor"] = NW
|
|
self.widgets[key].pack(packAttrs)
|
|
|
|
## Sprite selection
|
|
# This one's more-complicated, build it and stuff it
|
|
spriteDialogFrame = Frame(self.frames["leftRomOptionsFrame"])
|
|
baseSpriteLabel = Label(spriteDialogFrame, text='Sprite:')
|
|
|
|
self.widgets["sprite"] = {}
|
|
self.widgets["sprite"]["spriteObject"] = None
|
|
self.widgets["sprite"]["spriteNameVar"] = StringVar()
|
|
|
|
self.widgets["sprite"]["spriteNameVar"].set('(unchanged)')
|
|
spriteEntry = Label(spriteDialogFrame, textvariable=self.widgets["sprite"]["spriteNameVar"])
|
|
|
|
def sprite_setter(spriteObject):
|
|
self.widgets["sprite"]["spriteObject"] = spriteObject
|
|
|
|
def sprite_select():
|
|
spriteSelector.SpriteSelector(parent, partial(set_sprite, spriteSetter=sprite_setter,
|
|
spriteNameVar=self.widgets["sprite"]["spriteNameVar"],
|
|
randomSpriteVar=top.randomSprite))
|
|
|
|
spriteSelectButton = Button(spriteDialogFrame, text='...', command=sprite_select)
|
|
|
|
baseSpriteLabel.pack(side=LEFT)
|
|
spriteEntry.pack(side=LEFT)
|
|
spriteSelectButton.pack(side=LEFT)
|
|
spriteDialogFrame.pack(anchor=E)
|
|
|
|
## Triforce Piece graphics selection
|
|
triforcegfxDialogFrame = Frame(self.frames["leftRomOptionsFrame"])
|
|
triforceGfxLabel = Label(triforcegfxDialogFrame, text='Triforce Piece:')
|
|
|
|
self.widgets["triforce_gfx"] = {}
|
|
self.widgets["triforce_gfx"]["selectedItem"] = None
|
|
self.widgets["triforce_gfx"]["itemNameVar"] = StringVar()
|
|
self.widgets["triforce_gfx"]["itemNameVar"].set('Triforce')
|
|
|
|
triforceGfxEntry = Label(triforcegfxDialogFrame, textvariable=self.widgets["triforce_gfx"]["itemNameVar"])
|
|
|
|
def triforce_gfx_setter(item_name):
|
|
self.widgets["triforce_gfx"]["selectedItem"] = item_name
|
|
self.widgets["triforce_gfx"]["itemNameVar"].set(item_name)
|
|
|
|
def triforce_gfx_select():
|
|
# Import Tables to get valid item names
|
|
from Tables import item_gfx_table
|
|
valid_items = list(item_gfx_table.keys())
|
|
itemGfxSelector.ItemGfxSelector(parent, triforce_gfx_setter, valid_items=valid_items)
|
|
|
|
triforceGfxSelectButton = Button(triforcegfxDialogFrame, text='...', command=triforce_gfx_select)
|
|
|
|
triforceGfxLabel.pack(side=LEFT)
|
|
triforceGfxEntry.pack(side=LEFT)
|
|
triforceGfxSelectButton.pack(side=LEFT)
|
|
triforcegfxDialogFrame.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 spriteSetter:
|
|
spriteSetter(None)
|
|
if spriteNameVar is not None:
|
|
spriteNameVar.set('(unchanged)')
|
|
else:
|
|
if spriteSetter:
|
|
spriteSetter(sprite_param)
|
|
if spriteNameVar is not None:
|
|
spriteNameVar.set(sprite_param.name)
|
|
if randomSpriteVar:
|
|
randomSpriteVar.set(random_sprite)
|