109 lines
2.2 KiB
Go
109 lines
2.2 KiB
Go
package ui
|
|
|
|
import (
|
|
"fmt"
|
|
"strconv"
|
|
)
|
|
|
|
func (d *Driver) realId(id string) string {
|
|
return fmt.Sprintf("%v:%v", d.menu.Name, id)
|
|
}
|
|
|
|
func (d *Driver) Value(id string, into *string) error {
|
|
for _, valueable := range d.allValueables() {
|
|
if valueable.id() == d.realId(id) {
|
|
*into = valueable.value()
|
|
return nil
|
|
}
|
|
}
|
|
|
|
return fmt.Errorf("Couldn't find valueable widget %v:%v", d.menu.Name, id)
|
|
}
|
|
|
|
func (d *Driver) SetValue(id, value string) error {
|
|
for _, valueable := range d.allValueables() {
|
|
if valueable.id() == d.realId(id) {
|
|
valueable.setValue(value)
|
|
return nil
|
|
}
|
|
}
|
|
|
|
return fmt.Errorf("Couldn't find valueable widget %v:%v", d.menu.Name, id)
|
|
}
|
|
|
|
func (d *Driver) ValueBool(id string, into *bool) error {
|
|
var vStr string
|
|
if err := d.Value(id, &vStr); err != nil {
|
|
return err
|
|
}
|
|
|
|
*into = vStr == "1"
|
|
return nil
|
|
}
|
|
|
|
func (d *Driver) SetValueBool(id string, value bool) error {
|
|
vStr := "0"
|
|
if value {
|
|
vStr = "1"
|
|
}
|
|
|
|
return d.SetValue(id, vStr)
|
|
}
|
|
|
|
func (d *Driver) SetFreeze(id string, value bool) error {
|
|
for _, freezable := range d.allFreezables() {
|
|
if freezable.id() == d.realId(id) {
|
|
freezable.setFreezeState(value)
|
|
return nil
|
|
}
|
|
}
|
|
|
|
return fmt.Errorf("Couldn't find clickable widget %v:%v", d.menu.Name, id)
|
|
}
|
|
|
|
func (d *Driver) OnClick(id string, f func()) error {
|
|
for _, clickable := range d.allClickables() {
|
|
if clickable.id() == d.realId(id) {
|
|
clickable.onClick(f)
|
|
return nil
|
|
}
|
|
}
|
|
|
|
return fmt.Errorf("Couldn't find clickable widget %v:%v", d.menu.Name, id)
|
|
}
|
|
|
|
// FIXME: HURK. Surely I'm missing something? steps is value:offset
|
|
func (d *Driver) ConfigureSlider(id string, steps map[int]int) error {
|
|
for _, clickable := range d.activeClickables() {
|
|
if slider, ok := clickable.(*slider); ok && slider.id() == d.realId(id) {
|
|
slider.steps = steps
|
|
|
|
return nil
|
|
}
|
|
}
|
|
|
|
return fmt.Errorf("Couldn't find slider %v:%v", d.menu.Name, id)
|
|
}
|
|
|
|
func (d *Driver) ValueInt(id string, into *int) error {
|
|
var vStr string
|
|
if err := d.Value(id, &vStr); err != nil {
|
|
return err
|
|
}
|
|
|
|
value, err := strconv.Atoi(vStr)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
*into = value
|
|
|
|
return nil
|
|
}
|
|
|
|
func (d *Driver) SetValueInt(id string, value int) error {
|
|
vStr := strconv.Itoa(value)
|
|
|
|
return d.SetValue(id, vStr)
|
|
}
|