Mercurial > libervia-backend
diff frontends/src/primitivus/xmlui.py @ 803:f100fd8d279f
core, frontends: implementation of AdvancedListContainer first draft + misc:
/!\ Urwid SàText must be updated as the new TableContainer is used /!\
- fixed button value in paramsXML2XMLUI
- new Urwid SàText TabContainer is used in Primitivus for PairsContainer and AdvancedListContainer
- fixed in core's XMLUI AdvanceListContainer
author | Goffi <goffi@goffi.org> |
---|---|
date | Tue, 04 Feb 2014 18:19:29 +0100 |
parents | 9007bb133009 |
children | 5174657b3378 |
line wrap: on
line diff
--- a/frontends/src/primitivus/xmlui.py Tue Feb 04 18:19:00 2014 +0100 +++ b/frontends/src/primitivus/xmlui.py Tue Feb 04 18:19:29 2014 +0100 @@ -103,25 +103,31 @@ return [option.value for option in self.getSelectedValues()] -class PrimitivusPairsContainer(xmlui.PairsContainer, urwid.WidgetWrap): +class PrimitivusAdvancedListContainer(xmlui.AdvancedListContainer, sat_widgets.TableContainer): - def __init__(self, parent, weight_0='1', weight_1='1'): - self.idx = 0 - self.weight_0 = weight_0 - self.weight_1 = weight_1 - columns = urwid.Columns([urwid.Text(''), urwid.Text('')]) - #XXX: empty Text hack needed because Pile doesn't support empty list - urwid.WidgetWrap.__init__(self,columns) + def __init__(self, parent, columns): + options = {'ADAPT':(), 'HIGHLIGHT':()} + sat_widgets.TableContainer.__init__(self, columns=columns, options=options) def _xmluiAppend(self, widget): - pile = self._w.widget_list[self.idx] - if isinstance(pile, urwid.Text): - self._w.widget_list[self.idx] = urwid.Pile([widget]) - if self.idx == 1: - self._w.set_focus(1) - else: - pile.contents.append((widget,('weight',getattr(self,'weight_'+str(self.idx))))) - self.idx = (self.idx + 1) % 2 + self.addWidget(widget) + + def _xmluiAddRow(self): + pass + +class PrimitivusPairsContainer(xmlui.PairsContainer, sat_widgets.TableContainer): + + def __init__(self, parent): + options = {'ADAPT':(0,), 'HIGHLIGHT':(0,)} + if self._xmlui_main.type == 'param': + options['FOCUS_ATTR'] = 'param_selected' + sat_widgets.TableContainer.__init__(self, columns=2, options=options) + + def _xmluiAppend(self, widget): + if isinstance(widget, PrimitivusEmptyWidget): + # we don't want highlight on empty widgets + widget = urwid.AttrMap(widget, 'default') + self.addWidget(widget) class PrimitivusTabsContainer(xmlui.TabsContainer, sat_widgets.TabsContainer): @@ -153,13 +159,15 @@ def __getattr__(self, attr): if attr.startswith("create"): - return globals()["Primitivus" + attr[6:]] # XXX: we prefix with "Primitivus" to work around an Urwid bug, WidgetMeta in Urwid don't manage multiple inheritance with same names - + cls = globals()["Primitivus" + attr[6:]] # XXX: we prefix with "Primitivus" to work around an Urwid bug, WidgetMeta in Urwid don't manage multiple inheritance with same names + cls._xmlui_main = self._xmlui_main + return cls class XMLUI(xmlui.XMLUI, urwid.WidgetWrap): widget_factory = WidgetFactory() def __init__(self, host, xml_data, title = None, flags = None): + self.widget_factory._xmlui_main = self self._dest = "window" xmlui.XMLUI.__init__(self, host, xml_data, title, flags) urwid.WidgetWrap.__init__(self, self.main_cont)