webmcp
changeset 75:faedbc8615e0
Allow particular records to be selected and/or disabled in ui.field.select{...}, even if they share the same key, and never select more than one record
author | jbe |
---|---|
date | Wed Jun 20 00:35:02 2012 +0200 (2012-06-20) |
parents | 74efa44a0a4d |
children | a6a00add617b |
files | framework/env/ui/field/select.lua |
line diff
1.1 --- a/framework/env/ui/field/select.lua Fri Jun 15 22:10:39 2012 +0200 1.2 +++ b/framework/env/ui/field/select.lua Wed Jun 20 00:35:02 2012 +0200 1.3 @@ -1,11 +1,12 @@ 1.4 --[[-- 1.5 ui.field.select{ 1.6 - ... -- generic ui.field.* arguments, as described for ui.autofield{...} 1.7 + ... -- generic ui.field.* arguments, as described for ui.autofield{...} 1.8 foreign_records = foreign_records, -- list of records to be chosen from, or function returning such a list 1.9 foreign_id = foreign_id, -- name of id field in foreign records 1.10 foreign_name = foreign_name, -- name of field to be used as name in foreign records 1.11 format_options = format_options -- format options for format.string 1.12 - disabled_records = disabled_records -- table of record keys that should be disabled (NOTE: Preliminary. Argument name may change in future releases.) 1.13 + selected_record = selected_record -- id of (or reference to) record which is selected (optional, overrides "value" argument when not nil) 1.14 + disabled_records = disabled_records -- table with ids of (or references to) records that should be disabled (stored as table keys mapped to true) 1.15 } 1.16 1.17 This function inserts a select field in the active slot. For description of the generic field helper arguments, see help for ui.autofield{...}. 1.18 @@ -50,14 +51,34 @@ 1.19 ) 1.20 } 1.21 end 1.22 + local one_selected = false 1.23 for idx, record in ipairs(foreign_records) do 1.24 local key = record[args.foreign_id] 1.25 + local selected = false 1.26 + if not one_selected then 1.27 + if args.selected_record == nil then 1.28 + if args.value == key then 1.29 + selected = true 1.30 + end 1.31 + else 1.32 + if args.selected_record == record or args.selected_record == key then 1.33 + selected = true 1.34 + end 1.35 + end 1.36 + one_selected = selected 1.37 + end 1.38 + local disabled = false 1.39 + if args.disabled_records then 1.40 + if args.disabled_records[record] or args.disabled_records[key] then 1.41 + disabled = true 1.42 + end 1.43 + end 1.44 ui.tag{ 1.45 tag = "option", 1.46 attr = { 1.47 value = key, 1.48 - disabled = ((args.disabled_records and args.disabled_records[key] and "1" ) or nil), 1.49 - selected = ((key == args.value) and "selected" or nil) 1.50 + disabled = disabled and "disabled" or nil, 1.51 + selected = selected and "selected" or nil 1.52 }, 1.53 content = format.string( 1.54 record[args.foreign_name],