summaryrefslogtreecommitdiff
path: root/button.go
diff options
context:
space:
mode:
authorPietro Gagliardi <[email protected]>2018-08-11 19:07:04 -0400
committerPietro Gagliardi <[email protected]>2018-08-11 19:07:04 -0400
commit838e064107f0eae6fb1e3225fdec49b2dab45c5b (patch)
treef4b6f9f86db1e5cf41aa1054797e538a0caa0826 /button.go
parent485c946ad8961f836edb191eed60248f2ca6b617 (diff)
Created a new Control setup; wrote Button for it.
Diffstat (limited to 'button.go')
-rw-r--r--button.go63
1 files changed, 63 insertions, 0 deletions
diff --git a/button.go b/button.go
new file mode 100644
index 0000000..a0c4e67
--- /dev/null
+++ b/button.go
@@ -0,0 +1,63 @@
+// 12 december 2015
+
+package ui
+
+import (
+ "unsafe"
+)
+
+// #include "ui.h"
+// extern void doButtonOnClicked(uiButton *, void *);
+import "C"
+
+// Button is a Control that represents a button that the user can
+// click to perform an action. A Button has a text label that should
+// describe what the button does.
+type Button struct {
+ ControlBase
+ b *C.uiButton
+ onClicked func(*Button)
+}
+
+// NewButton creates a new Button with the given text as its label.
+func NewButton(text string) *Button {
+ b := new(Button)
+
+ ctext := C.CString(text)
+ b.b = C.uiNewButton(ctext)
+ freestr(ctext)
+
+ C.uiButtonOnClicked(b.b, C.doButtonOnClicked, nil)
+
+ b.ControlBase = NewControlBase(b, uintptr(unsafe.Pointer(b.b)))
+ return b
+}
+
+// Text returns the Button's text.
+func (b *Button) Text() string {
+ ctext := C.uiButtonText(b.b)
+ text := C.GoString(ctext)
+ C.uiFreeText(ctext)
+ return text
+}
+
+// SetText sets the Button's text to text.
+func (b *Button) SetText(text string) {
+ ctext := C.CString(text)
+ C.uiButtonSetText(b.b, ctext)
+ freestr(ctext)
+}
+
+// OnClicked registers f to be run when the user clicks the Button.
+// Only one function can be registered at a time.
+func (b *Button) OnClicked(f func(*Button)) {
+ b.onClicked = f
+}
+
+//export doButtonOnClicked
+func doButtonOnClicked(bb *C.uiButton, data unsafe.Pointer) {
+ b := ControlFromLibui(uintptr(unsafe.Pointer(bb))).(*Button)
+ if b.onClicked != nil {
+ b.onClicked(b)
+ }
+}