summaryrefslogtreecommitdiff
path: root/BBB_GOFILES/multilineentry.go
diff options
context:
space:
mode:
Diffstat (limited to 'BBB_GOFILES/multilineentry.go')
-rw-r--r--BBB_GOFILES/multilineentry.go97
1 files changed, 97 insertions, 0 deletions
diff --git a/BBB_GOFILES/multilineentry.go b/BBB_GOFILES/multilineentry.go
new file mode 100644
index 0000000..88a75c4
--- /dev/null
+++ b/BBB_GOFILES/multilineentry.go
@@ -0,0 +1,97 @@
+// 12 december 2015
+
+// TODO typing in entry in OS X crashes libui
+// I've had similar issues with checkboxes on libui
+// something's wrong with NSMapTable
+
+package ui
+
+import (
+ "unsafe"
+)
+
+// #include "ui.h"
+// extern void doMultilineEntryOnChanged(uiMultilineEntry *, void *);
+// // see golang/go#19835
+// typedef void (*multilineEntryCallback)(uiMultilineEntry *, void *);
+import "C"
+
+// MultilineEntry is a Control that represents a space that the user
+// can type multiple lines of text into.
+type MultilineEntry struct {
+ ControlBase
+ e *C.uiMultilineEntry
+ onChanged func(*MultilineEntry)
+}
+
+func finishNewMultilineEntry(ee *C.uiMultilineEntry) *MultilineEntry {
+ m := new(MultilineEntry)
+
+ m.e = ee
+
+ C.uiMultilineEntryOnChanged(m.e, C.multilineEntryCallback(C.doMultilineEntryOnChanged), nil)
+
+ m.ControlBase = NewControlBase(m, uintptr(unsafe.Pointer(m.e)))
+ return m
+}
+
+// NewMultilineEntry creates a new MultilineEntry.
+// The MultilineEntry soft-word-wraps and has no horizontal
+// scrollbar.
+func NewMultilineEntry() *MultilineEntry {
+ return finishNewMultilineEntry(C.uiNewMultilineEntry())
+}
+
+// NewNonWrappingMultilineEntry creates a new MultilineEntry.
+// The MultilineEntry does not word-wrap and thus has horizontal
+// scrollbar.
+func NewNonWrappingMultilineEntry() *MultilineEntry {
+ return finishNewMultilineEntry(C.uiNewNonWrappingMultilineEntry())
+}
+
+// Text returns the MultilineEntry's text.
+func (m *MultilineEntry) Text() string {
+ ctext := C.uiMultilineEntryText(m.e)
+ text := C.GoString(ctext)
+ C.uiFreeText(ctext)
+ return text
+}
+
+// SetText sets the MultilineEntry's text to text.
+func (m *MultilineEntry) SetText(text string) {
+ ctext := C.CString(text)
+ C.uiMultilineEntrySetText(m.e, ctext)
+ freestr(ctext)
+}
+
+// Append adds text to the end of the MultilineEntry's text.
+// TODO selection and scroll behavior
+func (m *MultilineEntry) Append(text string) {
+ ctext := C.CString(text)
+ C.uiMultilineEntryAppend(m.e, ctext)
+ freestr(ctext)
+}
+
+// OnChanged registers f to be run when the user makes a change to
+// the MultilineEntry. Only one function can be registered at a time.
+func (m *MultilineEntry) OnChanged(f func(*MultilineEntry)) {
+ m.onChanged = f
+}
+
+//export doMultilineEntryOnChanged
+func doMultilineEntryOnChanged(ee *C.uiMultilineEntry, data unsafe.Pointer) {
+ m := ControlFromLibui(uintptr(unsafe.Pointer(ee))).(*MultilineEntry)
+ if m.onChanged != nil {
+ m.onChanged(m)
+ }
+}
+
+// ReadOnly returns whether the MultilineEntry can be changed.
+func (m *MultilineEntry) ReadOnly() bool {
+ return tobool(C.uiMultilineEntryReadOnly(m.e))
+}
+
+// SetReadOnly sets whether the MultilineEntry can be changed.
+func (m *MultilineEntry) SetReadOnly(ro bool) {
+ C.uiMultilineEntrySetReadOnly(m.e, frombool(ro))
+}