ui/cocoa/button.m

changeset 1099
a5057a367c8f
parent 1084
cce6dad72164
equal deleted inserted replaced
1098:1f45788e0bac 1099:a5057a367c8f
28 28
29 #import "button.h" 29 #import "button.h"
30 #import "EventData.h" 30 #import "EventData.h"
31 #import "container.h" 31 #import "container.h"
32 #import "image.h" 32 #import "image.h"
33 #import "action.h"
33 #import <objc/runtime.h> 34 #import <objc/runtime.h>
34 35
35 #import <cx/buffer.h> 36 #import <cx/buffer.h>
36 #import <cx/json.h> 37 #import <cx/json.h>
37 38
45 if(args->icon) { 46 if(args->icon) {
46 button.image = ui_cocoa_named_icon(args->icon);; 47 button.image = ui_cocoa_named_icon(args->icon);;
47 } 48 }
48 49
49 if(args->onclick) { 50 if(args->onclick) {
50 EventData *event = [[EventData alloc] init:args->onclick userdata:args->onclickdata]; 51 EventData *event = [[EventData alloc] init:args->onclick userdata:args->onclickdata action:args->action];
51 event.obj = obj; 52 event.obj = obj;
52 button.target = event; 53 button.target = event;
53 button.action = @selector(handleEvent:); 54 button.action = @selector(handleEvent:);
54 objc_setAssociatedObject(button, "eventdata", event, OBJC_ASSOCIATION_RETAIN); 55 objc_setAssociatedObject(button, "eventdata", event, OBJC_ASSOCIATION_RETAIN);
55 } 56 }
86 i->obj = (__bridge void*)button; 87 i->obj = (__bridge void*)button;
87 i->get = ui_togglebutton_get; 88 i->get = ui_togglebutton_get;
88 i->set = ui_togglebutton_set; 89 i->set = ui_togglebutton_set;
89 } 90 }
90 91
91 if(args->onchange) { 92 if(args->onchange || args->action) {
92 EventData *event = [[EventData alloc] init:args->onchange userdata:args->onchangedata]; 93 EventData *event = [[EventData alloc] init:args->onchange userdata:args->onchangedata action:args->action];
93 event.get_eventdata = togglebutton_eventdata; 94 event.get_eventdata = togglebutton_eventdata;
94 event.obj = obj; 95 event.obj = obj;
95 event.var = var; 96 event.var = var;
96 event.vartype = UI_VAR_INTEGER; 97 event.vartype = UI_VAR_INTEGER;
97 button.target = event; 98 button.target = event;
98 button.action = @selector(handleEventWithEventData:); 99 button.action = @selector(handleEventWithEventData:);
99 objc_setAssociatedObject(button, "eventdata", event, OBJC_ASSOCIATION_RETAIN); 100 objc_setAssociatedObject(button, "eventdata", event, OBJC_ASSOCIATION_RETAIN);
101
102 ui_cocoa_view_bind_action(obj->ctx, button, args->action);
100 } 103 }
101 104
102 UiLayout layout = UI_INIT_LAYOUT(args); 105 UiLayout layout = UI_INIT_LAYOUT(args);
103 ui_container_add(obj, button, &layout); 106 ui_container_add(obj, button, &layout);
104 107
147 i->obj = (__bridge void*)button; 150 i->obj = (__bridge void*)button;
148 i->get = ui_switch_get; 151 i->get = ui_switch_get;
149 i->set = ui_switch_set; 152 i->set = ui_switch_set;
150 } 153 }
151 154
152 if(args->onchange) { 155 if(args->onchange || args->action) {
153 EventData *event = [[EventData alloc] init:args->onchange userdata:args->onchangedata]; 156 EventData *event = [[EventData alloc] init:args->onchange userdata:args->onchangedata action:args->action];
154 event.get_eventdata = switch_eventdata; 157 event.get_eventdata = switch_eventdata;
155 event.obj = obj; 158 event.obj = obj;
156 event.var = var; 159 event.var = var;
157 event.vartype = UI_VAR_INTEGER; 160 event.vartype = UI_VAR_INTEGER;
158 button.target = event; 161 button.target = event;
159 button.action = @selector(handleEventWithEventData:); 162 button.action = @selector(handleEventWithEventData:);
160 objc_setAssociatedObject(button, "eventdata", event, OBJC_ASSOCIATION_RETAIN); 163 objc_setAssociatedObject(button, "eventdata", event, OBJC_ASSOCIATION_RETAIN);
164 ui_cocoa_view_bind_action(obj->ctx, button, args->action);
161 } 165 }
162 166
163 UiLayout layout = UI_INIT_LAYOUT(args); 167 UiLayout layout = UI_INIT_LAYOUT(args);
164 ui_container_add(obj, button, &layout); 168 ui_container_add(obj, button, &layout);
165 169
236 } 240 }
237 [buttons addObject:button]; 241 [buttons addObject:button];
238 objc_setAssociatedObject(button, "radiogroup", buttons, OBJC_ASSOCIATION_RETAIN); 242 objc_setAssociatedObject(button, "radiogroup", buttons, OBJC_ASSOCIATION_RETAIN);
239 } 243 }
240 244
241 if(args->onchange || var) { 245 if(args->onchange || args->action || var) {
242 EventData *event = [[EventData alloc] init:args->onchange userdata:args->onchangedata]; 246 EventData *event = [[EventData alloc] init:args->onchange userdata:args->onchangedata action:args->action];
243 event.get_eventdata = radiobutton_eventdata; 247 event.get_eventdata = radiobutton_eventdata;
244 event.obj = obj; 248 event.obj = obj;
245 event.var = var; 249 event.var = var;
246 event.vartype = UI_VAR_INTEGER; 250 event.vartype = UI_VAR_INTEGER;
247 button.target = event; 251 button.target = event;
248 252
249
250 button.action = @selector(handleEventWithEventData:); 253 button.action = @selector(handleEventWithEventData:);
251 254
252 objc_setAssociatedObject(button, "eventdata", event, OBJC_ASSOCIATION_RETAIN); 255 objc_setAssociatedObject(button, "eventdata", event, OBJC_ASSOCIATION_RETAIN);
256
257 ui_cocoa_view_bind_action(obj->ctx, button, args->action);
253 } 258 }
254 259
255 UiLayout layout = UI_INIT_LAYOUT(args); 260 UiLayout layout = UI_INIT_LAYOUT(args);
256 ui_container_add(obj, button, &layout); 261 ui_container_add(obj, button, &layout);
257 262

mercurial