Mercurial > boomslang
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 |