diff options
| author | Pietro Gagliardi <[email protected]> | 2014-02-14 12:16:27 -0500 |
|---|---|---|
| committer | Pietro Gagliardi <[email protected]> | 2014-02-14 12:16:27 -0500 |
| commit | 39442cefebe21b33e7796ffcf9687a8af34c5a20 (patch) | |
| tree | 2bd82d16545940a404192996136d2dc4f25108b5 /combobox.go | |
| parent | 9403224eb0842c680f60541190ab32d571a545da (diff) | |
Added Combobox.
Diffstat (limited to 'combobox.go')
| -rw-r--r-- | combobox.go | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/combobox.go b/combobox.go new file mode 100644 index 0000000..08d4605 --- /dev/null +++ b/combobox.go @@ -0,0 +1,63 @@ +// 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.editable = editable + return c +} + +// TODO Append, InsertBefore, Delete + +// Selection returns the current selection. +func (c *Combobox) Selection() (string, error) { + c.lock.Lock() + defer c.lock.Unlock() + + return c.sysData.text() +} + +// TODO SelectedIndex + +func (c *Combobox) make(window *sysData) (err error) { + c.lock.Lock() + defer c.lock.Unlock() + + err = c.sysData.make("", 300, 300, window) + if err != nil { + return err + } + for _, s := range c.initItems { + err = c.sysData.append(s) + if err != nil { + return err + } + } + 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) +} |
