diff urwid_satext/sat_widgets.py @ 76:6c2a1b349416

TabsContainer now accept any box widget as tab content
author Goffi <goffi@goffi.org>
date Fri, 21 Mar 2014 15:21:02 +0100
parents 8ff563825080
children e1655ba45fae
line wrap: on
line diff
--- a/urwid_satext/sat_widgets.py	Fri Mar 21 15:20:59 2014 +0100
+++ b/urwid_satext/sat_widgets.py	Fri Mar 21 15:21:02 2014 +0100
@@ -1142,6 +1142,7 @@
 
 
 class TabsContainer(urwid.WidgetWrap):
+    """ Container which can contain multiple box widgets associated to named tabs """
     signals = ['click']
 
     def __init__(self):
@@ -1157,7 +1158,7 @@
             return
         return self._w.keypress(size,key)
 
-    def __buttonClicked(self, button, invisible=False):
+    def _buttonClicked(self, button, invisible=False):
         """Called when a button on the tab is changed,
         change the page
         @param button: button clicked
@@ -1177,27 +1178,32 @@
         if not invisible:
             self._emit('click')
 
-    def __appendButton(self, name):
+    def _appendButton(self, name):
         """Append a button to the frame header,
         and link it to the page change method"""
-        button = CustomButton(name, self.__buttonClicked, left_border = '', right_border=' | ')
+        button = CustomButton(name, self._buttonClicked, left_border = '', right_border=' | ')
         self._buttons_cont.addWidget(button, button.getSize())
         if len(self._buttons_cont.widget_list) == 1:
             #first button: we set the focus and the body
-            self._buttons_cont.set_focus(0)
-            self.__buttonClicked(button,True)
+            self._buttons_cont.focus_position = 0
+            self._buttonClicked(button,True)
 
     def addTab(self,name,content=None):
         """Add a page to the container
         @param name: name of the page (what appear on the tab)
-        @param content: content of the page
+        @param content: content of the page:
+            - if None create and empty Listbox
+            - if it is a list instance, create a ListBox with the list in a body
+            - else it must be a box widget which will be used instead of the ListBox
         @return: ListBox (content of the page)"""
-        if content is None:
-            content = []
-        listbox = urwid.ListBox(urwid.SimpleListWalker(content))
-        self.tabs.append([name,listbox])
-        self.__appendButton(name)
-        return listbox
+        if content is None or isinstance(content, list):
+            tab = urwid.ListBox(urwid.SimpleListWalker(content or []))
+        else:
+            tab = content
+
+        self.tabs.append([name, tab])
+        self._appendButton(name)
+        return tab
 
     def addFooter(self, widget):
         """Add a widget on the bottom of the tab (will be displayed on all pages)