summaryrefslogtreecommitdiff
path: root/combobox.go
diff options
context:
space:
mode:
authorPietro Gagliardi <[email protected]>2014-02-14 12:16:27 -0500
committerPietro Gagliardi <[email protected]>2014-02-14 12:16:27 -0500
commit39442cefebe21b33e7796ffcf9687a8af34c5a20 (patch)
tree2bd82d16545940a404192996136d2dc4f25108b5 /combobox.go
parent9403224eb0842c680f60541190ab32d571a545da (diff)
Added Combobox.
Diffstat (limited to 'combobox.go')
-rw-r--r--combobox.go63
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)
+}