summaryrefslogtreecommitdiff
path: root/checkbox.go
diff options
context:
space:
mode:
Diffstat (limited to 'checkbox.go')
-rw-r--r--checkbox.go73
1 files changed, 73 insertions, 0 deletions
diff --git a/checkbox.go b/checkbox.go
new file mode 100644
index 0000000..22c4c5f
--- /dev/null
+++ b/checkbox.go
@@ -0,0 +1,73 @@
+// 12 december 2015
+
+package ui
+
+import (
+ "unsafe"
+)
+
+// #include "pkgui.h"
+import "C"
+
+// Checkbox is a Control that represents a box with a text label at its
+// side. When the user clicks the checkbox, a check mark will appear
+// in the box; clicking it again removes the check.
+type Checkbox struct {
+ ControlBase
+ c *C.uiCheckbox
+ onToggled func(*Checkbox)
+}
+
+// NewCheckbox creates a new Checkbox with the given text as its
+// label.
+func NewCheckbox(text string) *Checkbox {
+ c := new(Checkbox)
+
+ ctext := C.CString(text)
+ c.c = C.uiNewCheckbox(ctext)
+ freestr(ctext)
+
+ C.pkguiCheckboxOnToggled(c.c)
+
+ c.ControlBase = NewControlBase(c, uintptr(unsafe.Pointer(c.c)))
+ return c
+}
+
+// Text returns the Checkbox's text.
+func (c *Checkbox) Text() string {
+ ctext := C.uiCheckboxText(c.c)
+ text := C.GoString(ctext)
+ C.uiFreeText(ctext)
+ return text
+}
+
+// SetText sets the Checkbox's text to text.
+func (c *Checkbox) SetText(text string) {
+ ctext := C.CString(text)
+ C.uiCheckboxSetText(c.c, ctext)
+ freestr(ctext)
+}
+
+// OnToggled registers f to be run when the user clicks the Checkbox.
+// Only one function can be registered at a time.
+func (c *Checkbox) OnToggled(f func(*Checkbox)) {
+ c.onToggled = f
+}
+
+//export pkguiDoCheckboxOnToggled
+func pkguiDoCheckboxOnToggled(cc *C.uiCheckbox, data unsafe.Pointer) {
+ c := ControlFromLibui(uintptr(unsafe.Pointer(cc))).(*Checkbox)
+ if c.onToggled != nil {
+ c.onToggled(c)
+ }
+}
+
+// Checked returns whether the Checkbox is checked.
+func (c *Checkbox) Checked() bool {
+ return tobool(C.uiCheckboxChecked(c.c))
+}
+
+// SetChecked sets whether the Checkbox is checked.
+func (c *Checkbox) SetChecked(checked bool) {
+ C.uiCheckboxSetChecked(c.c, frombool(checked))
+}