primitivus: PrimitivusVerticalContainer box widgets management:

/!\ Urwid SàText need to be updated /!\
    - updated PrimitivusTabsContainer._xmluiAddTab to manage Urwid SàText changes
    - if a box widget is added to PrimitivusVerticalContainer, if will use the full available space if it is alone, else it we have a height of 5 rows
This commit is contained in:
Goffi 2014-03-21 15:04:13 +01:00
commit ab9b658e52

View file

@ -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)