andlabs-ui/combobox.go

68 lines
1.3 KiB
Go

// 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
return c
}
// TODO Append, InsertBefore, Delete
// Selection returns the current selection.
func (c *Combobox) Selection() string {
c.lock.Lock()
defer c.lock.Unlock()
if c.created {
return c.sysData.text()
}
return ""
}
// TODO SelectedIndex
func (c *Combobox) make(window *sysData) (err error) {
c.lock.Lock()
defer c.lock.Unlock()
err = c.sysData.make("", window)
if err != nil {
return err
}
for _, s := range c.initItems {
err = c.sysData.append(s)
if err != nil {
return err
}
}
c.created = true
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)
}