Added button click events to the Mac OS X backend.
This commit is contained in:
parent
659bc03f17
commit
e4b379f84a
|
@ -47,6 +47,7 @@ func (w *widgetbase) parent(win *window) {
|
|||
|
||||
type button struct {
|
||||
*widgetbase
|
||||
clicked *event
|
||||
}
|
||||
|
||||
func newButton(text string) *Request {
|
||||
|
@ -55,17 +56,33 @@ func newButton(text string) *Request {
|
|||
op: func() {
|
||||
ctext := C.CString(text)
|
||||
defer C.free(unsafe.Pointer(ctext))
|
||||
c <- &button{
|
||||
b := &button{
|
||||
widgetbase: newWidget(C.newButton(ctext)),
|
||||
clicked: newEvent(),
|
||||
}
|
||||
C.buttonSetDelegate(b.id, unsafe.Pointer(b))
|
||||
c <- b
|
||||
},
|
||||
resp: c,
|
||||
}
|
||||
}
|
||||
|
||||
func (b *button) OnClicked(e func(c Doer)) *Request {
|
||||
// TODO
|
||||
return nil
|
||||
c := make(chan interface{})
|
||||
return &Request{
|
||||
op: func() {
|
||||
b.clicked.set(e)
|
||||
c <- struct{}{}
|
||||
},
|
||||
resp: c,
|
||||
}
|
||||
}
|
||||
|
||||
//export buttonClicked
|
||||
func buttonClicked(xb unsafe.Pointer) {
|
||||
b := (*button)(unsafe.Pointer(xb))
|
||||
b.clicked.fire()
|
||||
println("button clicked")
|
||||
}
|
||||
|
||||
func (b *button) Text() *Request {
|
||||
|
|
|
@ -22,6 +22,21 @@ void parent(id control, id parentid, BOOL floating)
|
|||
[toNSView(control) release];
|
||||
}
|
||||
|
||||
@interface goControlDelegate : NSObject {
|
||||
@public
|
||||
void *gocontrol;
|
||||
}
|
||||
@end
|
||||
|
||||
@implementation goControlDelegate
|
||||
|
||||
- (IBAction)buttonClicked:(id)sender
|
||||
{
|
||||
buttonClicked(self->gocontrol);
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
id newButton(char *text)
|
||||
{
|
||||
NSButton *b;
|
||||
|
@ -36,6 +51,16 @@ id newButton(char *text)
|
|||
return b;
|
||||
}
|
||||
|
||||
void buttonSetDelegate(id button, void *b)
|
||||
{
|
||||
goControlDelegate *d;
|
||||
|
||||
d = [goControlDelegate new];
|
||||
d->gocontrol = b;
|
||||
[toNSButton(button) setTarget:d];
|
||||
[toNSButton(button) setAction:@selector(buttonClicked:)];
|
||||
}
|
||||
|
||||
const char *buttonText(id button)
|
||||
{
|
||||
return [[toNSButton(button) title] UTF8String];
|
||||
|
|
|
@ -30,6 +30,7 @@ extern void windowClose(id);
|
|||
extern void unparent(id);
|
||||
extern void parent(id, id, BOOL);
|
||||
extern id newButton(char *);
|
||||
extern void buttonSetDelegate(id, void *);
|
||||
extern const char *buttonText(id);
|
||||
extern void buttonSetText(id, char *);
|
||||
|
||||
|
|
|
@ -20,6 +20,9 @@ func init() {
|
|||
done <- struct{}{}
|
||||
return true
|
||||
}))
|
||||
Wait(Do, b.OnClicked(func(c Doer) {
|
||||
println("in OnClicked()")
|
||||
}))
|
||||
Wait(Do, w.Show())
|
||||
<-done
|
||||
}()
|
||||
|
|
Loading…
Reference in New Issue