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],

Impressum / About Us