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