Overall CBI-UVL ineraction fixes
authorSteven Barth <steven@midlink.org>
Sat, 13 Sep 2008 12:20:39 +0000 (12:20 +0000)
committerSteven Barth <steven@midlink.org>
Sat, 13 Sep 2008 12:20:39 +0000 (12:20 +0000)
libs/cbi/luasrc/cbi.lua
libs/uvl/luasrc/uvl.lua
modules/admin-full/luasrc/model/cbi/admin_network/wifi.lua
modules/admin-mini/luasrc/model/cbi/mini/wifi.lua

index df7f292..9e82ce9 100644 (file)
@@ -75,6 +75,8 @@ function load(cbimap, ...)
                if not instanceof(map, Node) then
                        error("CBI map returns no valid map object!")
                        return nil
                if not instanceof(map, Node) then
                        error("CBI map returns no valid map object!")
                        return nil
+               else
+                       map:prepare()
                end
        end
 
                end
        end
 
@@ -166,6 +168,13 @@ function Node._i18n(self, config, section, option, title, description)
        end
 end
 
        end
 end
 
+-- Prepare nodes
+function Node.prepare(self, ...)
+       for k, child in ipairs(self.children) do
+               child:prepare(...)
+       end
+end
+
 -- Append child nodes
 function Node.append(self, obj)
        table.insert(self.children, obj)
 -- Append child nodes
 function Node.append(self, obj)
        table.insert(self.children, obj)
@@ -870,7 +879,9 @@ function AbstractValue.__init__(self, map, section, option, ...)
        self.default   = nil
        self.size      = nil
        self.optional  = false
        self.default   = nil
        self.size      = nil
        self.optional  = false
+end
 
 
+function AbstractValue.prepare(self)
        -- Use defaults from UVL
        if not self.override_scheme
         and self.map:get_scheme(self.section.sectiontype, self.option) then
        -- Use defaults from UVL
        if not self.override_scheme
         and self.map:get_scheme(self.section.sectiontype, self.option) then
@@ -1099,23 +1110,23 @@ function ListValue.__init__(self, ...)
        self.vallist = {}
        self.size   = 1
        self.widget = "select"
        self.vallist = {}
        self.size   = 1
        self.widget = "select"
+end
 
 
+function ListValue.prepare(self, ...)
+       AbstractValue.prepare(self, ...)
        if not self.override_scheme
         and self.map:get_scheme(self.section.sectiontype, self.option) then
                local vs = self.map:get_scheme(self.section.sectiontype, self.option)
        if not self.override_scheme
         and self.map:get_scheme(self.section.sectiontype, self.option) then
                local vs = self.map:get_scheme(self.section.sectiontype, self.option)
-               if self.value and vs.values and not self.override_values then
-                       if self.rmempty or self.optional then
-                               self:value("")
-                       end
-                       for k, v in pairs(vs.values) do
+               if self.value and vs.valuelist and not self.override_values then
+                       for k, v in ipairs(vs.valuelist) do
                                local deps = {}
                                if not self.override_dependencies
                                local deps = {}
                                if not self.override_dependencies
-                                and vs.enum_depends and vs.enum_depends[k] then
-                                       for i, dep in ipairs(vs.enum_depends[k]) do
+                                and vs.enum_depends and vs.enum_depends[v.value] then
+                                       for i, dep in ipairs(vs.enum_depends[v.value]) do
                                                table.insert(deps, _uvl_strip_remote_dependencies(dep))
                                        end
                                end
                                                table.insert(deps, _uvl_strip_remote_dependencies(dep))
                                        end
                                end
-                               self:value(k, v, unpack(deps))
+                               self:value(v.value, v.title or v.value, unpack(deps))
                        end
                end
        end
                        end
                end
        end
index c75b9bd..683d7a9 100644 (file)
@@ -633,8 +633,10 @@ function UVL._parse_enum(self, scheme, k, v)
 
        if not t.values then
                t.values = { [v.value] = v.title or v.value }
 
        if not t.values then
                t.values = { [v.value] = v.title or v.value }
+               t.valuelist = { {value = v.value, title = v.title} }
        else
                t.values[v.value] = v.title or v.value
        else
                t.values[v.value] = v.title or v.value
+               t.valuelist[#t.valuelist + 1] = {value = v.value, title = v.title}
        end
 
        if not t.enum_depends then
        end
 
        if not t.enum_depends then
index 44f0a4f..0f99c6e 100644 (file)
@@ -236,6 +236,7 @@ end
 ------------------- WiFI-Encryption -------------------
 
 encr = s:option(ListValue, "encryption", translate("encryption"))
 ------------------- WiFI-Encryption -------------------
 
 encr = s:option(ListValue, "encryption", translate("encryption"))
+encr.override_values = true
 encr:depends({mode="ap"})
 encr:depends({mode="sta"})
 encr:depends({mode="adhoc"})
 encr:depends({mode="ap"})
 encr:depends({mode="sta"})
 encr:depends({mode="adhoc"})
index cbf3d6a..13ae997 100644 (file)
@@ -141,6 +141,7 @@ local hwtype = m:get(wifidevs[1], "type")
 
 if hwtype == "atheros" then
        mode = s:option(ListValue, "mode", translate("mode"))
 
 if hwtype == "atheros" then
        mode = s:option(ListValue, "mode", translate("mode"))
+       mode.override_values = true
        mode:value("", "auto")
        mode:value("11b", "802.11b")
        mode:value("11g", "802.11g")
        mode:value("", "auto")
        mode:value("11b", "802.11b")
        mode:value("11g", "802.11g")
@@ -206,6 +207,7 @@ function mode.write(self, section, value)
 end
 
 encr = s:option(ListValue, "encryption", translate("encryption"))
 end
 
 encr = s:option(ListValue, "encryption", translate("encryption"))
+encr.override_values = true
 encr:value("none", "No Encryption")
 encr:value("wep", "WEP")
 
 encr:value("none", "No Encryption")
 encr:value("wep", "WEP")