summaryrefslogtreecommitdiff
path: root/redo
diff options
context:
space:
mode:
authorPietro Gagliardi <[email protected]>2014-08-20 01:08:24 -0400
committerPietro Gagliardi <[email protected]>2014-08-20 01:08:24 -0400
commit5f830deec8374336d1d268a27e41f5ec492c866c (patch)
treea1df8752d48e692aead5ab9162856efe64cb4dfd /redo
parentd07230e55e6c1b001cd09e03816710e66a34e7f4 (diff)
Added events and validity methods to TextField and implemented the events on the GTK+ backend.
Diffstat (limited to 'redo')
-rw-r--r--redo/basicctrls.go9
-rw-r--r--redo/textfield_unix.go28
2 files changed, 34 insertions, 3 deletions
diff --git a/redo/basicctrls.go b/redo/basicctrls.go
index 8894e7c..cee60f2 100644
--- a/redo/basicctrls.go
+++ b/redo/basicctrls.go
@@ -48,6 +48,15 @@ type TextField interface {
// Text and SetText are Requests that get and set the TextField's text.
Text() string
SetText(text string)
+
+ // OnChanged is triggered when the text in a TextField is changed somehow.
+ // Do not bother trying to figure out how the text was changed; instead, perform your validation and use Invalid to inform the user that the entered text is invalid instead.
+ OnChanged(func())
+
+ // Invalid throws a non-modal alert (whose nature is system-defined) on or near the TextField that alerts the user that input is invalid.
+ // The string passed to Invalid will be displayed to the user to inform them of what specifically is wrong with the input.
+ // Pass an empty string to remove the warning.
+ Invalid(reason string)
}
// NewTextField creates a new TextField.
diff --git a/redo/textfield_unix.go b/redo/textfield_unix.go
index e802947..c4ce8b4 100644
--- a/redo/textfield_unix.go
+++ b/redo/textfield_unix.go
@@ -9,21 +9,28 @@ import (
)
// #include "gtk_unix.h"
-// extern void buttonClicked(GtkButton *, gpointer);
-// extern void checkboxToggled(GtkToggleButton *, gpointer);
+// extern void textfieldChanged(GtkEditable *, gpointer);
import "C"
type textfield struct {
_widget *C.GtkWidget
entry *C.GtkEntry
+ changed *event
}
func startNewTextField() *textfield {
widget := C.gtk_entry_new()
- return &textfield{
+ t := &textfield{
_widget: widget,
entry: (*C.GtkEntry)(unsafe.Pointer(widget)),
+ changed: newEvent(),
}
+ g_signal_connect(
+ C.gpointer(unsafe.Pointer(t._widget)),
+ "changed",
+ C.GCallback(C.textfieldChanged),
+ C.gpointer(unsafe.Pointer(t)))
+ return t
}
func newTextField() *textfield {
@@ -46,6 +53,21 @@ func (t *textfield) SetText(text string) {
C.gtk_entry_set_text(t.entry, ctext)
}
+func (t *textfield) OnChanged(f func()) {
+ t.changed.set(f)
+}
+
+func (t *textfield) Invalid(reason string) {
+ // TODO
+}
+
+//export textfieldChanged
+func textfieldChanged(editable *C.GtkEditable, data C.gpointer) {
+ t := (*textfield)(unsafe.Pointer(data))
+println("changed")
+ t.changed.fire()
+}
+
func (t *textfield) widget() *C.GtkWidget {
return t._widget
}