MultilineEntry added

This commit is contained in:
Jan Kusniar 2016-06-21 14:26:28 +02:00
parent 2dde2a79e7
commit 63d16cdb0f
1 changed files with 137 additions and 0 deletions

137
multilineentry.go Normal file
View File

@ -0,0 +1,137 @@
// multiline entry
package ui
import (
"unsafe"
)
// #include "ui.h"
// extern void doMultilineEntryOnChanged(uiMultilineEntry*, void *);
// static inline void realuiMultilineEntryOnChanged(uiMultilineEntry *e)
// {
// uiMultilineEntryOnChanged(e, doMultilineEntryOnChanged, NULL);
// }
import "C"
// no need to lock this; only the GUI thread can access it
var mEntries = make(map[*C.uiMultilineEntry]*MultilineEntry)
// MultilineEntry is a Control that represents a space that the user can
// type multiple lines of text into.
type MultilineEntry struct {
c *C.uiControl
e *C.uiMultilineEntry
onChanged func(*MultilineEntry)
}
// NewMultilineEntry creates a new MultilineEntry.
func NewMultilineEntry() *MultilineEntry {
e := new(MultilineEntry)
e.e = C.uiNewMultilineEntry()
e.c = (*C.uiControl)(unsafe.Pointer(e.e))
C.realuiMultilineEntryOnChanged(e.e)
mEntries[e.e] = e
return e
}
// NewMultilineNonWrappingEntry creates a new MultilineEntry.
func NewMultilineNonWrappingEntry() *MultilineEntry {
e := new(MultilineEntry)
e.e = C.uiNewNonWrappingMultilineEntry()
e.c = (*C.uiControl)(unsafe.Pointer(e.e))
C.realuiMultilineEntryOnChanged(e.e)
mEntries[e.e] = e
return e
}
// Destroy destroys the MultilineEntry.
func (e *MultilineEntry) Destroy() {
delete(mEntries, e.e)
C.uiControlDestroy(e.c)
}
// LibuiControl returns the libui uiControl pointer that backs
// the Window. This is only used by package ui itself and should
// not be called by programs.
func (e *MultilineEntry) LibuiControl() uintptr {
return uintptr(unsafe.Pointer(e.c))
}
// Handle returns the OS-level handle associated with this MultilineEntry.
func (e *MultilineEntry) Handle() uintptr {
return uintptr(C.uiControlHandle(e.c))
}
// Show shows the MultilineEntry.
func (e *MultilineEntry) Show() {
C.uiControlShow(e.c)
}
// Hide hides the MultilineEntry.
func (e *MultilineEntry) Hide() {
C.uiControlHide(e.c)
}
// Enable enables the MultilineEntry.
func (e *MultilineEntry) Enable() {
C.uiControlEnable(e.c)
}
// Disable disables the MultilineEntry.
func (e *MultilineEntry) Disable() {
C.uiControlDisable(e.c)
}
// Text returns the MultilineEntry's text.
func (e *MultilineEntry) Text() string {
ctext := C.uiMultilineEntryText(e.e)
text := C.GoString(ctext)
C.uiFreeText(ctext)
return text
}
// SetText sets the MultilineEntry's text to text.
func (e *MultilineEntry) SetText(text string) {
ctext := C.CString(text)
C.uiMultilineEntrySetText(e.e, ctext)
freestr(ctext)
}
// Append text to the MultilineEntry's text.
func (e *MultilineEntry) Append(text string) {
ctext := C.CString(text)
C.uiMultilineEntryAppend(e.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 (e *MultilineEntry) OnChanged(f func(*MultilineEntry)) {
e.onChanged = f
}
//export doMultilineEntryOnChanged
func doMultilineEntryOnChanged(ee *C.uiMultilineEntry, data unsafe.Pointer) {
e := mEntries[ee]
if e.onChanged != nil {
e.onChanged(e)
}
}
// ReadOnly returns whether the MultilineEntry can be changed.
func (e *MultilineEntry) ReadOnly() bool {
return tobool(C.uiMultilineEntryReadOnly(e.e))
}
// SetReadOnly sets whether the MultilineEntry can be changed.
func (e *MultilineEntry) SetReadOnly(ro bool) {
C.uiMultilineEntrySetReadOnly(e.e, frombool(ro))
}