Mercurial > mamba
comparison 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 |
comparison
equal
deleted
inserted
replaced
266:190aa1481908 | 267:1e8dca95c48a |
---|---|
1 from pygame.constants import KEYUP, K_1, K_PAGEDOWN, K_PAGEUP | |
2 | |
1 from mamba.widgets.base import Container | 3 from mamba.widgets.base import Container |
2 from mamba.widgets.text import TextButton | 4 from mamba.widgets.text import TextButton |
3 | 5 |
4 | 6 |
5 class ToolListWidget(Container): | 7 class ToolListWidget(Container): |
6 """List of other widgets, with some paging trickery""" | 8 """List of other widgets, with some paging trickery""" |
7 | 9 |
8 def __init__(self, rect, widget_list, page_length, padding=2): | 10 def __init__(self, rect, widget_list, page_length, start_key=K_1, |
11 padding=2): | |
9 self.widget_list = widget_list | 12 self.widget_list = widget_list |
10 self.page_length = page_length | 13 self.page_length = page_length |
11 self.padding = padding | 14 self.padding = padding |
12 self.page = 0 | 15 self.page = 0 |
16 self.start_key = start_key | |
13 super(ToolListWidget, self).__init__(rect) | 17 super(ToolListWidget, self).__init__(rect) |
14 self.fill_page() | 18 self.fill_page() |
19 # We do this to avoid needing to worry about focus too much | |
20 self.add_callback(KEYUP, self.handle_key) | |
21 self.focussable = True | |
15 | 22 |
16 def fill_page(self): | 23 def fill_page(self): |
24 self.hot_keys = {} | |
25 self.prev_but = self.next_but = None | |
17 start_page = self.page * self.page_length | 26 start_page = self.page * self.page_length |
18 end_page = start_page + self.page_length | 27 end_page = start_page + self.page_length |
19 button_height = self.rect.top + self.padding | 28 button_height = self.rect.top + self.padding |
20 button_left = self.rect.left + self.padding | 29 button_left = self.rect.left + self.padding |
30 key = self.start_key | |
21 for widget in self.widget_list[start_page:end_page]: | 31 for widget in self.widget_list[start_page:end_page]: |
22 widget.rect.topleft = (button_left, button_height) | 32 widget.rect.topleft = (button_left, button_height) |
23 self.add(widget) | 33 self.add(widget) |
34 if key: | |
35 self.hot_keys[key] = widget | |
36 key += 1 | |
24 button_height += widget.rect.height + self.padding | 37 button_height += widget.rect.height + self.padding |
25 if start_page > 0: | 38 if start_page > 0: |
26 prev_but = TextButton((button_left, button_height), 'Prev') | 39 self.prev_but = TextButton((button_left, button_height), 'Prev') |
27 prev_but.add_callback('clicked', self.change_page, -1) | 40 self.prev_but.add_callback('clicked', self.change_page, -1) |
28 self.add(prev_but) | 41 self.add(self.prev_but) |
29 if end_page < len(self.widget_list): | 42 if end_page < len(self.widget_list): |
30 next_but = TextButton((button_left + 100, button_height), 'Next') | 43 self.next_but = TextButton((button_left + 100, button_height), |
31 next_but.add_callback('clicked', self.change_page, 1) | 44 'Next') |
32 self.add(next_but) | 45 self.next_but.add_callback('clicked', self.change_page, 1) |
46 self.add(self.next_but) | |
47 | |
48 def handle_key(self, ev, widget): | |
49 if ev.key in self.hot_keys: | |
50 widget = self.hot_keys[ev.key] | |
51 return widget.forced_click() | |
52 elif ev.key == K_PAGEDOWN and self.prev_but: | |
53 self.prev_but.forced_click() | |
54 elif ev.key == K_PAGEUP and self.next_but: | |
55 self.next_but.forced_click() | |
33 | 56 |
34 def change_page(self, ev, widget, change): | 57 def change_page(self, ev, widget, change): |
35 self.page += change | 58 self.page += change |
36 for widget in self.children[:]: | 59 for widget in self.children[:]: |
37 self.remove(widget) | 60 self.remove(widget) |