ui/cocoa/button.m

changeset 564
5c08f99b2a09
parent 562
88ed463e5433
child 566
0e0e9035c6c7
equal deleted inserted replaced
563:6fc93c3b91c9 564:5c08f99b2a09
172 } 172 }
173 i->value = (int64_t)state; 173 i->value = (int64_t)state;
174 button.state = state; 174 button.state = state;
175 } 175 }
176 176
177
178 @implementation UiRadioButton
179
180 - (UiRadioButton*)init {
181 self = [super init];
182 _direct_state = NO;
183 [self setButtonType:NSButtonTypeRadio];
184 return self;
185 }
186
187 - (void)setState:(NSControlStateValue)state {
188 // NOOP
189 }
190
191 @end
192
177 static void radiobutton_eventdata(id button, UiVar *var, void **eventdata, int *value) { 193 static void radiobutton_eventdata(id button, UiVar *var, void **eventdata, int *value) {
178 if(var) { 194 if(var) {
179 printf("switch radiobutton\n"); 195 UiInteger *value = var->value;
196 NSMutableArray *buttons = (__bridge NSMutableArray*)value->obj;
197 for(UiRadioButton *b in buttons) {
198 if(b != button) {
199 b.direct_state = YES;
200 [[b cell] setState:0];
201 b.direct_state = NO;
202 }
203 }
180 } 204 }
181 } 205 }
182 206
183 UIWIDGET ui_radiobutton_create(UiObject* obj, UiToggleArgs args) { 207 UIWIDGET ui_radiobutton_create(UiObject* obj, UiToggleArgs args) {
184 NSButton *button = [[NSButton alloc] init]; 208 UiRadioButton *button = [[UiRadioButton alloc] init];
185 [button setButtonType:NSButtonTypeRadio]; 209
210 if(args.label) {
211 button.title = [[NSString alloc] initWithUTF8String:args.label];
212 }
186 213
187 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;
188 NSMutableArray *buttons = nil; 216 NSMutableArray *buttons = nil;
189 if(var) { 217 if(var) {
190 UiInteger *i = var->value; 218 UiInteger *i = var->value;
191 buttons = (__bridge NSMutableArray*)i->obj; 219 buttons = (__bridge NSMutableArray*)i->obj;
192 if(!buttons) { 220 if(!buttons) {
218 246
219 return (__bridge void*)button; 247 return (__bridge void*)button;
220 } 248 }
221 249
222 int64_t ui_radiobuttons_get(UiInteger *i) { 250 int64_t ui_radiobuttons_get(UiInteger *i) {
223 return 0; 251 NSMutableArray *buttons = (__bridge NSMutableArray*)i->obj;
252 int64_t index = 0;
253 for(UiRadioButton *b in buttons) {
254 if([b cell].state != 0) {
255 i->value = index;
256 break;
257 }
258 index++;
259 }
260 return index;
224 } 261 }
225 262
226 void ui_radiobuttons_set(UiInteger *i, int64_t value) { 263 void ui_radiobuttons_set(UiInteger *i, int64_t value) {
227 264 NSMutableArray *buttons = (__bridge NSMutableArray*)i->obj;
228 } 265 int64_t index = 0;
266 for(UiRadioButton *b in buttons) {
267 if(index == value) {
268 [b cell].state = NSControlStateValueOn;
269 } else {
270 [b cell].state = NSControlStateValueOff;
271 }
272 index++;
273 }
274 return index;
275 }

mercurial