Added checkboxes. You can't really do anything with them yet, though...
This commit is contained in:
parent
c36c863fe1
commit
f3c77bda6e
|
@ -0,0 +1,57 @@
|
||||||
|
// 13 february 2014
|
||||||
|
//package ui
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"sync"
|
||||||
|
)
|
||||||
|
|
||||||
|
// A Checkbox is a clickable square with a label. The square can be either checked or unchecked.
|
||||||
|
type Checkbox struct {
|
||||||
|
// TODO provide a channel for broadcasting check changes
|
||||||
|
|
||||||
|
lock sync.Mutex
|
||||||
|
created bool
|
||||||
|
sysData *sysData
|
||||||
|
initText string
|
||||||
|
initCheck bool
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewCheckbox creates a new checkbox with the specified text.
|
||||||
|
func NewCheckbox(text string) (c *Checkbox) {
|
||||||
|
return &Checkbox{
|
||||||
|
sysData: &sysData{
|
||||||
|
cSysData: cSysData{
|
||||||
|
ctype: c_checkbox,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
initText: text,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetText sets the checkbox's text.
|
||||||
|
func (c *Checkbox) SetText(text string) (err error) {
|
||||||
|
c.lock.Lock()
|
||||||
|
defer c.lock.Unlock()
|
||||||
|
|
||||||
|
// TODO handle created
|
||||||
|
c.initText = text
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO Checked()
|
||||||
|
|
||||||
|
func (c *Checkbox) apply(window *sysData) error {
|
||||||
|
c.lock.Lock()
|
||||||
|
defer c.lock.Unlock()
|
||||||
|
|
||||||
|
return c.sysData.make(c.initText, 300, 300, window)
|
||||||
|
// TODO size to parent size
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Checkbox) 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)
|
||||||
|
}
|
8
main.go
8
main.go
|
@ -9,6 +9,14 @@ func main() {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
w2 := NewWindow("Checkbox Window", 200, 100)
|
||||||
|
c := NewCheckbox("Check Me")
|
||||||
|
err = w2.Open(c)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
mainloop:
|
mainloop:
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
|
|
|
@ -30,5 +30,6 @@ func (c *cSysData) setRect(x int, y int, width int, height int) error {
|
||||||
const (
|
const (
|
||||||
c_window = iota
|
c_window = iota
|
||||||
c_button
|
c_button
|
||||||
|
c_checkbox
|
||||||
nctypes
|
nctypes
|
||||||
)
|
)
|
||||||
|
|
|
@ -38,6 +38,11 @@ var classTypes = [nctypes]*classData{
|
||||||
style: _BS_PUSHBUTTON | controlstyle,
|
style: _BS_PUSHBUTTON | controlstyle,
|
||||||
xstyle: 0 | controlxstyle,
|
xstyle: 0 | controlxstyle,
|
||||||
},
|
},
|
||||||
|
c_checkbox: &classData{
|
||||||
|
name: "BUTTON",
|
||||||
|
style: _BS_AUTOCHECKBOX | controlstyle,
|
||||||
|
xstyle: 0 | controlxstyle,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *sysData) addChild(child *sysData) _HMENU {
|
func (s *sysData) addChild(child *sysData) _HMENU {
|
||||||
|
|
Loading…
Reference in New Issue