/* A Labeled Combobox widget: ----------------------------- | | | | Food: | | | | | ----------------------------- The user can then edit the dropdown field and type anything into it */ package gadgets import ( "go.wit.com/gui" "go.wit.com/log" ) type BasicCombobox struct { ready bool progname string l *gui.Node // label widget d *gui.Node // dropdown widget Custom func() } func (d *BasicCombobox) String() string { if !d.Ready() { return "" } return d.d.String() } func (d *BasicCombobox) SetText(s string) { if !d.Ready() { return } d.d.SetText(s) } // Returns true if the status is valid func (d *BasicCombobox) Ready() bool { if d == nil { return false } return d.ready } func (n *BasicCombobox) Hide() { n.l.Hide() n.d.Hide() } func (n *BasicCombobox) Show() { n.l.Show() n.d.Show() } func (d *BasicCombobox) Enable() { if d == nil { return } if d.d == nil { return } d.d.Enable() } func (d *BasicCombobox) Disable() { if d == nil { return } if d.d == nil { return } d.d.Disable() } func (d *BasicCombobox) SetTitle(name string) { if d == nil { return } if d.d == nil { return } d.d.SetText(name) } func (d *BasicCombobox) AddText(s string) { if !d.Ready() { return } log.Log(GADGETS, "BasicCombobox.Add() =", s) d.d.AddText(s) } func NewBasicCombobox(p *gui.Node, label string) *BasicCombobox { d := BasicCombobox{ progname: label, ready: false, } // various timeout settings d.l = p.NewLabel(label) d.d = p.NewCombobox() d.d.Custom = func() { log.Log(GADGETS, "BasicCombobox.Custom() user changed value to =", d.String()) if d.Custom != nil { d.Custom() } } d.ready = true return &d }