3 // http://www.inappsettingskit.com
6 // Luc Vandal, Edovia Inc., http://www.edovia.com
7 // Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com
8 // All rights reserved.
10 // It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz,
11 // as the original authors of this code. You can give credit in a blog post, a tweet or on
12 // a info page of your app. Also, the original authors appreciate letting them know if you use this code.
14 // This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php
17 #import "IASKSpecifier.h"
18 #import "IASKSettingsReader.h"
20 @interface IASKSpecifier ()
21 @property (nonatomic, retain) NSDictionary *multipleValuesDict;
22 - (void)_reinterpretValues:(NSDictionary*)specifierDict;
25 @implementation IASKSpecifier
27 @synthesize specifierDict=_specifierDict;
28 @synthesize multipleValuesDict=_multipleValuesDict;
29 @synthesize settingsReader = _settingsReader;
31 - (id)initWithSpecifier:(NSDictionary*)specifier {
33 [self setSpecifierDict:specifier];
35 if ([[self type] isEqualToString:kIASKPSMultiValueSpecifier] ||
36 [[self type] isEqualToString:kIASKPSTitleValueSpecifier]) {
37 [self _reinterpretValues:[self specifierDict]];
44 [_specifierDict release];
45 [_multipleValuesDict release];
46 _settingsReader = nil;
51 - (void)_reinterpretValues:(NSDictionary*)specifierDict {
52 NSArray *values = [_specifierDict objectForKey:kIASKValues];
53 NSArray *titles = [_specifierDict objectForKey:kIASKTitles];
55 NSMutableDictionary *multipleValuesDict = [[[NSMutableDictionary alloc] init] autorelease];
58 [multipleValuesDict setObject:values forKey:kIASKValues];
62 [multipleValuesDict setObject:titles forKey:kIASKTitles];
65 [self setMultipleValuesDict:multipleValuesDict];
69 return [self.settingsReader titleForStringId:[_specifierDict objectForKey:kIASKTitle]];
73 return [_specifierDict objectForKey:kIASKKey];
77 return [_specifierDict objectForKey:kIASKType];
80 - (NSString*)titleForCurrentValue:(id)currentValue {
81 NSArray *values = [self multipleValues];
82 NSArray *titles = [self multipleTitles];
83 if (values.count != titles.count) {
86 NSInteger keyIndex = [values indexOfObject:currentValue];
87 if (keyIndex == NSNotFound) {
91 return [self.settingsReader titleForStringId:[titles objectAtIndex:keyIndex]];
93 @catch (NSException * e) {}
97 - (NSInteger)multipleValuesCount {
98 return [[_multipleValuesDict objectForKey:kIASKValues] count];
101 - (NSArray*)multipleValues {
102 return [_multipleValuesDict objectForKey:kIASKValues];
105 - (NSArray*)multipleTitles {
106 return [_multipleValuesDict objectForKey:kIASKTitles];
110 return [_specifierDict objectForKey:kIASKFile];
114 return [_specifierDict objectForKey:kIASKDefaultValue];
117 - (id)defaultStringValue {
118 return [[_specifierDict objectForKey:kIASKDefaultValue] description];
121 - (BOOL)defaultBoolValue {
122 id defaultValue = [self defaultValue];
123 if ([defaultValue isEqual:[self trueValue]]) {
126 if ([defaultValue isEqual:[self falseValue]]) {
129 return [defaultValue boolValue];
133 return [_specifierDict objectForKey:kIASKTrueValue];
137 return [_specifierDict objectForKey:kIASKFalseValue];
140 - (float)minimumValue {
141 return [[_specifierDict objectForKey:kIASKMinimumValue] floatValue];
144 - (float)maximumValue {
145 return [[_specifierDict objectForKey:kIASKMaximumValue] floatValue];
148 - (NSString*)minimumValueImage {
149 return [_specifierDict objectForKey:kIASKMinimumValueImage];
152 - (NSString*)maximumValueImage {
153 return [_specifierDict objectForKey:kIASKMaximumValueImage];
157 return [[_specifierDict objectForKey:kIASKIsSecure] boolValue];
160 - (UIKeyboardType)keyboardType {
161 if ([[_specifierDict objectForKey:KIASKKeyboardType] isEqualToString:kIASKKeyboardAlphabet]) {
162 return UIKeyboardTypeASCIICapable;
164 else if ([[_specifierDict objectForKey:KIASKKeyboardType] isEqualToString:kIASKKeyboardNumbersAndPunctuation]) {
165 return UIKeyboardTypeNumbersAndPunctuation;
167 else if ([[_specifierDict objectForKey:KIASKKeyboardType] isEqualToString:kIASKKeyboardNumberPad]) {
168 return UIKeyboardTypeNumberPad;
170 else if ([[_specifierDict objectForKey:KIASKKeyboardType] isEqualToString:KIASKKeyboardURL]) {
171 return UIKeyboardTypeURL;
173 else if ([[_specifierDict objectForKey:KIASKKeyboardType] isEqualToString:kIASKKeyboardEmailAddress]) {
174 return UIKeyboardTypeEmailAddress;
176 return UIKeyboardTypeDefault;
179 - (UITextAutocapitalizationType)autocapitalizationType {
180 if ([[_specifierDict objectForKey:kIASKAutocapitalizationType] isEqualToString:kIASKAutoCapNone]) {
181 return UITextAutocapitalizationTypeNone;
183 else if ([[_specifierDict objectForKey:kIASKAutocapitalizationType] isEqualToString:kIASKAutoCapSentences]) {
184 return UITextAutocapitalizationTypeSentences;
186 else if ([[_specifierDict objectForKey:kIASKAutocapitalizationType] isEqualToString:kIASKAutoCapWords]) {
187 return UITextAutocapitalizationTypeWords;
189 else if ([[_specifierDict objectForKey:kIASKAutocapitalizationType] isEqualToString:kIASKAutoCapAllCharacters]) {
190 return UITextAutocapitalizationTypeAllCharacters;
192 return UITextAutocapitalizationTypeNone;
195 - (UITextAutocorrectionType)autoCorrectionType {
196 if ([[_specifierDict objectForKey:kIASKAutoCorrectionType] isEqualToString:kIASKAutoCorrDefault]) {
197 return UITextAutocorrectionTypeDefault;
199 else if ([[_specifierDict objectForKey:kIASKAutoCorrectionType] isEqualToString:kIASKAutoCorrNo]) {
200 return UITextAutocorrectionTypeNo;
202 else if ([[_specifierDict objectForKey:kIASKAutoCorrectionType] isEqualToString:kIASKAutoCorrYes]) {
203 return UITextAutocorrectionTypeYes;
205 return UITextAutocorrectionTypeDefault;