webmcp
annotate framework/env/ui/field/select.lua @ 30:6e08067e66c1
allow disabled records in select widget
this allows the use record entries as seperators
this allows the use record entries as seperators
author | Daniel Poelzleithner <poelzi@poelzi.org> |
---|---|
date | Mon Sep 20 20:11:29 2010 +0200 (2010-09-20) |
parents | 9fdfb27f8e67 |
children | 9b93943e2e6e |
rev | line source |
---|---|
jbe/bsw@0 | 1 --[[-- |
jbe/bsw@0 | 2 ui.field.select{ |
jbe/bsw@0 | 3 ... -- generic ui.field.* arguments, as described for ui.autofield{...} |
poelzi@30 | 4 foreign_records = foreign_records, -- list of records to be chosen from, or function returning such a list |
poelzi@30 | 5 foreign_id = foreign_id, -- name of id field in foreign records |
poelzi@30 | 6 foreign_name = foreign_name, -- name of field to be used as name in foreign records |
poelzi@30 | 7 format_options = format_options -- format options for format.string |
poelzi@30 | 8 disabled_records = disabled_list -- table of record keys that should be disabled |
jbe/bsw@0 | 9 } |
jbe/bsw@0 | 10 |
jbe/bsw@0 | 11 This function inserts a select field in the active slot. For description of the generic field helper arguments, see help for ui.autofield{...}. |
jbe/bsw@0 | 12 |
jbe/bsw@0 | 13 --]]-- |
jbe/bsw@0 | 14 |
jbe/bsw@0 | 15 function ui.field.select(args) |
jbe/bsw@0 | 16 ui.form_element(args, {fetch_value = true}, function(args) |
jbe/bsw@0 | 17 local foreign_records = args.foreign_records |
jbe/bsw@0 | 18 if type(foreign_records) == "function" then |
jbe/bsw@0 | 19 foreign_records = foreign_records(args.record) |
jbe/bsw@0 | 20 end |
jbe/bsw@0 | 21 if args.readonly then |
jbe/bsw@0 | 22 local name |
jbe/bsw@0 | 23 for idx, record in ipairs(foreign_records) do |
jbe/bsw@0 | 24 if record[args.foreign_id] == args.value then |
jbe/bsw@0 | 25 name = record[args.foreign_name] |
jbe/bsw@0 | 26 break |
jbe/bsw@0 | 27 end |
jbe/bsw@0 | 28 end |
jbe/bsw@0 | 29 ui.tag{ |
jbe/bsw@0 | 30 tag = args.tag, |
jbe/bsw@0 | 31 attr = args.attr, |
jbe/bsw@0 | 32 content = format.string(name, args.format_options) |
jbe/bsw@0 | 33 } |
jbe/bsw@0 | 34 else |
jbe/bsw@0 | 35 local attr = table.new(args.attr) |
jbe/bsw@0 | 36 attr.name = args.html_name |
jbe/bsw@0 | 37 ui.tag{ |
jbe/bsw@0 | 38 tag = "select", |
jbe/bsw@0 | 39 attr = attr, |
jbe/bsw@0 | 40 content = function() |
jbe/bsw@0 | 41 if args.nil_as then |
jbe/bsw@0 | 42 ui.tag{ |
jbe/bsw@0 | 43 tag = "option", |
jbe/bsw@0 | 44 attr = { value = "" }, |
jbe/bsw@0 | 45 content = format.string( |
jbe/bsw@0 | 46 args.nil_as, |
jbe/bsw@0 | 47 args.format_options |
jbe/bsw@0 | 48 ) |
jbe/bsw@0 | 49 } |
jbe/bsw@0 | 50 end |
jbe/bsw@0 | 51 for idx, record in ipairs(foreign_records) do |
jbe/bsw@0 | 52 local key = record[args.foreign_id] |
jbe/bsw@0 | 53 ui.tag{ |
jbe/bsw@0 | 54 tag = "option", |
jbe/bsw@0 | 55 attr = { |
jbe/bsw@0 | 56 value = key, |
poelzi@30 | 57 disabled = ((args.disabled_records and args.disabled_records[key] and "1" ) or nil), |
jbe/bsw@0 | 58 selected = ((key == args.value) and "selected" or nil) |
jbe/bsw@0 | 59 }, |
jbe/bsw@0 | 60 content = format.string( |
jbe/bsw@0 | 61 record[args.foreign_name], |
jbe/bsw@0 | 62 args.format_options |
jbe/bsw@0 | 63 ) |
jbe/bsw@0 | 64 } |
jbe/bsw@0 | 65 end |
jbe/bsw@0 | 66 end |
jbe/bsw@0 | 67 } |
jbe/bsw@0 | 68 end |
jbe/bsw@0 | 69 end) |
jbe/bsw@0 | 70 end |