changeset 557:65e36149b273 pyntnclick

Remove useless widgets modules
author Stefano Rivera <stefano@rivera.za.net>
date Sat, 11 Feb 2012 14:13:49 +0200
parents a4f28da12720
children f9f04cb35697
files pyntnclick/widgets/editlevel.py pyntnclick/widgets/editsprite.py pyntnclick/widgets/entrybox.py pyntnclick/widgets/imagebutton.py pyntnclick/widgets/level.py pyntnclick/widgets/levelbutton.py
diffstat 6 files changed, 0 insertions(+), 596 deletions(-) [+]
line wrap: on
line diff
--- a/pyntnclick/widgets/editlevel.py	Sat Feb 11 14:12:11 2012 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,108 +0,0 @@
-from mamba.data import get_tileset_list, get_track_list
-from mamba.widgets.base import Box
-from mamba.widgets.text import TextWidget, TextButton, EntryTextWidget
-from mamba.widgets.listbox import ListBox
-
-
-class EditLevelBox(Box):
-    """Edit details for a level map"""
-
-    button_padding = 2
-
-    def __init__(self, rect, level, post_callback=None):
-        super(EditLevelBox, self).__init__(rect)
-        self.level = level
-        self.level_tileset = self.level.tileset.name
-        self.level_track = self.level.background_track
-        self.post_callback = post_callback
-        self.prepare()
-        self.modal = True
-
-    def add_widget(self, cls, *args, **kw):
-        clicked = kw.pop('clicked', None)
-        offset = kw.pop('offset', (0, 0))
-        pos = (self.widget_left + offset[0],
-               self.widget_top + offset[1])
-        widget = cls(pos, *args, **kw)
-        if clicked:
-            widget.add_callback('clicked', *clicked)
-        self.add(widget)
-        self.widget_top += widget.rect.height + self.button_padding
-        return widget
-
-    def prepare(self):
-        self.widget_left = self.rect.left
-        self.widget_top = self.rect.top
-
-        self.add_widget(TextWidget, "Specify Level Details")
-
-        self.filename = self.add_widget(
-            EntryTextWidget, self.level.level_name, prompt="File:")
-
-        self.levelname = self.add_widget(
-            EntryTextWidget, self.level.name, prompt='Level Title:')
-
-        self.authorname = self.add_widget(
-            EntryTextWidget, self.level.author, prompt='Author:')
-
-        # self.tileset = self.add_widget(
-        #     TextButton, 'Tileset: %s' % self.level_tileset,
-        #     color='white', clicked=(self.list_tilesets,))
-
-        self.trackname = self.add_widget(
-            TextButton, 'Music: %s' % self.level_track,
-            color='white', clicked=(self.list_tracks,))
-
-        self.ok_button = self.add_widget(
-            TextButton, 'OK', offset=(10, 0), clicked=(self.close, True))
-
-        self.cancel_button = self.add_widget(
-            TextButton, 'Cancel', offset=(10, 0), clicked=(self.close, False))
-
-        self.rect.width = max(self.rect.width, 400)
-        self.rect.height += 5
-
-    def change_tileset(self, ev, widget, name):
-        self.level_tileset = name
-        self.tileset.text = 'Tileset: %s' % name
-        self.tileset.prepare()
-
-    def change_track(self, ev, widget, name):
-        self.level_track = name
-        self.trackname.text = 'Music: %s' % name
-        self.trackname.prepare()
-
-    def mk_loadlist(self, title, items, callback):
-        load_list = []
-        for name in items:
-            load_button = TextButton((0, 0), name)
-            load_button.add_callback('clicked', callback, name)
-            load_list.append(load_button)
-        lb = ListBox((200, 200), title, load_list, 6)
-        lb.parent_modal = self.modal
-        self.modal = False
-        self.parent.add(lb)
-        lb.grab_focus()
-
-    def list_tilesets(self, ev, widget):
-        tilesets = [i for i in get_tileset_list() if i != 'common']
-        self.mk_loadlist('Select Tileset', tilesets, self.change_tileset)
-
-    def list_tracks(self, ev, widget):
-        tracks = get_track_list()
-        self.mk_loadlist('Select Music', tracks, self.change_track)
-
-    def close(self, ev, widget, do_update):
-        self.modal = False
-        self.parent.remove(self)
-        if do_update:
-            self.post_callback(
-                self.filename.value,
-                self.levelname.value,
-                self.authorname.value,
-                self.level_tileset,
-                self.level_track)
-        return True
-
-    def grab_focus(self):
-        return self.ok_button.grab_focus()
--- a/pyntnclick/widgets/editsprite.py	Sat Feb 11 14:12:11 2012 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,148 +0,0 @@
-from mamba.widgets.base import Box
-from mamba.widgets.text import TextWidget, TextButton, EntryTextWidget
-
-
-class EditSpriteBox(Box):
-    """Edit details for a special sprite on the level map"""
-
-    def __init__(self, rect, sprite_pos, sprite_info, post_callback=None):
-        super(EditSpriteBox, self).__init__(rect)
-        self.sprite_pos = sprite_pos
-        sprite_cls_name, sprite_cls, sprite_id, args = sprite_info
-        self.sprite_cls_name = sprite_cls_name
-        self.sprite_cls = sprite_cls
-        if sprite_id:
-            self.sprite_id = sprite_id
-        else:
-            self.sprite_id = ''
-        self.sprite_parameters = args
-        self.new_sprite_parameters = []
-        self.post_callback = post_callback
-        self.parameter_widgets = []
-        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 = TextWidget((self.rect.left, height),
-                'Sprite Class: %s' % self.sprite_cls.name)
-        self.add(self.edit_sprite_name)
-        height += self.edit_sprite_name.rect.height + 2
-        self.edit_sprite_id = EntryTextWidget((self.rect.left + 20, height),
-                self.sprite_id, prompt='Sprite Id (required):')
-        self.add(self.edit_sprite_id)
-        height += self.edit_sprite_id.rect.height + 2
-        poss_params = self.sprite_cls.get_sprite_args()
-        if not poss_params:
-            self.sprite_param = TextWidget((self.rect.left, height),
-                    'No Parameters')
-            self.add(self.sprite_param)
-            height += self.sprite_param.rect.height + 2
-        else:
-            self.sprite_param = TextWidget((self.rect.left, height),
-                    'Parameters')
-            self.add(self.sprite_param)
-            height += self.sprite_param.rect.height + 2
-            for i, param_tuple in enumerate(poss_params):
-                if len(self.sprite_parameters) > i:
-                    value = self.sprite_parameters[i]
-                else:
-                    value = None
-                if param_tuple[1] is None:
-                    # Text Entry Parameter
-                    if value is None:
-                        value = ''
-                    edit_widget = EntryTextWidget(
-                            (self.rect.left + 20, height),
-                            value, prompt=param_tuple[0])
-                    self.parameter_widgets.append(edit_widget)
-                    self.add(edit_widget)
-                    height += edit_widget.rect.height
-                elif isinstance(param_tuple[1], tuple):
-                    # We have a list of possible values
-                    if value is None:
-                        value = param_tuple[1][0]  # Take the first
-                    mylist = []
-                    list_width = 0
-                    list_height = 0
-                    for choice in param_tuple[1]:
-                        list_parameter = TextWidget(
-                                (self.rect.left + 20, height),
-                                '%s: %s' % (param_tuple[0], choice))
-                        # So we can pull it out of this later
-                        list_parameter.choice = choice
-                        list_width = max(list_width, list_parameter.rect.width)
-                        change_list = TextButton(
-                                (list_parameter.rect.right + 5, height),
-                                'Next Option')
-                        change_list.add_callback('clicked', self.change_list,
-                                choice, param_tuple[1], mylist)
-                        mylist.append((list_parameter, change_list))
-                        list_height = max(list_height, change_list.rect.height,
-                                list_parameter.rect.height)
-                        if choice == value:
-                            self.add(list_parameter)
-                            self.add(change_list)
-                    for x in mylist:
-                        x[1].rect.left = self.rect.left + list_width + 25
-                        if x[0].rect.height < list_height:
-                            x[0].rect.top += (list_height -
-                                    x[0].rect.height) / 2
-                    height += max(list_parameter.rect.height,
-                            change_list.rect.height)
-                    self.parameter_widgets.append(mylist)
-                # FIXME: Other cases
-        height += 20
-        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.ok_button.rect.right + 10, height),
-                'Cancel')
-        cancel_button.add_callback('clicked', self.close, False)
-        self.add(cancel_button)
-        self.rect.width = max(self.rect.width, 400)
-        self.rect.height += 5
-
-    def change_list(self, ev, widget, cur_choice, all_choices, widget_list):
-        pos = all_choices.index(cur_choice)
-        if pos == len(all_choices) - 1:
-            next_pos = 0
-        else:
-            next_pos = pos + 1
-        self.remove(widget_list[pos][0])
-        self.remove(widget_list[pos][1])
-        self.add(widget_list[next_pos][0])
-        self.add(widget_list[next_pos][1])
-
-    def close(self, ev, widget, do_update):
-        if do_update:
-            self.new_sprite_parameters = []
-            for param in self.parameter_widgets:
-                if hasattr(param, 'value'):
-                    self.new_sprite_parameters.append(param.value)
-                elif isinstance(param, list):
-                    # Find the selected one
-                    for choice, _ in param:
-                        if choice in self.children:
-                            # Is selected, so we grab this choice
-                            self.new_sprite_parameters.append(choice.choice)
-                            break
-            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
-        sprite_string = "%s: %s %s %s" % (pos, self.sprite_cls_name,
-                self.sprite_id, " ".join(self.new_sprite_parameters))
-        return sprite_string
-
-    def grab_focus(self):
-        return self.ok_button.grab_focus()
--- a/pyntnclick/widgets/entrybox.py	Sat Feb 11 14:12:11 2012 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,66 +0,0 @@
-from pygame.constants import K_ESCAPE, K_RETURN, K_KP_ENTER, KEYDOWN
-
-from mamba.widgets.base import Box
-from mamba.widgets.text import TextWidget, TextButton, EntryTextWidget
-
-
-class EntryBox(Box):
-
-    def __init__(self, rect, text, init_value, accept_callback=None,
-            color='white', entry_color='red'):
-        super(EntryBox, self).__init__(rect)
-        self.text = text
-        self.accept_callback = accept_callback
-        self.color = color
-        self.entry_color = entry_color
-        self.value = init_value
-        self.prepare()
-        self.modal = True
-
-    def prepare(self):
-        message = TextWidget((self.rect.left + 50, self.rect.top + 2),
-                self.text, color=self.color)
-        self.rect.width = message.rect.width + 100
-        self.add(message)
-        self.entry_text = EntryTextWidget((self.rect.left + 5,
-            self.rect.top + message.rect.height + 5), self.value,
-            focus_color=self.entry_color)
-        self.add_callback(KEYDOWN, self.edit)
-        self.add(self.entry_text)
-        ok_button = TextButton((self.rect.left + 50,
-            self.entry_text.rect.bottom), 'Accept')
-        ok_button.add_callback('clicked', self.close, True)
-        self.add(ok_button)
-        cancel_button = ok_button = TextButton(
-                (ok_button.rect.right + 10, self.entry_text.rect.bottom),
-                'Cancel')
-        cancel_button.add_callback('clicked', self.close, False)
-        self.add(cancel_button)
-        self.rect.height += 5
-
-    def close(self, ev, widget, ok):
-        if self.accept_callback and ok:
-            self.value = self.entry_text.value
-            if self.accept_callback(self.value):
-                if self.parent:
-                    if hasattr(self.parent, 'paused'):
-                        self.parent.paused = False
-                    self.parent.remove(self)
-            # Don't remove if the accept callback failed
-            return
-        if hasattr(self.parent, 'paused'):
-            self.parent.paused = False
-        self.parent.remove(self)
-        return True
-
-    def edit(self, ev, widget):
-        if ev.key == K_ESCAPE:
-            self.close(ev, widget, False)
-            return True
-        elif ev.key in (K_RETURN, K_KP_ENTER):
-            self.close(ev, widget, True)
-            return True
-        return False  # pass this up to parent
-
-    def grab_focus(self):
-        self.entry_text.grab_focus()
--- a/pyntnclick/widgets/imagebutton.py	Sat Feb 11 14:12:11 2012 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,44 +0,0 @@
-import pygame
-from pygame.locals import SRCALPHA
-
-from mamba.constants import COLOR, FONT_SIZE, FOCUS_COLOR
-from mamba.widgets.base import Button
-from mamba.widgets.text import TextWidget
-
-
-class ImageButtonWidget(Button, TextWidget):
-    """Text label with image on the left"""
-
-    def __init__(self, rect, image, text, fontsize=FONT_SIZE, color=COLOR):
-        self.image = image
-        self.focus_color = pygame.Color(FOCUS_COLOR)
-        self.padding = 5
-        self.border = 3
-        super(ImageButtonWidget, self).__init__(rect, text, fontsize, color)
-        self.focussable = True
-
-    def prepare(self):
-        super(ImageButtonWidget, self).prepare()
-        text_surface = self.surface
-        # Image is already a surface
-        self._focussed = self.focussed
-        color = self.focus_color if self.focussed else self.color
-
-        width = (text_surface.get_width() + self.image.get_width()
-                + 5 + self.padding * 2)
-        height = max(text_surface.get_height(),
-                self.image.get_height()) + self.padding * 2
-        self.rect.width = max(self.rect.width, width)
-        self.rect.height = max(self.rect.height, height)
-        self.surface = pygame.Surface(self.rect.size, SRCALPHA)
-        self.surface.fill(0)
-        self.surface.blit(self.image, (self.padding, self.padding))
-        self.surface.blit(text_surface,
-                (self.image.get_width() + 5 + self.padding, self.padding))
-        pygame.draw.rect(self.surface, color, self.surface.get_rect(),
-                         self.border)
-
-    def draw(self, surface):
-        if self._focussed != self.focussed:
-            self.prepare()
-        super(ImageButtonWidget, self).draw(surface)
--- a/pyntnclick/widgets/level.py	Sat Feb 11 14:12:11 2012 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,144 +0,0 @@
-from pygame.rect import Rect
-from pygame.locals import MOUSEBUTTONDOWN, MOUSEBUTTONUP, MOUSEMOTION
-from pygame.key import set_repeat
-
-from mamba.widgets.base import Widget
-from mamba.constants import TILE_SIZE
-from mamba.snake import Snake
-from mamba.engine import FlipArrowsEvent, ReplayEvent
-
-
-class EditLevelWidget(Widget):
-    def __init__(self, level, offset=(0, 0)):
-        self.level = level
-        level_rect = Rect(offset, level.get_size())
-        self.main_tool = None
-        self.tool = None
-        self.drawing = False
-        self.last_click_pos = None
-        self.tile_mode = True  # Flag for sprite interactions
-        super(EditLevelWidget, self).__init__(level_rect)
-        self.add_callback(MOUSEBUTTONDOWN, self.place_tile)
-        self.add_callback(MOUSEBUTTONUP, self.end_draw)
-        self.add_callback(MOUSEMOTION, self.draw_tiles)
-        self.add_callback(FlipArrowsEvent, self.flip_arrows)
-        self.add_callback(ReplayEvent, self.handle_replay)
-        self.snake = None
-        self.snake_alive = False
-        self.replay_data = []
-        self.last_run = []
-        self.replay_pos = 0
-
-    def get_replay(self):
-        return self.replay_data[:]
-
-    def replay(self, run=None):
-        if run is None:
-            # We exclude the last couple of steps, so we don't redo
-            # the final crash in this run
-            run = self.last_run[:-4]
-        if len(run) > 0:
-            self.start_test()
-            ReplayEvent.post(run, 0)
-
-    def handle_replay(self, ev, widget):
-        self.apply_action(ev.run[ev.replay_pos])
-        if ev.replay_pos < len(ev.run) - 1:
-            ReplayEvent.post(ev.run, ev.replay_pos + 1)
-
-    def start_test(self):
-        self.level.update_tiles_ascii()
-        self.last_run = self.replay_data
-        self.replay_data = []
-        self.level.restart()
-        tile_pos, orientation = self.level.get_entry()
-        self.snake = Snake(tile_pos, orientation)
-        set_repeat(40, 100)
-        self.snake_alive = True
-
-    def stop_test(self):
-        self.snake = None
-        self.snake_alive = False
-        self.level.restart()
-        set_repeat(0, 0)
-
-    def draw(self, surface):
-        self.level.draw(surface)
-        if self.snake:
-            self.snake.draw(surface)
-
-    def kill_snake(self):
-        """Prevent user interaction while snake is dead"""
-        self.snake_alive = False
-
-    def restart(self):
-        self.start_test()
-
-    def interact(self, segment):
-        if not self.snake or not self.snake_alive:
-            return
-        tiles = segment.filter_collisions(self.level.sprites)
-        for tile in tiles:
-            tile.interact(self, segment)
-
-    def get_sprite(self, sprite_id):
-        return self.level.extra_sprites[sprite_id]
-
-    def apply_action(self, orientation):
-        self.replay_data.append(orientation)
-        if not self.snake or not self.snake_alive:
-            return
-        # We choose numbers that are close to, but not exactly, move 0.5 tiles
-        # to avoid a couple of rounding corner cases in the snake code
-        if orientation is None or orientation == self.snake.orientation:
-            self.snake.update(9.99 / self.snake.speed, self)
-        else:
-            self.snake.send_new_direction(orientation)
-            self.snake.update(9.99 / self.snake.speed, self)
-
-    def set_tool(self, new_tool):
-        self.main_tool = new_tool
-        self.tool = new_tool
-
-    def end_draw(self, event, widget):
-        self.drawing = False
-
-    def draw_tiles(self, event, widget):
-        if self.drawing and self.tool:
-            # FIXME: Need to consider leaving and re-entering the widget
-            self.update_tile(self.convert_pos(event.pos))
-
-    def flip_arrows(self, ev, widget):
-        self.level.flip_arrows()
-
-    def place_tile(self, event, widget):
-        if self.tile_mode:
-            if event.button == 1:  # Left button
-                self.tool = self.main_tool
-            else:
-                self.tool = '.'
-            self.drawing = True
-            if self.tool:
-                self.update_tile(self.convert_pos(event.pos))
-        else:
-            self.last_click_pos = self.convert_pos(event.pos)
-            self.drawing = False
-
-    def convert_pos(self, pos):
-        return (pos[0] / TILE_SIZE[0], pos[1] / TILE_SIZE[1])
-
-    def update_tile(self, tile_pos):
-        """Update the tile at the current mouse position"""
-        if self.check_paused():
-            return  # Do nothing if dialogs showing
-        # We convert our current position into a tile position
-        # and replace the tile with the current tool
-        old_tile = self.level.get_tile(tile_pos)
-        if self.tool == '.' and old_tile is None:
-            return
-        elif old_tile is not None and old_tile.tile_char == self.tool:
-            return
-        self.level.replace_tile(tile_pos, self.tool)
-
-    def check_paused(self):
-        return hasattr(self.parent, 'paused') and self.parent.paused
--- a/pyntnclick/widgets/levelbutton.py	Sat Feb 11 14:12:11 2012 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,86 +0,0 @@
-import pygame
-from pygame.locals import SRCALPHA
-
-from mamba.constants import FOCUS_COLOR
-from mamba.data import load_image
-from mamba.widgets.base import Button
-from mamba.widgets.text import TextWidget
-
-
-class LevelButton(Button):
-
-    def __init__(self, rect, level, done=False):
-        super(LevelButton, self).__init__(rect)
-        self.level = level
-        self.text = level.name
-        self.done = done
-        self.focussable = True
-        self.border = 2
-        self.rect.width = 100
-        self.rect.height = 120
-        self.prepare()
-
-    def make_thumbnail(self, dest_rect):
-        level_surface = pygame.Surface(self.level.get_size(), SRCALPHA)
-        self.level.draw(level_surface)
-        size = level_surface.get_rect().fit(dest_rect).size
-        level_thumbnail = pygame.transform.scale(level_surface, size)
-        return level_thumbnail
-
-    def prepare(self):
-        self.surface = pygame.Surface(self.rect.size, SRCALPHA)
-        self.surface.fill(0)
-
-        dest_rect = pygame.Rect((self.border, self.border),
-                                (self.rect.width - self.border,
-                                 self.rect.height - self.border))
-        if not hasattr(self.level, 'button_thumbnail'):
-            self.level.button_thumbnail = self.make_thumbnail(dest_rect)
-        self.surface.blit(self.level.button_thumbnail, dest_rect)
-
-        if self.done:
-            image = load_image('menus/tick.png')
-            self.surface.blit(image, image.get_rect())
-
-        # We only have space for two lines
-        self._text_lines = self.wrap_text(self.text)[:2]
-
-        text_height = sum(line.rect.height for line in self._text_lines)
-        text_pos = self.level.button_thumbnail.get_rect().height
-        text_pos += (self.rect.height - text_height - text_pos) // 2
-        for line in self._text_lines:
-            text_rect = pygame.Rect(((self.rect.width - line.rect.width) // 2,
-                                     text_pos),
-                                    line.rect.size)
-            text_pos = text_rect.bottom
-            self.surface.blit(line.surface, text_rect)
-
-        color = pygame.Color(FOCUS_COLOR if self.focussed else '#444444')
-        pygame.draw.rect(self.surface, color, self.surface.get_rect(),
-                         self.border + 1)
-        self._state = (self.done, self.focussed)
-
-    def wrap_text(self, text):
-        args = {'rect': (0, 0),
-                'text': text,
-                'fontsize': 12,
-                'color': 'white',
-               }
-        w = TextWidget(**args)
-        w.prepare()
-        splitpoint = len(text)
-        max_width = self.rect.width - (self.border * 3)
-        while w.rect.width > max_width and ' ' in text[:splitpoint]:
-            splitpoint = text.rfind(' ', 0, splitpoint)
-            args['text'] = text[:splitpoint]
-            w = TextWidget(**args)
-            w.prepare()
-        if splitpoint < len(text):
-            return [w] + self.wrap_text(text[splitpoint + 1:])
-        else:
-            return [w]
-
-    def draw(self, surface):
-        if self._state != (self.done, self.focussed):
-            self.prepare()
-        surface.blit(self.surface, self.rect)