Mercurial > mamba
view mamba/widgets/editsprite.py @ 350:8dd5b475b452
Add sprite editing dialog
author | Neil Muller <drnlmuller@gmail.com> |
---|---|
date | Fri, 16 Sep 2011 23:27:31 +0200 |
parents | |
children | 8b9cfc4f0f01 |
line wrap: on
line source
import pygame from pygame.constants import SRCALPHA from mamba.widgets.base import Container from mamba.widgets.text import TextWidget, TextButton, EntryTextWidget class EditSpriteBox(Container): """Edit details for a special sprite on the level map""" def __init__(self, rect, sprite_pos, sprite, post_callback=None): super(EditSpriteBox, self).__init__(rect) self.sprite_pos = sprite_pos if sprite: _, _, rest = sprite.partition(':') self.sprite_name, rest = rest.split(None, 1) args = rest.split() self.sprite_id = args[0] self.sprite_parameters = " ".join(args[1:]) else: self.sprite_name = '' self.sprite_id = '' self.sprite_parameters = "" self.post_callback = post_callback self.prepare() self.modal = True def prepare(self): title = TextWidget(self.rect, "Specify Sprite Details") self.add(title) height = self.rect.top + title.rect.height + 2 self.edit_sprite_name = EntryTextWidget((self.rect.left, height), self.sprite_name, prompt='Sprite Class:') self.add(self.edit_sprite_name) height += self.edit_sprite_name.rect.height + 2 self.edit_sprite_id = EntryTextWidget((self.rect.left, height), self.sprite_id, prompt='Sprite Id:') self.add(self.edit_sprite_id) height += self.edit_sprite_id.rect.height + 2 self.edit_sprite_param = EntryTextWidget((self.rect.left, height), self.sprite_parameters, prompt='Sprite Parameters:') self.add(self.edit_sprite_param) height += self.edit_sprite_param.rect.height + 2 self.ok_button = TextButton((self.rect.left + 10, height), 'OK') self.ok_button.add_callback('clicked', self.close, True) self.add(self.ok_button) cancel_button = TextButton((self.rect.left + 100, height), 'Cancel') cancel_button.add_callback('clicked', self.close, False) self.add(cancel_button) self.rect.width = max(self.rect.width, 400) def draw(self, surface): background = pygame.Surface(self.rect.size, SRCALPHA) background.fill(pygame.Color('gray')) surface.blit(background, self.rect) super(EditSpriteBox, self).draw(surface) def close(self, ev, widget, do_update): if do_update: self.sprite_parameters = self.edit_sprite_param.value self.sprite_name = self.edit_sprite_name.value self.sprite_id = self.edit_sprite_id.value sprite = self.make_sprite() if not self.post_callback(sprite): return # Call-back failed, so don't remove self.parent.paused = False self.parent.remove(self) return True def make_sprite(self): """Convert values to a sprite line""" pos = "%s, %s" % self.sprite_pos return "%s: %s %s %s" % (pos, self.sprite_name, self.sprite_id, self.sprite_parameters) def grab_focus(self): return self.ok_button.grab_focus()