changed git call from https to git readonly
[atutor.git] / mods / atsocial_iphone_app / InAppSettingsKit / Models / IASKSpecifier.m
1 //
2 //  IASKSpecifier.m
3 //  http://www.inappsettingskit.com
4 //
5 //  Copyright (c) 2009:
6 //  Luc Vandal, Edovia Inc., http://www.edovia.com
7 //  Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com
8 //  All rights reserved.
9 // 
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.
13 //
14 //  This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php
15 //
16
17 #import "IASKSpecifier.h"
18 #import "IASKSettingsReader.h"
19
20 @interface IASKSpecifier ()
21 @property (nonatomic, retain) NSDictionary  *multipleValuesDict;
22 - (void)_reinterpretValues:(NSDictionary*)specifierDict;
23 @end
24
25 @implementation IASKSpecifier
26
27 @synthesize specifierDict=_specifierDict;
28 @synthesize multipleValuesDict=_multipleValuesDict;
29 @synthesize settingsReader = _settingsReader;
30
31 - (id)initWithSpecifier:(NSDictionary*)specifier {
32     if ([super init]) {
33         [self setSpecifierDict:specifier];
34         
35         if ([[self type] isEqualToString:kIASKPSMultiValueSpecifier] ||
36                         [[self type] isEqualToString:kIASKPSTitleValueSpecifier]) {
37             [self _reinterpretValues:[self specifierDict]];
38         }
39     }
40     return self;
41 }
42
43 - (void)dealloc {
44     [_specifierDict release];
45     [_multipleValuesDict release];
46         _settingsReader = nil;
47
48     [super dealloc];
49 }
50
51 - (void)_reinterpretValues:(NSDictionary*)specifierDict {
52     NSArray *values = [_specifierDict objectForKey:kIASKValues];
53     NSArray *titles = [_specifierDict objectForKey:kIASKTitles];
54     
55     NSMutableDictionary *multipleValuesDict = [[[NSMutableDictionary alloc] init] autorelease];
56     
57     if (values) {
58                 [multipleValuesDict setObject:values forKey:kIASKValues];
59         }
60         
61     if (titles) {
62                 [multipleValuesDict setObject:titles forKey:kIASKTitles];
63         }
64     
65     [self setMultipleValuesDict:multipleValuesDict];
66 }
67
68 - (NSString*)title {
69     return [self.settingsReader titleForStringId:[_specifierDict objectForKey:kIASKTitle]];
70 }
71
72 - (NSString*)key {
73     return [_specifierDict objectForKey:kIASKKey];
74 }
75
76 - (NSString*)type {
77     return [_specifierDict objectForKey:kIASKType];
78 }
79
80 - (NSString*)titleForCurrentValue:(id)currentValue {
81         NSArray *values = [self multipleValues];
82         NSArray *titles = [self multipleTitles];
83         if (values.count != titles.count) {
84                 return nil;
85         }
86     NSInteger keyIndex = [values indexOfObject:currentValue];
87         if (keyIndex == NSNotFound) {
88                 return nil;
89         }
90         @try {
91                 return [self.settingsReader titleForStringId:[titles objectAtIndex:keyIndex]];
92         }
93         @catch (NSException * e) {}
94         return nil;
95 }
96
97 - (NSInteger)multipleValuesCount {
98     return [[_multipleValuesDict objectForKey:kIASKValues] count];
99 }
100
101 - (NSArray*)multipleValues {
102     return [_multipleValuesDict objectForKey:kIASKValues];
103 }
104
105 - (NSArray*)multipleTitles {
106     return [_multipleValuesDict objectForKey:kIASKTitles];
107 }
108
109 - (NSString*)file {
110     return [_specifierDict objectForKey:kIASKFile];
111 }
112
113 - (id)defaultValue {
114     return [_specifierDict objectForKey:kIASKDefaultValue];
115 }
116
117 - (id)defaultStringValue {
118     return [[_specifierDict objectForKey:kIASKDefaultValue] description];
119 }
120
121 - (BOOL)defaultBoolValue {
122         id defaultValue = [self defaultValue];
123         if ([defaultValue isEqual:[self trueValue]]) {
124                 return YES;
125         }
126         if ([defaultValue isEqual:[self falseValue]]) {
127                 return NO;
128         }
129         return [defaultValue boolValue];
130 }
131
132 - (id)trueValue {
133     return [_specifierDict objectForKey:kIASKTrueValue];
134 }
135
136 - (id)falseValue {
137     return [_specifierDict objectForKey:kIASKFalseValue];
138 }
139
140 - (float)minimumValue {
141     return [[_specifierDict objectForKey:kIASKMinimumValue] floatValue];
142 }
143
144 - (float)maximumValue {
145     return [[_specifierDict objectForKey:kIASKMaximumValue] floatValue];
146 }
147
148 - (NSString*)minimumValueImage {
149     return [_specifierDict objectForKey:kIASKMinimumValueImage];
150 }
151
152 - (NSString*)maximumValueImage {
153     return [_specifierDict objectForKey:kIASKMaximumValueImage];
154 }
155
156 - (BOOL)isSecure {
157     return [[_specifierDict objectForKey:kIASKIsSecure] boolValue];
158 }
159
160 - (UIKeyboardType)keyboardType {
161     if ([[_specifierDict objectForKey:KIASKKeyboardType] isEqualToString:kIASKKeyboardAlphabet]) {
162         return UIKeyboardTypeASCIICapable;
163     }
164     else if ([[_specifierDict objectForKey:KIASKKeyboardType] isEqualToString:kIASKKeyboardNumbersAndPunctuation]) {
165         return UIKeyboardTypeNumbersAndPunctuation;
166     }
167     else if ([[_specifierDict objectForKey:KIASKKeyboardType] isEqualToString:kIASKKeyboardNumberPad]) {
168         return UIKeyboardTypeNumberPad;
169     }
170     else if ([[_specifierDict objectForKey:KIASKKeyboardType] isEqualToString:KIASKKeyboardURL]) {
171         return UIKeyboardTypeURL;
172     }
173     else if ([[_specifierDict objectForKey:KIASKKeyboardType] isEqualToString:kIASKKeyboardEmailAddress]) {
174         return UIKeyboardTypeEmailAddress;
175     }
176     return UIKeyboardTypeDefault;
177 }
178
179 - (UITextAutocapitalizationType)autocapitalizationType {
180     if ([[_specifierDict objectForKey:kIASKAutocapitalizationType] isEqualToString:kIASKAutoCapNone]) {
181         return UITextAutocapitalizationTypeNone;
182     }
183     else if ([[_specifierDict objectForKey:kIASKAutocapitalizationType] isEqualToString:kIASKAutoCapSentences]) {
184         return UITextAutocapitalizationTypeSentences;
185     }
186     else if ([[_specifierDict objectForKey:kIASKAutocapitalizationType] isEqualToString:kIASKAutoCapWords]) {
187         return UITextAutocapitalizationTypeWords;
188     }
189     else if ([[_specifierDict objectForKey:kIASKAutocapitalizationType] isEqualToString:kIASKAutoCapAllCharacters]) {
190         return UITextAutocapitalizationTypeAllCharacters;
191     }
192     return UITextAutocapitalizationTypeNone;
193 }
194
195 - (UITextAutocorrectionType)autoCorrectionType {
196     if ([[_specifierDict objectForKey:kIASKAutoCorrectionType] isEqualToString:kIASKAutoCorrDefault]) {
197         return UITextAutocorrectionTypeDefault;
198     }
199     else if ([[_specifierDict objectForKey:kIASKAutoCorrectionType] isEqualToString:kIASKAutoCorrNo]) {
200         return UITextAutocorrectionTypeNo;
201     }
202     else if ([[_specifierDict objectForKey:kIASKAutoCorrectionType] isEqualToString:kIASKAutoCorrYes]) {
203         return UITextAutocorrectionTypeYes;
204     }
205     return UITextAutocorrectionTypeDefault;
206 }
207
208 @end