changeset 1486:a77217511afd

tools, frontends (xmlui): allow to select a tab when adding it
author souliane <souliane@mailoo.org>
date Fri, 21 Aug 2015 14:17:41 +0200
parents 9fcc16ef163a
children 0df627d0b4ca
files frontends/src/primitivus/xmlui.py frontends/src/tools/xmlui.py src/tools/xml_tools.py
diffstat 3 files changed, 32 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/frontends/src/primitivus/xmlui.py	Fri Aug 21 19:23:14 2015 +0200
+++ b/frontends/src/primitivus/xmlui.py	Fri Aug 21 14:17:41 2015 +0200
@@ -287,9 +287,9 @@
     def _xmluiAppend(self, widget):
         self.body.append(widget)
 
-    def _xmluiAddTab(self, label):
+    def _xmluiAddTab(self, label, selected):
         tab = PrimitivusVerticalContainer(None)
-        self.addTab(label, tab)
+        self.addTab(label, tab, selected)
         return tab
 
 
--- a/frontends/src/tools/xmlui.py	Fri Aug 21 19:23:14 2015 +0200
+++ b/frontends/src/tools/xmlui.py	Fri Aug 21 14:17:41 2015 +0200
@@ -374,12 +374,13 @@
             elif node.nodeName == 'tab':
                 name = node.getAttribute('name')
                 label = node.getAttribute('label')
+                selected = C.bool(node.getAttribute('selected') or C.BOOL_FALSE)
                 if not name or not isinstance(data, TabsContainer):
                     raise InvalidXMLUI
                 if self.type == 'param':
                     self._current_category = name #XXX: awful hack because params need category and we don't keep parent
                 tab_cont = data
-                new_tab = tab_cont._xmluiAddTab(label or name)
+                new_tab = tab_cont._xmluiAddTab(label or name, selected)
                 self._parseChilds(new_tab, node, ('widget', 'container'))
 
             elif node.nodeName == 'row':
--- a/src/tools/xml_tools.py	Fri Aug 21 19:23:14 2015 +0200
+++ b/src/tools/xml_tools.py	Fri Aug 21 14:17:41 2015 +0200
@@ -381,12 +381,28 @@
     """ Used by TabsContainer to give name and label to tabs."""
     type = 'tab'
 
-    def __init__(self, parent, name, label):
+    def __init__(self, parent, name, label, selected=False):
+        """
+
+        @param parent (TabsContainer): parent container
+        @param name (unicode): tab name
+        @param label (unicode): tab label
+        @param selected (bool): set to True to select this tab
+        """
         if not isinstance(parent, TabsContainer):
             raise exceptions.DataError(_("TabElement must be a child of TabsContainer"))
         super(TabElement, self).__init__(parent.xmlui, parent)
         self.elem.setAttribute('name', name)
         self.elem.setAttribute('label', label)
+        if selected:
+            self.setSelected(selected)
+
+    def setSelected(self, selected=False):
+        """Set the tab selected.
+
+        @param selected (bool): set to True to select this tab
+        """
+        self.elem.setAttribute('selected', 'true' if selected else 'false')
 
 
 class FieldBackElement(Element):
@@ -543,13 +559,20 @@
 class TabsContainer(Container):
     type = "tabs"
 
-    def addTab(self, name, label=None, container=VerticalContainer):
-        """Add a tab"""
+    def addTab(self, name, label=None, selected=None, container=VerticalContainer):
+        """Add a tab.
+
+        @param name (unicode): tab name
+        @param label (unicode): tab label
+        @param selected (bool): set to True to select this tab
+        @param container (class): container class, inheriting from Container 
+        @return: the container for the new tab
+        """
         if not label:
             label = name
-        tab_elt = TabElement(self, name, label)
+        tab_elt = TabElement(self, name, label, selected)
         new_container = container(self.xmlui, tab_elt)
-        self.xmlui.changeContainer(new_container)
+        return self.xmlui.changeContainer(new_container)
 
     def end(self):
         """ Called when we have finished tabs