summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPietro Gagliardi <[email protected]>2014-02-13 12:26:43 -0500
committerPietro Gagliardi <[email protected]>2014-02-13 12:26:43 -0500
commitf3c77bda6e720fe7750fc3db2aa38f8b74faf585 (patch)
tree39179c1299e4a28717645776c208ccf1c28c4005
parentc36c863fe11d08b915aa51de96313d5d5049fd97 (diff)
Added checkboxes. You can't really do anything with them yet, though...
-rw-r--r--checkbox.go57
-rw-r--r--main.go8
-rw-r--r--sysdata.go1
-rw-r--r--sysdata_windows.go5
4 files changed, 71 insertions, 0 deletions
diff --git a/checkbox.go b/checkbox.go
new file mode 100644
index 0000000..cd9a896
--- /dev/null
+++ b/checkbox.go
@@ -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)
+}
diff --git a/main.go b/main.go
index 411eb36..c6f0dda 100644
--- a/main.go
+++ b/main.go
@@ -9,6 +9,14 @@ func main() {
if err != nil {
panic(err)
}
+
+ w2 := NewWindow("Checkbox Window", 200, 100)
+ c := NewCheckbox("Check Me")
+ err = w2.Open(c)
+ if err != nil {
+ panic(err)
+ }
+
mainloop:
for {
select {
diff --git a/sysdata.go b/sysdata.go
index a0b5b10..d2c002e 100644
--- a/sysdata.go
+++ b/sysdata.go
@@ -30,5 +30,6 @@ func (c *cSysData) setRect(x int, y int, width int, height int) error {
const (
c_window = iota
c_button
+ c_checkbox
nctypes
)
diff --git a/sysdata_windows.go b/sysdata_windows.go
index fd0d180..6856bc1 100644
--- a/sysdata_windows.go
+++ b/sysdata_windows.go
@@ -38,6 +38,11 @@ var classTypes = [nctypes]*classData{
style: _BS_PUSHBUTTON | controlstyle,
xstyle: 0 | controlxstyle,
},
+ c_checkbox: &classData{
+ name: "BUTTON",
+ style: _BS_AUTOCHECKBOX | controlstyle,
+ xstyle: 0 | controlxstyle,
+ },
}
func (s *sysData) addChild(child *sysData) _HMENU {