From f3c77bda6e720fe7750fc3db2aa38f8b74faf585 Mon Sep 17 00:00:00 2001 From: Pietro Gagliardi Date: Thu, 13 Feb 2014 12:26:43 -0500 Subject: [PATCH] Added checkboxes. You can't really do anything with them yet, though... --- checkbox.go | 57 ++++++++++++++++++++++++++++++++++++++++++++++ main.go | 8 +++++++ sysdata.go | 1 + sysdata_windows.go | 5 ++++ 4 files changed, 71 insertions(+) create mode 100644 checkbox.go 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 {