85 var button = [[
CPRadio alloc] init];
87 [button setTitle:aTitle];
98 - (id)initWithFrame:(CGRect)aFrame radioGroup:(
CPRadioGroup)aRadioGroup
119 - (id)initWithFrame:(CGRect)aFrame
124 - (CPInteger)nextState
131 if (_radioGroup === aRadioGroup)
134 [_radioGroup _removeRadio:self];
135 _radioGroup = aRadioGroup;
136 [_radioGroup _addRadio:self];
144 - (void)setObjectValue:(
id)aValue
149 [_radioGroup _setSelectedRadio:self];
152 - (BOOL)sendAction:(
SEL)anAction to:(
id)anObject
157 [CPApp sendAction:[_radioGroup action] to:[_radioGroup target] from:_radioGroup];
171 _radioGroup = [aCoder decodeObjectForKey:CPRadioRadioGroupKey];
180 [aCoder encodeObject:_radioGroup forKey:CPRadioRadioGroupKey];
185 return [
self currentValueForThemeAttribute:@"image"];
190 return [
self currentValueForThemeAttribute:@"image"];
193 - (BOOL)startTrackingAt:(CGPoint)aPoint
197 return startedTracking;
219 [
self exposeBinding:CPSelectedValueBinding];
220 [
self exposeBinding:CPSelectedTagBinding];
221 [
self exposeBinding:CPSelectedIndexBinding];
223 [
self exposeBinding:CPEnabledBinding];
224 [
self exposeBinding:CPHiddenBinding];
234 _selectedRadio = nil;
246 - (void)selectRadioAtIndex:(
int)index
249 [
self _setSelectedRadio:nil];
252 var radio = [_radios objectAtIndex:index];
254 [
self _setSelectedRadio:radio];
255 [radio setState:CPOnState];
264 - (BOOL)selectRadioWithTag:(
int)tag
266 var index = [_radios indexOfObjectPassingTest:function(radio)
268 return [radio tag] === tag;
286 return _selectedRadio;
294 - (int)selectedRadioIndex
296 return [_radios indexOfObject:_selectedRadio];
304 - (void)setEnabled:(BOOL)enabled
306 [_radios makeObjectsPerformSelector:@selector(setEnabled:) withObject:enabled];
309 - (void)setHidden:(BOOL)hidden
311 [_radios makeObjectsPerformSelector:@selector(setHidden:) withObject:hidden];
316 - (void)_addRadio:(
CPRadio)aRadio
318 if ([_radios indexOfObject:aRadio] ===
CPNotFound)
319 [_radios addObject:aRadio];
322 [
self _setSelectedRadio:aRadio];
325 - (void)_removeRadio:(
CPRadio)aRadio
327 if (_selectedRadio === aRadio)
328 _selectedRadio = nil;
330 [_radios removeObject:aRadio];
338 - (void)_selectRadioWithTitle:(
CPString)aTitle
340 var index = [_radios indexOfObjectPassingTest:function(radio)
342 return [radio title] === aTitle;
345 [
self selectRadioAtIndex:index];
348 - (void)_setSelectedRadio:(
CPRadio)aRadio
350 if (_selectedRadio === aRadio)
353 [_selectedRadio setState:CPOffState];
355 _selectedRadio = aRadio;
356 [_CPRadioGroupSelectionBinder reverseSetValueForObject:self];
372 _radios = [aCoder decodeObjectForKey:CPRadioGroupRadiosKey];
373 _selectedRadio = [aCoder decodeObjectForKey:CPRadioGroupSelectedRadioKey];
381 [aCoder encodeObject:_radios forKey:CPRadioGroupRadiosKey];
382 [aCoder encodeObject:_selectedRadio forKey:CPRadioGroupSelectedRadioKey];
389 + (Class)_binderClassForBinding:(
CPString)aBinding
391 if (aBinding === CPSelectedValueBinding ||
392 aBinding === CPSelectedTagBinding ||
393 aBinding === CPSelectedIndexBinding)
395 var capitalizedBinding = aBinding.charAt(0).toUpperCase() + aBinding.substr(1);
397 return [CPClassFromString(@"_CPRadioGroup" + capitalizedBinding + "Binder") class];
399 else if ([aBinding hasPrefix:CPEnabledBinding])
401 else if ([aBinding hasPrefix:CPHiddenBinding])
404 return [
super _binderClassForBinding:aBinding];
411 @implementation _CPRadioGroupSelectionBinder :
CPBinder
418 self = [
super initWithBinding:aBinding name:aName to:aDestination keyPath:aKeyPath options:options from:aSource];
423 _selectionBinding = aName;
429 + (void)reverseSetValueForObject:(
id)aSource
432 [binder reverseSetValueFor:[binder _selectionBinding]];
435 - (void)setPlaceholderValue:(
id)aValue withMarker:(
CPString)aMarker forBinding:(
CPString)aBinding
437 [
self setValue:aValue forBinding:aBinding];
441 @implementation _CPRadioGroupSelectedIndexBinder : _CPRadioGroupSelectionBinder
446 - (void)setValue:(
id)aValue forBinding:(
CPString)aBinding
448 [_source selectRadioAtIndex:aValue];
451 - (id)valueForBinding:(
CPString)aBinding
453 return [_source selectedRadioIndex];
457 @implementation _CPRadioGroupSelectedTagBinder : _CPRadioGroupSelectionBinder
462 - (void)setValue:(
id)aValue forBinding:(
CPString)aBinding
464 [_source selectRadioWithTag:aValue];
467 - (id)valueForBinding:(
CPString)aBinding
469 return [[_source selectedRadio] tag];
473 @implementation _CPRadioGroupSelectedValueBinder : _CPRadioGroupSelectionBinder
478 - (void)setValue:(
id)aValue forBinding:(
CPString)aBinding
480 [_source _selectRadioWithTitle:aValue];
483 - (id)valueForBinding:(
CPString)aBinding
485 return [[_source selectedRadio] title];
519 - (void)setTarget:(
id)aValue
535 - (void)setAction:(
SEL)aValue