| 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 } |