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