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)