annotate mamba/widgets/toollist.py @ 265:74ae1645df6e

Move hackery into list widget
author Neil Muller <drnlmuller@gmail.com>
date Thu, 15 Sep 2011 12:24:05 +0200
parents
children 1e8dca95c48a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
265
74ae1645df6e Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
1 from mamba.widgets.base import Container
74ae1645df6e Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
2 from mamba.widgets.text import TextButton
74ae1645df6e Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
3
74ae1645df6e Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
4
74ae1645df6e Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
5 class ToolListWidget(Container):
74ae1645df6e Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
6 """List of other widgets, with some paging trickery"""
74ae1645df6e Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
7
74ae1645df6e Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
8 def __init__(self, rect, widget_list, page_length, padding=2):
74ae1645df6e Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
9 self.widget_list = widget_list
74ae1645df6e Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
10 self.page_length = page_length
74ae1645df6e Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
11 self.padding = padding
74ae1645df6e Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
12 self.page = 0
74ae1645df6e Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
13 super(ToolListWidget, self).__init__(rect)
74ae1645df6e Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
14 self.fill_page()
74ae1645df6e Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
15
74ae1645df6e Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
16 def fill_page(self):
74ae1645df6e Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
17 start_page = self.page * self.page_length
74ae1645df6e Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
18 end_page = start_page + self.page_length
74ae1645df6e Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
19 button_height = self.rect.top + self.padding
74ae1645df6e Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
20 button_left = self.rect.left + self.padding
74ae1645df6e Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
21 for widget in self.widget_list[start_page:end_page]:
74ae1645df6e Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
22 widget.rect.topleft = (button_left, button_height)
74ae1645df6e Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
23 self.add(widget)
74ae1645df6e Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
24 button_height += widget.rect.height + self.padding
74ae1645df6e Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
25 if start_page > 0:
74ae1645df6e Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
26 prev_but = TextButton((button_left, button_height), 'Prev')
74ae1645df6e Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
27 prev_but.add_callback('clicked', self.change_page, -1)
74ae1645df6e Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
28 self.add(prev_but)
74ae1645df6e Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
29 if end_page < len(self.widget_list):
74ae1645df6e Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
30 next_but = TextButton((button_left + 100, button_height), 'Next')
74ae1645df6e Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
31 next_but.add_callback('clicked', self.change_page, 1)
74ae1645df6e Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
32 self.add(next_but)
74ae1645df6e Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
33
74ae1645df6e Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
34 def change_page(self, ev, widget, change):
74ae1645df6e Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
35 self.page += change
74ae1645df6e Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
36 for widget in self.children[:]:
74ae1645df6e Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
37 self.remove(widget)
74ae1645df6e Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
38 self.fill_page()
74ae1645df6e Move hackery into list widget
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
39 return True