From ab9b658e527f059e788a30882b3bdb57d0fb5b8b Mon Sep 17 00:00:00 2001 From: Goffi Date: Fri, 21 Mar 2014 15:04:13 +0100 Subject: [PATCH] =?UTF-8?q?primitivus:=20PrimitivusVerticalContainer=20box?= =?UTF-8?q?=20widgets=20management:=20=20=20=20=20/!\=20Urwid=20S=C3=A0Tex?= =?UTF-8?q?t=20need=20to=20be=20updated=20/!\=20=20=20=20=20-=20updated=20?= =?UTF-8?q?PrimitivusTabsContainer.=5FxmluiAddTab=20to=20manage=20Urwid=20?= =?UTF-8?q?S=C3=A0Text=20changes=20=20=20=20=20-=20if=20a=20box=20widget?= =?UTF-8?q?=20is=20added=20to=20PrimitivusVerticalContainer,=20if=20will?= =?UTF-8?q?=20use=20the=20full=20available=20space=20if=20it=20is=20alone,?= =?UTF-8?q?=20else=20it=20we=20have=20a=20height=20of=205=20rows?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontends/src/primitivus/xmlui.py | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/frontends/src/primitivus/xmlui.py b/frontends/src/primitivus/xmlui.py index 0a8fa256..9febdaa8 100644 --- a/frontends/src/primitivus/xmlui.py +++ b/frontends/src/primitivus/xmlui.py @@ -180,21 +180,33 @@ class PrimitivusTabsContainer(xmlui.TabsContainer, sat_widgets.TabsContainer): self.body.append(widget) def _xmluiAddTab(self, label): - list_box = super(PrimitivusTabsContainer, self).addTab(label) - if hasattr(PrimitivusVerticalContainer, "_PrimitivusVerticalContainer__super"): # workaround for Urwid's metaclass baviour - del PrimitivusVerticalContainer._PrimitivusVerticalContainer__super - PrimitivusVerticalContainer._xmluiAdapt(list_box) - return list_box + tab = PrimitivusVerticalContainer(None) + self.addTab(label, tab) + return tab class PrimitivusVerticalContainer(xmlui.VerticalContainer, urwid.ListBox): + BOX_HEIGHT = 5 def __init__(self, parent): urwid.ListBox.__init__(self, urwid.SimpleListWalker([])) + self._last_size = None def _xmluiAppend(self, widget): + if 'flow' not in widget.sizing(): + widget = urwid.BoxAdapter(widget, self.BOX_HEIGHT) self.body.append(widget) + def render(self, size, focus=False): + if size != self._last_size: + (maxcol, maxrow) = size + if self.body: + widget = self.body[0] + if isinstance(widget, urwid.BoxAdapter): + widget.height = maxrow + self._last_size = size + return super(PrimitivusVerticalContainer, self).render(size, focus) + class WidgetFactory(object): @@ -217,9 +229,6 @@ class XMLUI(xmlui.XMLUI, urwid.WidgetWrap): def postTreat(): assert self.main_cont.body - if isinstance(self.main_cont.body[0],sat_widgets.TabsContainer): - self._main_cont = self.main_cont.body[0] #xxx: awfull hack cause TabsContainer is a BoxWidget, can't be inside a ListBox - if self.type == 'form': buttons = [] buttons.append(urwid.Button(_('Submit'),self.onFormSubmitted)) @@ -229,13 +238,14 @@ class XMLUI(xmlui.XMLUI, urwid.WidgetWrap): grid_wid = urwid.GridFlow(buttons,max_len+4,1,0,'center') self.main_cont.body.append(grid_wid) elif self.type == 'param': - assert(isinstance(self.main_cont,sat_widgets.TabsContainer)) + tabs_cont = self.main_cont.body[0].base_widget + assert(isinstance(tabs_cont,sat_widgets.TabsContainer)) buttons = [] buttons.append(sat_widgets.CustomButton(_('Save'),self.onSaveParams)) buttons.append(sat_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') - self.main_cont.addFooter(grid_wid) + tabs_cont.addFooter(grid_wid) super(XMLUI, self).constructUI(xml_data, postTreat) urwid.WidgetWrap.__init__(self, self.main_cont)