Mercurial > boomslang
comparison pyntnclick/widgets/toollist.py @ 559:b7d8b89de71a pyntnclick
Rip out keyboard handling
author | Stefano Rivera <stefano@rivera.za.net> |
---|---|
date | Sat, 11 Feb 2012 14:42:24 +0200 |
parents | f9f04cb35697 |
children | 1aac5a3b17e1 |
comparison
equal
deleted
inserted
replaced
558:f9f04cb35697 | 559:b7d8b89de71a |
---|---|
1 from pygame.constants import KEYUP, K_1, K_PAGEDOWN, K_PAGEUP | |
2 | |
3 from pyntntclick.widgets.base import Container | 1 from pyntntclick.widgets.base import Container |
4 from pyntntclick.widgets.text import TextButton | 2 from pyntntclick.widgets.text import TextButton |
5 | 3 |
6 | 4 |
7 class ToolListWidget(Container): | 5 class ToolListWidget(Container): |
8 """List of other widgets, with some paging trickery""" | 6 """List of other widgets, with some paging trickery""" |
9 | 7 |
10 def __init__(self, rect, widget_list, page_length, start_key=K_1, | 8 def __init__(self, rect, widget_list, page_length, |
11 padding=2): | 9 padding=2): |
12 widget_list.sort(key=lambda w: w.text) | 10 widget_list.sort(key=lambda w: w.text) |
13 self.widget_list = widget_list | 11 self.widget_list = widget_list |
14 self.page_length = page_length | 12 self.page_length = page_length |
15 self.padding = padding | 13 self.padding = padding |
16 self.page = 0 | 14 self.page = 0 |
17 self.start_key = start_key | |
18 super(ToolListWidget, self).__init__(rect) | 15 super(ToolListWidget, self).__init__(rect) |
19 self.prev_but = None | 16 self.prev_but = None |
20 self.next_but = None | 17 self.next_but = None |
21 self.fill_page() | 18 self.fill_page() |
22 # We do this to avoid needing to worry about focus too much | |
23 self.add_callback(KEYUP, self.handle_key) | |
24 self.focussable = True | 19 self.focussable = True |
25 | 20 |
26 def fill_page(self): | 21 def fill_page(self): |
27 for widget in self.children[:]: | 22 for widget in self.children[:]: |
28 self.remove(widget) | 23 self.remove(widget) |
29 self.hot_keys = {} | |
30 start_page = self.page * self.page_length | 24 start_page = self.page * self.page_length |
31 end_page = start_page + self.page_length | 25 end_page = start_page + self.page_length |
32 button_height = self.rect.top + self.padding | 26 button_height = self.rect.top + self.padding |
33 button_left = self.rect.left + self.padding | 27 button_left = self.rect.left + self.padding |
34 key = self.start_key | |
35 for widget in self.widget_list[start_page:end_page]: | 28 for widget in self.widget_list[start_page:end_page]: |
36 widget.rect.topleft = (button_left, button_height) | 29 widget.rect.topleft = (button_left, button_height) |
37 self.add(widget) | 30 self.add(widget) |
38 if key: | |
39 self.hot_keys[key] = widget | |
40 key += 1 | |
41 button_height += widget.rect.height + self.padding | 31 button_height += widget.rect.height + self.padding |
42 if not self.prev_but: | 32 if not self.prev_but: |
43 self.prev_but = TextButton((button_left, button_height), | 33 self.prev_but = TextButton((button_left, button_height), |
44 u'\N{LEFTWARDS ARROW}') | 34 u'\N{LEFTWARDS ARROW}') |
45 self.prev_but.add_callback('clicked', self.change_page, -1) | 35 self.prev_but.add_callback('clicked', self.change_page, -1) |
65 if widget in self.widget_list: | 55 if widget in self.widget_list: |
66 # Standardise widdths | 56 # Standardise widdths |
67 widget.rect.width = self.rect.width - 2 | 57 widget.rect.width = self.rect.width - 2 |
68 widget.prepare() | 58 widget.prepare() |
69 | 59 |
70 def handle_key(self, ev, widget): | |
71 if hasattr(self.parent, 'paused') and self.parent.paused: | |
72 # No hotjets when pasued | |
73 return False | |
74 if ev.key in self.hot_keys: | |
75 widget = self.hot_keys[ev.key] | |
76 return widget.forced_click() | |
77 elif ev.key == K_PAGEDOWN and self.prev_but: | |
78 return self.prev_but.forced_click() | |
79 elif ev.key == K_PAGEUP and self.next_but: | |
80 return self.next_but.forced_click() | |
81 | |
82 def change_page(self, ev, widget, change): | 60 def change_page(self, ev, widget, change): |
83 self.page += change | 61 self.page += change |
84 self.fill_page() | 62 self.fill_page() |
85 return True | 63 return True |