34 BOOL _appliesImmediately;
37 + (id)sharedUserDefaultsController
47 if (
self = [super init])
52 _defaults = someDefaults;
53 _initialValues = [initialValues
copy];
54 _appliesImmediately = YES;
55 _valueProxy = [[_CPUserDefaultsControllerProxy alloc] initWithController:self];
66 - (BOOL)hasUnappliedChanges
68 return [_valueProxy hasUnappliedChanges];
71 - (void)save:(
id)sender
76 - (void)revert:(
id)sender
81 - (void)revertToInitialValues:(
id)sender
83 [_valueProxy revertToInitialValues];
102 [
CPException raise:CPUnsupportedMethodException
reason:@"decoding of non-shared CPUserDefaultsController not implemented"];
114 [aCoder encodeBool:YES forKey:CPUserDefaultsControllerSharedKey];
118 [
CPException raise:CPUnsupportedMethodException
reason:@"encoding of non-shared CPUserDefaultsController not implemented"];
124 @implementation _CPUserDefaultsControllerProxy :
CPObject
133 if (
self = [super init])
135 _controller = aController;
153 var value = [_cachedValues objectForKey:aKey];
156 value = [[_controller defaults] objectForKey:aKey];
158 value = [[_controller initialValues] objectForKey:aKey];
161 [_cachedValues setObject:value forKey:aKey];
166 - (void)setValue:(
id)aValue forKey:(
CPString)aKey
168 [
self willChangeValueForKey:aKey];
169 [_cachedValues setObject:aValue forKey:aKey];
170 if ([_controller appliesImmediately])
171 [[_controller defaults] setObject:aValue forKey:aKey];
172 [
self didChangeValueForKey:aKey];
178 var keys = [_cachedValues allKeys],
179 keysCount = [keys count];
183 var key = keys[keysCount];
184 [
self willChangeValueForKey:key];
185 [_cachedValues removeObjectForKey:key];
186 [
self didChangeValueForKey:key];
192 var keys = [_cachedValues allKeys],
193 keysCount = [keys count];
197 var key = keys[keysCount];
198 [[_controller defaults] setObject:[_cachedValues objectForKey:key] forKey:key];
202 - (void)revertToInitialValues
204 var initial = [_controller initialValues],
205 keys = [_cachedValues allKeys],
206 keysCount = [keys count];
210 var key = keys[keysCount];
211 [
self willChangeValueForKey:key];
213 var initialValue = [initial objectForKey:key];
214 if (initialValue !== nil)
215 [_cachedValues setObject:initialValue forKey:key];
217 [_cachedValues removeObjectForKey:key];
219 [
self didChangeValueForKey:key];
226 var defaults = [_controller defaults],
227 keys = [_cachedValues allKeys],
228 keysCount = [keys count];
232 var key = keys[keysCount],
233 value = [_cachedValues objectForKey:key],
234 newValue = [defaults objectForKey:key];
238 [
self willChangeValueForKey:key];
239 [_cachedValues setObject:newValue forKey:key];
240 [
self didChangeValueForKey:key];
245 - (BOOL)hasUnappliedChanges
247 var defaults = [_controller defaults],
248 keys = [_cachedValues allKeys],
249 keysCount = [keys count];
253 var key = keys[keysCount],
254 value = [_cachedValues objectForKey:key],
255 newValue = [defaults objectForKey:key];
282 return _initialValues;
290 _initialValues = aValue;
296 - (BOOL)appliesImmediately
298 return _appliesImmediately;
304 - (void)setAppliesImmediately:(BOOL)aValue
306 _appliesImmediately = aValue;