summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--redo/basicctrls_darwin.m16
-rw-r--r--redo/objc_darwin.h1
-rw-r--r--redo/textfield_darwin.go25
3 files changed, 38 insertions, 4 deletions
diff --git a/redo/basicctrls_darwin.m b/redo/basicctrls_darwin.m
index 5e0ece5..8e16eb1 100644
--- a/redo/basicctrls_darwin.m
+++ b/redo/basicctrls_darwin.m
@@ -9,7 +9,7 @@
#define toNSView(x) ((NSView *) (x))
#define toNSBox(x) ((NSBox *) (x))
-@interface goControlDelegate : NSObject {
+@interface goControlDelegate : NSObject <NSTextFieldDelegate> {
@public
void *gocontrol;
}
@@ -27,6 +27,11 @@
checkboxToggled(self->gocontrol);
}
+- (void)controlTextDidChange:(NSNotification *)note
+{
+ textfieldChanged(self->gocontrol);
+}
+
@end
id newButton(void)
@@ -136,6 +141,15 @@ id newPasswordField(void)
return finishNewTextField(toNSTextField(t), YES);
}
+void textfieldSetDelegate(id textfield, void *t)
+{
+ goControlDelegate *d;
+
+ d = [goControlDelegate new];
+ d->gocontrol = t;
+ [toNSTextField(textfield) setDelegate:d];
+}
+
// also good for labels
const char *textFieldText(id t)
{
diff --git a/redo/objc_darwin.h b/redo/objc_darwin.h
index f3b7e70..dca8894 100644
--- a/redo/objc_darwin.h
+++ b/redo/objc_darwin.h
@@ -68,6 +68,7 @@ extern BOOL checkboxChecked(id);
extern void checkboxSetChecked(id, BOOL);
extern id newTextField(void);
extern id newPasswordField(void);
+extern void textfieldSetDelegate(id, void *);
extern const char *textFieldText(id);
extern void textFieldSetText(id, char *);
extern id newLabel(void);
diff --git a/redo/textfield_darwin.go b/redo/textfield_darwin.go
index 22a97cf..3ea3997 100644
--- a/redo/textfield_darwin.go
+++ b/redo/textfield_darwin.go
@@ -10,13 +10,17 @@ import (
import "C"
type textfield struct {
- _id C.id
+ _id C.id
+ changed *event
}
func newTextField() *textfield {
- return &textfield{
- _id: C.newTextField(),
+ t := &textfield{
+ _id: C.newTextField(),
+ changed: newEvent(),
}
+ C.textfieldSetDelegate(t._id, unsafe.Pointer(t))
+ return t
}
func newPasswordField() *textfield {
@@ -35,6 +39,21 @@ func (t *textfield) SetText(text string) {
C.textFieldSetText(t._id, ctext)
}
+func (t *textfield) OnChanged(f func()) {
+ t.changed.set(f)
+}
+
+func (t *textfield) Invalid(reason string) {
+ // TODO
+}
+
+//export textfieldChanged
+func textfieldChanged(data unsafe.Pointer) {
+ t := (*textfield)(data)
+println("changed")
+ t.changed.fire()
+}
+
func (t *textfield) id() C.id {
return t._id
}