coffeescript-ui
Version:
Coffeescript User Interface System
131 lines (102 loc) • 3.06 kB
text/coffeescript
###
* coffeescript-ui - Coffeescript User Interface System (CUI)
* Copyright (c) 2013 - 2016 Programmfabrik GmbH
* MIT Licence
* https://github.com/programmfabrik/coffeescript-ui, http://www.coffeescript-ui.org
###
class CUI.MultiInputControl extends CUI.Element
constructor: (opts) ->
super(opts)
= document.body
initOpts: ->
super()
preferred_key:
check: String
keys:
check: (v) ->
CUI.util.isArray(v) and v.length > 0
user_control:
default: true
check: Boolean
setKeys: (keys) ->
= []
if not keys
return
key_names = {}
for key, idx in keys
CUI.util.assert(CUI.util.isString(key.name) and not CUI.util.isEmpty(key.name), "new #{@__cls}", "opts.keys[#{idx}].name must be non-empty String.", key: key)
CUI.util.assert(CUI.util.isString(key.tag) and not CUI.util.isEmpty(key.tag), "new #{@__cls}", "opts.keys[#{idx}].tag must be non-empty String.", key: key)
CUI.util.assert(CUI.util.isUndef(key.enabled) or CUI.util.isBoolean(key.enabled), "new #{@__cls}", "opts.keys[#{idx}].enabled must be Boolean.", key: key)
if not CUI.util.isUndef(key_names[key.name])
CUI.util.assert(false, "new #{@__cls}", "Duplicate opts.keys[#{idx}].name \"#{key.name}\", name already used in ##{idx}.", key: key)
continue
key_names[key.name] = idx
.push
name: key.name
tag: key.tag
enabled: key.enabled
tooltip: key.tooltip
__idx: idx
@
setPreferredKey: (key_name) ->
= null
if CUI.util.isNull(key_name)
return
for key in
if key.name == key_name
= key
CUI.util.assert(, "#{@__cls}.setPreferredKey", "key.name == \"#{key_name}\" not found in keys.", keys: )
getPreferredKey: ->
# avoid copying this
copy: ->
@
getKeys: ->
isEnabled: (name) ->
for k in
if k.name == name
return k.enabled
return undefined
getUserControlOptions: ->
options = []
for key in
do (key) ->
options.push
active: key.enabled
onActivate: ->
console.debug "control activate", key.tag
key.enabled = true
CUI.Events.trigger(type: "multi-input-control-update")
onDeactivate: (cb) ->
console.debug "control deactivate", key.tag
key.enabled = false
CUI.Events.trigger(type: "multi-input-control-update")
text: key.tag
options
showUserControl: ->
options = new CUI.Options
min_checked: 1
options:
.start()
= new CUI.Modal
class: "cui-multi-input-control"
onHide: =>
= null
pane:
footer_right: new CUI.Button
text: "Done"
onClick: =>
.destroy()
header_left: new CUI.Label(text: "MultiInputControl")
content: options
.show()
hasUserControl: ->
CUI.Events.registerEvent
type: "multi-input-control-update"
sink: true