From 8a81650b3da7ce00725336df9e03b38e935c5a65 Mon Sep 17 00:00:00 2001 From: Pietro Gagliardi Date: Wed, 2 Jul 2014 22:53:03 -0400 Subject: Moved it all back; the preemptive multitaksing during an event handler kills us on all platforms. Going to have to restrict ALL GUI accss to happening from one t hread, so going to need to drop uitask entirely and have just a start() callback for startup code and a post() function for posting requests to windows (like channel sends but into a perpetual buffer). --- checkbox.go | 86 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 checkbox.go (limited to 'checkbox.go') diff --git a/checkbox.go b/checkbox.go new file mode 100644 index 0000000..1293dfc --- /dev/null +++ b/checkbox.go @@ -0,0 +1,86 @@ +// 13 february 2014 + +package ui + +// A Checkbox is a clickable square with a label. The square can be either checked or unchecked. Checkboxes start out unchecked. +type Checkbox struct { + 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: mksysdata(c_checkbox), + initText: text, + } +} + +// SetText sets the checkbox's text. +func (c *Checkbox) SetText(text string) { + if c.created { + c.sysData.setText(text) + return + } + c.initText = text +} + +// Text returns the checkbox's text. +func (c *Checkbox) Text() string { + if c.created { + return c.sysData.text() + } + return c.initText +} + +// SetChecked() changes the checked state of the Checkbox. +func (c *Checkbox) SetChecked(checked bool) { + if c.created { + c.sysData.setChecked(checked) + return + } + c.initCheck = checked +} + +// Checked() returns whether or not the Checkbox has been checked. +func (c *Checkbox) Checked() bool { + if c.created { + return c.sysData.isChecked() + } + return c.initCheck +} + +func (c *Checkbox) make(window *sysData) error { + err := c.sysData.make(window) + if err != nil { + return err + } + c.sysData.setText(c.initText) + c.sysData.setChecked(c.initCheck) + c.created = true + return nil +} + +func (c *Checkbox) allocate(x int, y int, width int, height int, d *sysSizeData) []*allocation { + return []*allocation{&allocation{ + x: x, + y: y, + width: width, + height: height, + this: c, + }} +} + +func (c *Checkbox) preferredSize(d *sysSizeData) (width int, height int) { + return c.sysData.preferredSize(d) +} + +func (c *Checkbox) commitResize(a *allocation, d *sysSizeData) { + c.sysData.commitResize(a, d) +} + +func (c *Checkbox) getAuxResizeInfo(d *sysSizeData) { + c.sysData.getAuxResizeInfo(d) +} -- cgit v1.2.3