# HG changeset patch # User Neil Muller # Date 1316290336 -7200 # Node ID 3f37e011c3b6f93f3d4c7c4691d25f391e5dbe7a # Parent ce3a50c4caaa22a576893f2adca31704b241ea0a Neater buttons diff -r ce3a50c4caaa -r 3f37e011c3b6 mamba/habitats/editor.py --- a/mamba/habitats/editor.py Sat Sep 17 22:10:01 2011 +0200 +++ b/mamba/habitats/editor.py Sat Sep 17 22:12:16 2011 +0200 @@ -28,6 +28,7 @@ class EditorHabitat(Habitat): def __init__(self, level): super(EditorHabitat, self).__init__(EDIT_SCREEN) + self.toolbar = {} self.level = level self.container.paused = False self.edit_widget = EditLevelWidget(self.level) @@ -130,38 +131,43 @@ self.edit_widget.set_tool('.') button_height += (self.floor_button.surface.get_height() + button_padding) - if self.mode == 'Tiles': - tile_map = TILE_MAP - elif self.mode == 'Things': - tile_map = THING_MAP + if self.mode in self.toolbar: + # FIXME: This needs to be recreated on tileset changes + self.tool_widget = self.toolbar[self.mode] else: - tile_map = [] - tool_list = [] - for tile_char in sorted(tile_map): - try: - tile = self.level.tileset[tile_char] - except pygame.error: - # Ignore stuff we can't load for now - continue - if tile is None: - continue - if tile.name: - text = tile.name + if self.mode == 'Tiles': + tile_map = TILE_MAP + elif self.mode == 'Things': + tile_map = THING_MAP else: - text = 'Tile' - tile_button = ImageButtonWidget((0, 0), tile.image, text, - color='white') - tile_button.add_callback('clicked', self.change_tool, - tile_char, text) - tool_list.append(tile_button) - if self.mode == "Sprites": - for name in ['Add', 'Edit', 'Delete']: - tile_button = TextButton((0, 0), '%s Sprite' % name) - tile_button.add_callback('clicked', self.sprite_tool, - name) + tile_map = [] + tool_list = [] + for tile_char in sorted(tile_map): + try: + tile = self.level.tileset[tile_char] + except pygame.error: + # Ignore stuff we can't load for now + continue + if tile is None: + continue + if tile.name: + text = tile.name + else: + text = 'Tile' + tile_button = ImageButtonWidget((0, 0), tile.image, text, + color='white') + tile_button.add_callback('clicked', self.change_tool, + tile_char, text) tool_list.append(tile_button) - self.tool_widget = ToolListWidget((button_left, button_height), - tool_list, MAX_TOOLS, start_key=K_2) + if self.mode == "Sprites": + for name in ['Add', 'Edit', 'Delete']: + tile_button = TextButton((0, 0), '%s Sprite' % name) + tile_button.add_callback('clicked', self.sprite_tool, + name) + tool_list.append(tile_button) + self.tool_widget = ToolListWidget((button_left, button_height), + tool_list, MAX_TOOLS, start_key=K_2) + self.toolbar[self.mode] = self.tool_widget self.container.add(self.tool_widget) button_height = self.container.rect.top + MODE_HEIGHT if self.mode == 'Tiles': diff -r ce3a50c4caaa -r 3f37e011c3b6 mamba/widgets/imagebutton.py --- a/mamba/widgets/imagebutton.py Sat Sep 17 22:10:01 2011 +0200 +++ b/mamba/widgets/imagebutton.py Sat Sep 17 22:12:16 2011 +0200 @@ -24,10 +24,12 @@ self._focussed = self.focussed color = self.focus_color if self.focussed else self.color - self.rect.width = text_surface.get_width() + self.image.get_width() \ - + 5 + self.padding * 2 - self.rect.height = max(text_surface.get_height(), + 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)) diff -r ce3a50c4caaa -r 3f37e011c3b6 mamba/widgets/text.py --- a/mamba/widgets/text.py Sat Sep 17 22:10:01 2011 +0200 +++ b/mamba/widgets/text.py Sat Sep 17 22:12:16 2011 +0200 @@ -29,7 +29,9 @@ if not isinstance(self.color, pygame.Color): self.color = pygame.Color(self.color) self.surface = self.font.render(self.text, True, self.color) - self.rect.width, self.rect.height = self.surface.get_rect().size + width, height = self.surface.get_rect().size + self.rect.width = max(self.rect.width, width) + self.rect.height = max(self.rect.height, height) def draw(self, surface): surface.blit(self.surface, self.rect) @@ -57,8 +59,10 @@ else: color = self.color - self.rect.width = text_rect.width + self.padding * 2 - self.rect.height = text_rect.height + self.padding * 2 + width = text_rect.width + self.padding * 2 + height = text_rect.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(text, text.get_rect().move(self.padding, diff -r ce3a50c4caaa -r 3f37e011c3b6 mamba/widgets/toollist.py --- a/mamba/widgets/toollist.py Sat Sep 17 22:10:01 2011 +0200 +++ b/mamba/widgets/toollist.py Sat Sep 17 22:12:16 2011 +0200 @@ -15,6 +15,8 @@ self.page = 0 self.start_key = start_key super(ToolListWidget, self).__init__(rect) + self.prev_but = None + self.next_but = None self.fill_page() # We do this to avoid needing to worry about focus too much self.add_callback(KEYUP, self.handle_key) @@ -24,7 +26,6 @@ for widget in self.children[:]: self.remove(widget) self.hot_keys = {} - self.prev_but = self.next_but = None start_page = self.page * self.page_length end_page = start_page + self.page_length button_height = self.rect.top + self.padding @@ -37,15 +38,32 @@ self.hot_keys[key] = widget key += 1 button_height += widget.rect.height + self.padding - if start_page > 0: + if not self.prev_but: self.prev_but = TextButton((button_left, button_height), 'Prev') self.prev_but.add_callback('clicked', self.change_page, -1) - self.add(self.prev_but) - if end_page < len(self.widget_list): + else: + self.prev_but.rect.top = max(button_height, self.prev_but.rect.top) + if not self.next_but: self.next_but = TextButton((button_left + 100, button_height), 'Next') self.next_but.add_callback('clicked', self.change_page, 1) - self.add(self.next_but) + else: + self.next_but.rect.top = max(button_height, self.next_but.rect.top) + if start_page > 0: + self.prev_but.enable() + else: + self.prev_but.disable() + if end_page < len(self.widget_list): + self.next_but.enable() + else: + self.next_but.disable() + self.add(self.prev_but) + self.add(self.next_but) + for widget in self.children[:]: + if widget in self.widget_list: + # Standardise widdths + widget.rect.width = self.rect.width - 2 + widget.prepare() def handle_key(self, ev, widget): if hasattr(self.parent, 'paused') and self.parent.paused: