Added MultilineEntry.
This commit is contained in:
parent
82818a0a13
commit
334280a11f
|
@ -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))
|
||||
}
|
|
@ -27,6 +27,7 @@ func makeBasicControlsPage() ui.Control {
|
|||
group.SetMargined(true)
|
||||
vbox.Append(group, true)
|
||||
|
||||
group.SetChild(ui.NewNonWrappingMultilineEntry())
|
||||
/*
|
||||
entryForm = uiNewForm();
|
||||
uiFormSetPadded(entryForm, 1);
|
||||
|
|
Loading…
Reference in New Issue