# HG changeset patch # User Goffi # Date 1281362308 -28800 # Node ID 6fd053c9942114701a08c5446b60e8cdcccd1d3e # Parent b318d2b588876bb0bf83fffe6c385f5b4a137184 Primitivus: misc improvments on TabsContainer/FocusFrame - FocusFrame: better management of keypress - TabsContainer: new addFooter method, to add a widget on the bottom of the container diff -r b318d2b58887 -r 6fd053c99421 frontends/primitivus/custom_widgets.py --- a/frontends/primitivus/custom_widgets.py Mon Aug 09 21:39:41 2010 +0800 +++ b/frontends/primitivus/custom_widgets.py Mon Aug 09 21:58:28 2010 +0800 @@ -816,6 +816,10 @@ """Frame which manage 'tab' key""" def keypress(self, size, key): + ret = urwid.Frame.keypress(self, size, key) + if not ret: + return + if key == 'tab': focus_list = ('header','body','footer') focus_idx = focus_list.index(self.focus_part) @@ -826,7 +830,7 @@ if widget!=None and widget.selectable(): self.set_focus(focus_name) - return urwid.Frame.keypress(self, size, key) + return ret class TabsContainer(urwid.WidgetWrap): signals = ['click'] @@ -835,14 +839,14 @@ #self._current_tab = 0 self._buttons_cont = ColumnsRoller() self.tabs = [] - self.__frame = urwid.Frame(urwid.Filler(urwid.Text('')),urwid.Pile([self._buttons_cont,urwid.Divider(u"─")])) + self.__frame = FocusFrame(urwid.Filler(urwid.Text('')),urwid.Pile([self._buttons_cont,urwid.Divider(u"─")])) urwid.WidgetWrap.__init__(self, self.__frame) - """def selectable(self): - return True - def keypress(self, size, key): - return key""" + if key=='tab': + self._w.keypress(size,key) + return + return self._w.keypress(size,key) def __buttonClicked(self, button, invisible=False): """Called when a button on the tab is changed, @@ -880,6 +884,12 @@ self.__appendButton(name) return listbox + def addFooter(self, widget): + """Add a widget on the bottom of the tab (will be displayed on all pages) + @param widget: FlowWidget""" + self._w.footer = widget + + ## DECORATORS ## class LabelLine(urwid.LineBox): """Like LineBox, but with a Label centered in the top line""" diff -r b318d2b58887 -r 6fd053c99421 frontends/primitivus/xmlui.py --- a/frontends/primitivus/xmlui.py Mon Aug 09 21:39:41 2010 +0800 +++ b/frontends/primitivus/xmlui.py Mon Aug 09 21:58:28 2010 +0800 @@ -164,7 +164,7 @@ assert ret_wid.body if isinstance(ret_wid.body[0],custom_widgets.TabsContainer): - ret_wid = urwid.Pile([ret_wid.body[0]]) #xxx: awfull hack cause TabsContainer is a BoxWidget, can't be inside a ListBox + ret_wid = ret_wid.body[0] #xxx: awfull hack cause TabsContainer is a BoxWidget, can't be inside a ListBox if self.type == 'form': @@ -176,15 +176,13 @@ grid_wid = urwid.GridFlow(buttons,max_len+4,1,0,'center') ret_wid.body.append(grid_wid) elif self.type == 'param': - assert(isinstance(ret_wid,urwid.Pile)) + assert(isinstance(ret_wid,custom_widgets.TabsContainer)) buttons = [] buttons.append(custom_widgets.CustomButton(_('Save'),self.onSaveParams)) buttons.append(custom_widgets.CustomButton(_('Cancel'),lambda x:self.host.removeWindow())) max_len = max([button.getSize() for button in buttons]) grid_wid = urwid.GridFlow(buttons,max_len,1,0,'center') - ret_wid.widget_list.append(urwid.Filler(grid_wid)) - ret_wid.item_types.append(('weight',1)) - + ret_wid.addFooter(grid_wid) return ret_wid def show(self):