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)