comparison pyntnclick/widgets/toollist.py @ 854:79b5c1be9a5e default tip

Remove pyntnclick, it's its own library, now
author Stefano Rivera <stefano@rivera.za.net>
date Sat, 21 Jun 2014 22:06:09 +0200
parents f95830b58336
children
comparison
equal deleted inserted replaced
852:f95830b58336 854:79b5c1be9a5e
1 from pyntntclick.widgets.base import Container
2 from pyntntclick.widgets.text import TextButton
3
4
5 class ToolListWidget(Container):
6 """List of other widgets, with some paging trickery"""
7
8 def __init__(self, pos, gd, size, widget_list, page_length,
9 padding=2):
10 widget_list.sort(key=lambda w: w.text)
11 self.widget_list = widget_list
12 self.page_length = page_length
13 self.padding = padding
14 self.page = 0
15 super(ToolListWidget, self).__init__(pos, gd, size)
16 self.prev_but = None
17 self.next_but = None
18
19 def prepare(self):
20 self.fill_page()
21
22 def fill_page(self):
23 for widget in self.children[:]:
24 self.remove(widget)
25 start_page = self.page * self.page_length
26 end_page = start_page + self.page_length
27 button_height = self.rect.top + self.padding
28 button_left = self.rect.left + self.padding
29 for widget in self.widget_list[start_page:end_page]:
30 widget.rect.topleft = (button_left, button_height)
31 self.add(widget)
32 button_height += widget.rect.height + self.padding
33 if not self.prev_but:
34 self.prev_but = TextButton((button_left, button_height),
35 u'\N{LEFTWARDS ARROW}')
36 self.prev_but.add_callback('clicked', self.change_page, -1)
37 else:
38 self.prev_but.rect.top = max(button_height, self.prev_but.rect.top)
39 if not self.next_but:
40 self.next_but = TextButton((button_left + 100, button_height),
41 u'\N{RIGHTWARDS ARROW}')
42 self.next_but.add_callback('clicked', self.change_page, 1)
43 else:
44 self.next_but.rect.top = max(button_height, self.next_but.rect.top)
45 if start_page > 0:
46 self.prev_but.enable()
47 else:
48 self.prev_but.disable()
49 if end_page < len(self.widget_list):
50 self.next_but.enable()
51 else:
52 self.next_but.disable()
53 self.add(self.prev_but)
54 self.add(self.next_but)
55 for widget in self.children[:]:
56 if widget in self.widget_list:
57 # Standardise widdths
58 widget.rect.width = self.rect.width - 2
59 widget.prepare()
60
61 def change_page(self, ev, widget, change):
62 self.page += change
63 self.fill_page()
64 return True