Rework how the main form handles sprites

makes the presence of a Sprite Picker screen more obvious
This commit is contained in:
Kevin Cathcart 2017-12-08 19:28:22 -05:00
parent 911737b84f
commit 073ab728c1
2 changed files with 31 additions and 11 deletions

37
Gui.py
View File

@ -70,14 +70,27 @@ def guiMain(args=None):
romSelectButton.pack(side=LEFT) romSelectButton.pack(side=LEFT)
spriteDialogFrame = Frame(fileDialogFrame) spriteDialogFrame = Frame(fileDialogFrame)
baseSpriteLabel = Label(spriteDialogFrame, text='Link Sprite') baseSpriteLabel = Label(spriteDialogFrame, text='Link Sprite:')
spriteVar = StringVar()
spriteEntry = Entry(spriteDialogFrame, textvariable=spriteVar) spriteNameVar = StringVar()
sprite=None
def set_sprite(sprite_param):
nonlocal sprite
if sprite_param is None or not sprite_param.valid:
sprite = None
spriteNameVar.set('(default Link)')
else:
sprite = sprite_param
spriteNameVar.set(sprite.name)
set_sprite(None)
spriteNameVar.set('(default Link)')
spriteEntry = Label(spriteDialogFrame, textvariable=spriteNameVar)
def SpriteSelect(): def SpriteSelect():
SpriteSelector(mainWindow, spriteVar.set) SpriteSelector(mainWindow, set_sprite)
spriteSelectButton = Button(spriteDialogFrame, text='Select Sprite', command=SpriteSelect) spriteSelectButton = Button(spriteDialogFrame, text='Open Sprite Picker', command=SpriteSelect)
baseSpriteLabel.pack(side=LEFT) baseSpriteLabel.pack(side=LEFT)
spriteEntry.pack(side=LEFT) spriteEntry.pack(side=LEFT)
@ -207,7 +220,7 @@ def guiMain(args=None):
guiargs.shuffleganon = bool(shuffleGanonVar.get()) guiargs.shuffleganon = bool(shuffleGanonVar.get())
guiargs.rom = romVar.get() guiargs.rom = romVar.get()
guiargs.jsonout = None guiargs.jsonout = None
guiargs.sprite = spriteVar.get() if spriteVar.get() else None guiargs.sprite = sprite
try: try:
if guiargs.count is not None: if guiargs.count is not None:
seed = guiargs.seed seed = guiargs.seed
@ -275,7 +288,7 @@ def guiMain(args=None):
romVar.set(args.rom) romVar.set(args.rom)
shuffleGanonVar.set(args.shuffleganon) shuffleGanonVar.set(args.shuffleganon)
if args.sprite is not None: if args.sprite is not None:
spriteVar.set(args.sprite) set_sprite(Sprite(args.sprite))
mainWindow.mainloop() mainWindow.mainloop()
@ -323,7 +336,7 @@ class SpriteSelector(object):
sprite = Sprite(file) sprite = Sprite(file)
image = get_image_for_sprite(sprite) image = get_image_for_sprite(sprite)
if image is None: continue if image is None: continue
button = Button(frame, image=image, command=lambda file=file: self.select_sprite(file)) button = Button(frame, image=image, command=lambda sprite=sprite: self.select_sprite(sprite))
ToolTips.register(button, sprite.name + ("\nBy: %s" % sprite.author_name if sprite.author_name is not None else "")) ToolTips.register(button, sprite.name + ("\nBy: %s" % sprite.author_name if sprite.author_name is not None else ""))
button.image = image button.image = image
button.grid(row=i // 16, column=i % 16) button.grid(row=i // 16, column=i % 16)
@ -357,11 +370,15 @@ class SpriteSelector(object):
def browse_for_sprite(self): def browse_for_sprite(self):
sprite = filedialog.askopenfilename() sprite = filedialog.askopenfilename()
self.callback(sprite) try:
self.callback(Sprite(sprite))
except:
self.callback(None)
self.window.destroy() self.window.destroy()
def use_default_sprite(self): def use_default_sprite(self):
self.callback("") self.callback(None)
self.window.destroy() self.window.destroy()
def select_sprite(self, spritename): def select_sprite(self, spritename):

View File

@ -91,6 +91,9 @@ def main(args, seed=None):
logger.info('Patching ROM.') logger.info('Patching ROM.')
if args.sprite is not None: if args.sprite is not None:
if isinstance(args.sprite,Sprite):
sprite = args.sprite
else:
sprite = Sprite(args.sprite) sprite = Sprite(args.sprite)
else: else:
sprite = None sprite = None