summaryrefslogtreecommitdiff
path: root/checkbox.go
diff options
context:
space:
mode:
authorPietro Gagliardi <[email protected]>2018-08-11 19:26:24 -0400
committerPietro Gagliardi <[email protected]>2018-08-11 19:26:24 -0400
commit97c3d186f1bc249d77e1084d127e06f9f198685d (patch)
treed6d48fd85f3d60bc392aea0a13dcc5b40217b380 /checkbox.go
parent838e064107f0eae6fb1e3225fdec49b2dab45c5b (diff)
Migrated checkbox.go. I'll do more at once; I just want to see what effect this has.
Diffstat (limited to 'checkbox.go')
-rw-r--r--checkbox.go74
1 files changed, 74 insertions, 0 deletions
diff --git a/checkbox.go b/checkbox.go
new file mode 100644
index 0000000..d7fd949
--- /dev/null
+++ b/checkbox.go
@@ -0,0 +1,74 @@
+// 12 december 2015
+
+package ui
+
+import (
+ "unsafe"
+)
+
+// #include "ui.h"
+// extern void doCheckboxOnToggled(uiCheckbox *, void *);
+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.uiCheckboxOnToggled(c.c, C.doCheckboxOnToggled, nil)
+
+ 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 doCheckboxOnToggled
+func doCheckboxOnToggled(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))
+}