Mercurial > mamba
diff mamba/widgets/toollist.py @ 267:1e8dca95c48a
Hook up hot-keys in editor for jerith
author | Neil Muller <drnlmuller@gmail.com> |
---|---|
date | Thu, 15 Sep 2011 12:54:16 +0200 |
parents | 74ae1645df6e |
children | ffec90bda89d |
line wrap: on
line diff
--- a/mamba/widgets/toollist.py Thu Sep 15 12:53:52 2011 +0200 +++ b/mamba/widgets/toollist.py Thu Sep 15 12:54:16 2011 +0200 @@ -1,3 +1,5 @@ +from pygame.constants import KEYUP, K_1, K_PAGEDOWN, K_PAGEUP + from mamba.widgets.base import Container from mamba.widgets.text import TextButton @@ -5,31 +7,52 @@ class ToolListWidget(Container): """List of other widgets, with some paging trickery""" - def __init__(self, rect, widget_list, page_length, padding=2): + def __init__(self, rect, widget_list, page_length, start_key=K_1, + padding=2): self.widget_list = widget_list self.page_length = page_length self.padding = padding self.page = 0 + self.start_key = start_key super(ToolListWidget, self).__init__(rect) self.fill_page() + # We do this to avoid needing to worry about focus too much + self.add_callback(KEYUP, self.handle_key) + self.focussable = True def fill_page(self): + 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 button_left = self.rect.left + self.padding + key = self.start_key for widget in self.widget_list[start_page:end_page]: widget.rect.topleft = (button_left, button_height) self.add(widget) + if key: + self.hot_keys[key] = widget + key += 1 button_height += widget.rect.height + self.padding if start_page > 0: - prev_but = TextButton((button_left, button_height), 'Prev') - prev_but.add_callback('clicked', self.change_page, -1) - self.add(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): - next_but = TextButton((button_left + 100, button_height), 'Next') - next_but.add_callback('clicked', self.change_page, 1) - self.add(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) + + def handle_key(self, ev, widget): + if ev.key in self.hot_keys: + widget = self.hot_keys[ev.key] + return widget.forced_click() + elif ev.key == K_PAGEDOWN and self.prev_but: + self.prev_but.forced_click() + elif ev.key == K_PAGEUP and self.next_but: + self.next_but.forced_click() def change_page(self, ev, widget, change): self.page += change