components_config_ConfigList.bs

import "pkg:/source/utils/config.bs"
import "pkg:/source/utils/dialogs.bs"
import "pkg:/source/utils/misc.bs"

sub init()
  m.top.itemComponentName = "ConfigItem"

  m.top.drawFocusFeedback = True
  m.top.vertFocusAnimationStyle = "floatingFocus"

  m.top.observeField("itemSelected", "onItemSelected")

  m.top.itemSize = [750, 75]
  m.top.itemSpacing = [0, 25]

  m.top.setfocus(true)

end sub

sub setData()
  items = m.top.configItems
  data = CreateObject("roSGNode", "ContentNode")
  data.appendChildren(items)

  m.top.content = data
end sub

sub onItemSelected()
  i = m.top.itemSelected
  itemField = m.top.content.getchild(i)

  configListShowDialog(itemField)
end sub

' Standard keyboard dialog (see source/utils/dialogs.bs). The helper owns the
' themed chrome and the OK/Cancel buttons; the result arrives on the dialog
' node's own `result` field.
sub configListShowDialog(configField)
  m.configField = configField
  isPassword = configField.type = "password"
  m.dialog = showKeyboardDialog(configField.label, "onConfigValueEntered", configField.value, isPassword)
end sub

sub onConfigValueEntered()
  dialog = m.dialog
  m.dialog = invalid
  if not isValid(dialog) then return
  if dialog.result.confirmed then m.configField.value = dialog.result.value
end sub