Added events and validity methods to TextField and implemented the events on the GTK+ backend.

This commit is contained in:
Pietro Gagliardi 2014-08-20 01:08:24 -04:00
parent d07230e55e
commit 5f830deec8
2 changed files with 34 additions and 3 deletions

View File

@ -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.

View File

@ -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
}