ui/cocoa/button.m

changeset 603
8d2b7b934230
parent 568
797b73c2c883
child 718
06eec75a6fd5
equal deleted inserted replaced
602:9f3ff50da302 603:8d2b7b934230
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 <objc/runtime.h> 32 #import <objc/runtime.h>
33 33
34 UIWIDGET ui_button_create(UiObject* obj, UiButtonArgs args) { 34 UIWIDGET ui_button_create(UiObject* obj, UiButtonArgs *args) {
35 NSButton *button = [[NSButton alloc] init]; 35 NSButton *button = [[NSButton alloc] init];
36 if(args.label) { 36 if(args->label) {
37 NSString *label = [[NSString alloc] initWithUTF8String:args.label]; 37 NSString *label = [[NSString alloc] initWithUTF8String:args->label];
38 button.title = label; 38 button.title = label;
39 } 39 }
40 40
41 if(args.onclick) { 41 if(args->onclick) {
42 EventData *event = [[EventData alloc] init:args.onclick userdata:args.onclickdata]; 42 EventData *event = [[EventData alloc] init:args->onclick userdata:args->onclickdata];
43 event.obj = obj; 43 event.obj = obj;
44 button.target = event; 44 button.target = event;
45 button.action = @selector(handleEvent:); 45 button.action = @selector(handleEvent:);
46 objc_setAssociatedObject(button, "eventdata", event, OBJC_ASSOCIATION_RETAIN); 46 objc_setAssociatedObject(button, "eventdata", event, OBJC_ASSOCIATION_RETAIN);
47 } 47 }
57 NSButton *btn = (NSButton*)button; 57 NSButton *btn = (NSButton*)button;
58 NSControlStateValue state = btn.state; 58 NSControlStateValue state = btn.state;
59 *value = (int)state; 59 *value = (int)state;
60 } 60 }
61 61
62 UIWIDGET togglebutton_create(UiObject* obj, UiToggleArgs args, enum NSButtonType type) { 62 UIWIDGET togglebutton_create(UiObject* obj, UiToggleArgs *args, enum NSButtonType type) {
63 NSButton *button = [[NSButton alloc] init]; 63 NSButton *button = [[NSButton alloc] init];
64 [button setButtonType:type]; 64 [button setButtonType:type];
65 //[button setAllowsMixedState:YES]; 65 //[button setAllowsMixedState:YES];
66 66
67 if(args.label) { 67 if(args->label) {
68 NSString *label = [[NSString alloc] initWithUTF8String:args.label]; 68 NSString *label = [[NSString alloc] initWithUTF8String:args->label];
69 button.title = label; 69 button.title = label;
70 } 70 }
71 71
72 UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args.value, args.varname, UI_VAR_INTEGER); 72 UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname, UI_VAR_INTEGER);
73 if(var) { 73 if(var) {
74 UiInteger *i = var->value; 74 UiInteger *i = var->value;
75 i->obj = (__bridge void*)button; 75 i->obj = (__bridge void*)button;
76 i->get = ui_togglebutton_get; 76 i->get = ui_togglebutton_get;
77 i->set = ui_togglebutton_set; 77 i->set = ui_togglebutton_set;
78 } 78 }
79 79
80 if(args.onchange) { 80 if(args->onchange) {
81 EventData *event = [[EventData alloc] init:args.onchange userdata:args.onchangedata]; 81 EventData *event = [[EventData alloc] init:args->onchange userdata:args->onchangedata];
82 event.get_eventdata = togglebutton_eventdata; 82 event.get_eventdata = togglebutton_eventdata;
83 event.obj = obj; 83 event.obj = obj;
84 event.var = var; 84 event.var = var;
85 event.vartype = UI_VAR_INTEGER; 85 event.vartype = UI_VAR_INTEGER;
86 button.target = event; 86 button.target = event;
111 } 111 }
112 i->value = (int64_t)state; 112 i->value = (int64_t)state;
113 button.state = state; 113 button.state = state;
114 } 114 }
115 115
116 UIWIDGET ui_togglebutton_create(UiObject* obj, UiToggleArgs args) { 116 UIWIDGET ui_togglebutton_create(UiObject* obj, UiToggleArgs *args) {
117 return togglebutton_create(obj, args, NSButtonTypePushOnPushOff); 117 return togglebutton_create(obj, args, NSButtonTypePushOnPushOff);
118 } 118 }
119 119
120 UIWIDGET ui_checkbox_create(UiObject* obj, UiToggleArgs args) { 120 UIWIDGET ui_checkbox_create(UiObject* obj, UiToggleArgs *args) {
121 return togglebutton_create(obj, args, NSButtonTypeSwitch); 121 return togglebutton_create(obj, args, NSButtonTypeSwitch);
122 } 122 }
123 123
124 static void switch_eventdata(id button, UiVar *var, void **eventdata, int *value) { 124 static void switch_eventdata(id button, UiVar *var, void **eventdata, int *value) {
125 NSSwitch *btn = (NSSwitch*)button; 125 NSSwitch *btn = (NSSwitch*)button;
126 NSControlStateValue state = btn.state; 126 NSControlStateValue state = btn.state;
127 *value = (int)state; 127 *value = (int)state;
128 } 128 }
129 129
130 UIWIDGET ui_switch_create(UiObject* obj, UiToggleArgs args) { 130 UIWIDGET ui_switch_create(UiObject* obj, UiToggleArgs *args) {
131 NSSwitch *button = [[NSSwitch alloc] init]; 131 NSSwitch *button = [[NSSwitch alloc] init];
132 132
133 UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args.value, args.varname, UI_VAR_INTEGER); 133 UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname, UI_VAR_INTEGER);
134 if(var) { 134 if(var) {
135 UiInteger *i = var->value; 135 UiInteger *i = var->value;
136 i->obj = (__bridge void*)button; 136 i->obj = (__bridge void*)button;
137 i->get = ui_switch_get; 137 i->get = ui_switch_get;
138 i->set = ui_switch_set; 138 i->set = ui_switch_set;
139 } 139 }
140 140
141 if(args.onchange) { 141 if(args->onchange) {
142 EventData *event = [[EventData alloc] init:args.onchange userdata:args.onchangedata]; 142 EventData *event = [[EventData alloc] init:args->onchange userdata:args->onchangedata];
143 event.get_eventdata = switch_eventdata; 143 event.get_eventdata = switch_eventdata;
144 event.obj = obj; 144 event.obj = obj;
145 event.var = var; 145 event.var = var;
146 event.vartype = UI_VAR_INTEGER; 146 event.vartype = UI_VAR_INTEGER;
147 button.target = event; 147 button.target = event;
202 } 202 }
203 } 203 }
204 } 204 }
205 } 205 }
206 206
207 UIWIDGET ui_radiobutton_create(UiObject* obj, UiToggleArgs args) { 207 UIWIDGET ui_radiobutton_create(UiObject* obj, UiToggleArgs *args) {
208 UiRadioButton *button = [[UiRadioButton alloc] init]; 208 UiRadioButton *button = [[UiRadioButton alloc] init];
209 209
210 if(args.label) { 210 if(args->label) {
211 button.title = [[NSString alloc] initWithUTF8String:args.label]; 211 button.title = [[NSString alloc] initWithUTF8String:args->label];
212 } 212 }
213 213
214 UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args.value, args.varname, UI_VAR_INTEGER); 214 UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname, UI_VAR_INTEGER);
215 button.var = var; 215 button.var = var;
216 NSMutableArray *buttons = nil; 216 NSMutableArray *buttons = nil;
217 if(var) { 217 if(var) {
218 UiInteger *i = var->value; 218 UiInteger *i = var->value;
219 buttons = (__bridge NSMutableArray*)i->obj; 219 buttons = (__bridge NSMutableArray*)i->obj;
225 } 225 }
226 [buttons addObject:button]; 226 [buttons addObject:button];
227 objc_setAssociatedObject(button, "radiogroup", buttons, OBJC_ASSOCIATION_RETAIN); 227 objc_setAssociatedObject(button, "radiogroup", buttons, OBJC_ASSOCIATION_RETAIN);
228 } 228 }
229 229
230 if(args.onchange || var) { 230 if(args->onchange || var) {
231 EventData *event = [[EventData alloc] init:args.onchange userdata:args.onchangedata]; 231 EventData *event = [[EventData alloc] init:args->onchange userdata:args->onchangedata];
232 event.get_eventdata = radiobutton_eventdata; 232 event.get_eventdata = radiobutton_eventdata;
233 event.obj = obj; 233 event.obj = obj;
234 event.var = var; 234 event.var = var;
235 event.vartype = UI_VAR_INTEGER; 235 event.vartype = UI_VAR_INTEGER;
236 button.target = event; 236 button.target = event;

mercurial