in src/Tulsi/OptionsEditorController.swift [233:278]
func prepareEditorForTarget(_ target: UIRuleInfo?) {
if target == nil {
targetValueColumn.isHidden = true
} else {
targetValueColumn.title = target!.targetName!
targetValueColumn.isHidden = false
}
var newOptionNodes = [OptionsEditorNode]()
var optionGroupNodes = [TulsiOptionKeyGroup: OptionsEditorGroupNode]()
let optionSet = model?.optionSet
guard let visibleOptions = optionSet?.allVisibleOptions else { return }
for (key, option) in visibleOptions {
let newNode: OptionsEditorNode
switch option.valueType {
case .bool:
newNode = OptionsEditorBooleanNode(key: key, option: option, model: model, target: target)
case .string:
newNode = OptionsEditorStringNode(key: key,
option: option,
model: model,
target: target)
case .stringEnum:
newNode = OptionsEditorConstrainedStringNode(key: key,
option: option,
model: model,
target: target)
}
if let (group, displayName, description) = optionSet?.groupInfoForOptionKey(key) {
var parent: OptionsEditorGroupNode! = optionGroupNodes[group]
if parent == nil {
parent = OptionsEditorGroupNode(key: group,
displayName: displayName,
description: description)
optionGroupNodes[group] = parent
newOptionNodes.append(parent)
}
parent.addChildNode(newNode)
} else {
newOptionNodes.append(newNode)
}
}
nodes = newOptionNodes.sorted { $0.name < $1.name }
}