diff 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
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mamba/widgets/toollist.py	Thu Sep 15 12:24:05 2011 +0200
@@ -0,0 +1,39 @@
+from mamba.widgets.base import Container
+from mamba.widgets.text import TextButton
+
+
+class ToolListWidget(Container):
+    """List of other widgets, with some paging trickery"""
+
+    def __init__(self, rect, widget_list, page_length, padding=2):
+        self.widget_list = widget_list
+        self.page_length = page_length
+        self.padding = padding
+        self.page = 0
+        super(ToolListWidget, self).__init__(rect)
+        self.fill_page()
+
+    def fill_page(self):
+        start_page = self.page * self.page_length
+        end_page = start_page + self.page_length
+        button_height = self.rect.top + self.padding
+        button_left = self.rect.left + self.padding
+        for widget in self.widget_list[start_page:end_page]:
+            widget.rect.topleft = (button_left, button_height)
+            self.add(widget)
+            button_height += widget.rect.height + self.padding
+        if start_page > 0:
+            prev_but = TextButton((button_left, button_height), 'Prev')
+            prev_but.add_callback('clicked', self.change_page, -1)
+            self.add(prev_but)
+        if end_page < len(self.widget_list):
+            next_but = TextButton((button_left + 100, button_height), 'Next')
+            next_but.add_callback('clicked', self.change_page, 1)
+            self.add(next_but)
+
+    def change_page(self, ev, widget, change):
+        self.page += change
+        for widget in self.children[:]:
+            self.remove(widget)
+        self.fill_page()
+        return True