andlabs-ui/combobox.go

68 lines
1.3 KiB
Go
Raw Normal View History

2014-02-14 11:16:27 -06:00
// 14 february 2014
//package ui
package main
import (
"sync"
)
// A Combobox is a drop-down list of items, of which only one can be selected at any given time. You may optionally make the combobox editable to allow custom items.
type Combobox struct {
// TODO Select event
lock sync.Mutex
created bool
sysData *sysData
initItems []string
}
// NewCombobox makes a new combobox with the given items. If editable is true, the combobox is editable.
func NewCombobox(editable bool, items ...string) (c *Combobox) {
c = &Combobox{
sysData: mksysdata(c_combobox),
initItems: items,
}
c.sysData.alternate = editable
2014-02-14 11:16:27 -06:00
return c
}
// TODO Append, InsertBefore, Delete
// Selection returns the current selection.
func (c *Combobox) Selection() string {
2014-02-14 11:16:27 -06:00
c.lock.Lock()
defer c.lock.Unlock()
2014-02-14 19:41:36 -06:00
if c.created {
return c.sysData.text()
}
return ""
2014-02-14 11:16:27 -06:00
}
// TODO SelectedIndex
func (c *Combobox) make(window *sysData) (err error) {
c.lock.Lock()
defer c.lock.Unlock()
err = c.sysData.make("", window)
2014-02-14 11:16:27 -06:00
if err != nil {
return err
}
for _, s := range c.initItems {
err = c.sysData.append(s)
if err != nil {
return err
}
}
2014-02-14 19:41:36 -06:00
c.created = true
2014-02-14 11:16:27 -06:00
return nil
}
func (c *Combobox) setRect(x int, y int, width int, height int) error {
c.lock.Lock()
defer c.lock.Unlock()
return c.sysData.setRect(x, y, width, height)
}