summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPietro Gagliardi <[email protected]>2015-12-12 16:44:32 -0500
committerPietro Gagliardi <[email protected]>2015-12-12 16:44:32 -0500
commit302bd0313c55d32929bc6013929257ca388228d6 (patch)
treecc9b4c18952880392c127a1b2f7bd825a5ab91e7
parenta881849d8a21fe627fb7156e41499c74be1ac945 (diff)
Added Entry.
-rw-r--r--entry.go121
-rw-r--r--zz_test.go9
2 files changed, 126 insertions, 4 deletions
diff --git a/entry.go b/entry.go
new file mode 100644
index 0000000..b2418b5
--- /dev/null
+++ b/entry.go
@@ -0,0 +1,121 @@
+// 12 december 2015
+
+package ui
+
+import (
+ "unsafe"
+)
+
+// #include "ui.h"
+// extern void doEntryOnChanged(uiEntry *, void *);
+// static inline void realuiEntryOnChanged(uiEntry *b)
+// {
+// uiEntryOnChanged(b, doEntryOnChanged, NULL);
+// }
+import "C"
+
+// no need to lock this; only the GUI thread can access it
+var entries = make(map[*C.uiEntry]*Entry)
+
+// Entry is a Control that represents a space that the user can
+// type a single line of text into.
+type Entry struct {
+ c *C.uiControl
+ e *C.uiEntry
+
+ onChanged func(*Entry)
+}
+
+// NewEntry creates a new Entry.
+func NewEntry() *Entry {
+ e := new(Entry)
+
+ e.e = C.uiNewEntry()
+ e.c = (*C.uiControl)(unsafe.Pointer(e.e))
+
+ C.realuiEntryOnChanged(e.e)
+ entries[e.e] = e
+
+ return e
+}
+
+// Destroy destroys the Entry.
+func (e *Entry) Destroy() {
+ delete(entries, 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 *Entry) LibuiControl() uintptr {
+ return uintptr(unsafe.Pointer(e.c))
+}
+
+// Handle returns the OS-level handle associated with this Entry.
+// On Windows this is an HWND of a standard Windows API EDIT
+// class (as provided by Common Controls version 6).
+// On GTK+ this is a pointer to a GtkEntry.
+// On OS X this is a pointer to a NSTextField.
+func (e *Entry) Handle() uintptr {
+ return uintptr(C.uiControlHandle(e.c))
+}
+
+// Show shows the Entry.
+func (e *Entry) Show() {
+ C.uiControlShow(e.c)
+}
+
+// Hide hides the Entry.
+func (e *Entry) Hide() {
+ C.uiControlHide(e.c)
+}
+
+// Enable enables the Entry.
+func (e *Entry) Enable() {
+ C.uiControlEnable(e.c)
+}
+
+// Disable disables the Entry.
+func (e *Entry) Disable() {
+ C.uiControlDisable(e.c)
+}
+
+// Text returns the Entry's text.
+func (e *Entry) Text() string {
+ ctext := C.uiEntryText(e.e)
+ text := C.GoString(ctext)
+ C.uiFreeText(ctext)
+ return text
+}
+
+// SetText sets the Entry's text to text.
+func (e *Entry) SetText(text string) {
+ ctext := C.CString(text)
+ C.uiEntrySetText(e.e, ctext)
+ freestr(ctext)
+}
+
+// OnChanged registers f to be run when the user makes a change to
+// the Entry. Only one function can be registered at a time.
+func (e *Entry) OnChanged(f func(*Entry)) {
+ e.onChanged = f
+}
+
+//export doEntryOnChanged
+func doEntryOnChanged(ee *C.uiEntry, data unsafe.Pointer) {
+ e := entries[ee]
+ if e.onChanged != nil {
+ e.onChanged(e)
+ }
+}
+
+// ReadOnly returns whether the Entry can be changed.
+func (e *Entry) ReadOnly() bool {
+ return tobool(C.uiEntryReadOnly(e.e))
+}
+
+// SetReadOnly sets whether the Entry can be changed.
+func (e *Entry) SetReadOnly(ro bool) {
+ C.uiEntrySetReadOnly(e.e, frombool(ro))
+}
diff --git a/zz_test.go b/zz_test.go
index 6caf95f..d35ba1a 100644
--- a/zz_test.go
+++ b/zz_test.go
@@ -11,10 +11,11 @@ func TestIt(t *testing.T) {
Quit()
return true
})
- c := NewEditableCombobox()
- c.Append("Item 1")
- c.Append("Item 2")
- w.SetChild(c)
+ e := NewEntry()
+ e.OnChanged(func(*Entry) {
+ w.SetTitle(e.Text())
+ })
+ w.SetChild(e)
w.Show()
})
if err != nil {