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 ,
}
2014-02-14 14:54:56 -06:00
c . sysData . alternate = editable
2014-02-14 11:16:27 -06:00
return c
}
// TODO Append, InsertBefore, Delete
// Selection returns the current selection.
2014-02-15 12:36:24 -06:00
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 ( )
}
2014-02-15 12:36:24 -06:00
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 ( )
2014-02-15 12:07:46 -06:00
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 )
}