0,0 → 1,235 |
// |
// InAppSetting.m |
// InAppSettingsTestApp |
// |
// Created by David Keegan on 11/21/09. |
// Copyright 2009 InScopeApps{+}. All rights reserved. |
// |
|
#import "InAppSettings.h" |
#import "InAppSettingsSpecifier.h" |
#import "InAppSettingsConstants.h" |
|
@implementation InAppSettingsSpecifier |
|
@synthesize stringsTable; |
@synthesize delegate; |
@synthesize dataSource; |
|
- (NSString *) getKey { |
return [self valueForKey:InAppSettingsSpecifierKey]; |
} |
|
- (NSString *) getType { |
return [self valueForKey:InAppSettingsSpecifierType]; |
} |
|
- (BOOL) isType:(NSString *)type { |
return [[self getType] isEqualToString:type]; |
} |
|
- (id) valueForKey:(NSString *)key { |
return [settingDictionary objectForKey:key]; |
} |
|
- (NSString *) localizedTitle { |
NSString * title = [self valueForKey:InAppSettingsSpecifierTitle]; |
|
if ([self valueForKey:InAppSettingsSpecifierInAppTitle]) { |
title = [self valueForKey:InAppSettingsSpecifierInAppTitle]; |
} |
return InAppSettingsLocalize(title, self.stringsTable); |
} |
|
- (NSString *) cellName { |
|
if ([self valueForKey:InAppSettingsSpecifierInAppCellClass]) { |
return [self valueForKey:InAppSettingsSpecifierInAppCellClass]; |
} |
|
return [NSString stringWithFormat:@"%@%@Cell", InAppSettingsProjectName, [self getType]]; |
} |
|
- (id) getValue { |
|
id value; |
|
if ( self.dataSource != nil ) |
value = [self.dataSource objectForKey:[self getKey]]; |
else |
value = [[NSUserDefaults standardUserDefaults] valueForKey:[self getKey]]; |
|
if (value == nil) { |
value = [self valueForKey:InAppSettingsSpecifierDefaultValue]; |
} |
return value; |
} |
|
- (void) setValue:(id)newValue { |
NSString * key = [self getKey]; |
|
if ( self.dataSource != nil ) { |
[self.dataSource setObject:newValue forKey:key]; |
} else |
[[NSUserDefaults standardUserDefaults] setObject:newValue forKey:key]; |
|
[self.delegate settingsSpecifierUpdated:self]; |
} |
|
#pragma mark validation |
|
- (BOOL) hasTitle { |
return ([self valueForKey:InAppSettingsSpecifierTitle]) ? YES : NO; |
} |
|
- (BOOL) hasKey { |
NSString * key = [self getKey]; |
|
return (key && (![key isEqualToString:@""])); |
} |
|
- (BOOL) hasDefaultValue { |
return ([self valueForKey:InAppSettingsSpecifierDefaultValue]) ? YES : NO; |
} |
|
- (BOOL) isValid { |
if (![self getType]) { |
return NO; |
} |
|
if ([self isType:InAppSettingsPSGroupSpecifier]) { |
return YES; |
} |
|
if ([self isType:InAppSettingsPSMultiValueSpecifier]) { |
if (![self hasKey]) { |
return NO; |
} |
|
if (![self hasDefaultValue]) { |
return NO; |
} |
|
// check the localized and un-locatlized values |
if (![self hasTitle] || [[self valueForKey:InAppSettingsSpecifierTitle] length] == 0) { |
return NO; |
} |
|
NSArray * titles = [self valueForKey:InAppSettingsSpecifierTitles]; |
if ((!titles) || ([titles count] == 0)) { |
return NO; |
} |
|
NSArray * values = [self valueForKey:InAppSettingsSpecifierValues]; |
if ((!values) || ([values count] == 0)) { |
return NO; |
} |
|
if ([titles count] != [values count]) { |
return NO; |
} |
|
return YES; |
} |
|
if ([self isType:InAppSettingsPSSliderSpecifier]) { |
if (![self hasKey]) { |
return NO; |
} |
|
if (![self hasDefaultValue]) { |
return NO; |
} |
|
// The settings app allows min>max |
if (![self valueForKey:InAppSettingsSpecifierMinimumValue]) { |
return NO; |
} |
|
if (![self valueForKey:InAppSettingsSpecifierMaximumValue]) { |
return NO; |
} |
|
return YES; |
} |
|
if ([self isType:InAppSettingsPSToggleSwitchSpecifier]) { |
if (![self hasKey]) { |
return NO; |
} |
|
if (![self hasDefaultValue]) { |
return NO; |
} |
|
if (![self hasTitle]) { |
return NO; |
} |
|
return YES; |
} |
|
if ([self isType:InAppSettingsPSTitleValueSpecifier]) { |
if (![self hasKey]) { |
return NO; |
} |
|
if (![self hasDefaultValue]) { |
return NO; |
} |
|
return YES; |
} |
|
if ([self isType:InAppSettingsPSTextFieldSpecifier]) { |
if (![self hasKey]) { |
return NO; |
} |
|
if (![self hasTitle]) { |
return NO; |
} |
|
return YES; |
} |
|
if ([self isType:InAppSettingsPSChildPaneSpecifier]) { |
if (![self hasTitle]) { |
return NO; |
} |
|
if (![self valueForKey:InAppSettingsSpecifierFile]) { |
return NO; |
} |
|
return YES; |
} |
|
return NO; |
} |
|
#pragma mark init/dealloc |
|
- (id) init { |
return [self initWithDictionary:nil andStringsTable:nil]; |
} |
|
- (id) initWithDictionary:(NSDictionary *)dictionary andStringsTable:(NSString *)table { |
self = [super init]; |
if (self != nil) { |
if (dictionary) { |
self.stringsTable = table; |
settingDictionary = [dictionary retain]; |
} |
} |
return self; |
} |
|
- (void) dealloc { |
self.delegate = nil; |
[stringsTable release]; |
[settingDictionary release]; |
[super dealloc]; |
} |
|
@end |