Changeset 51 for trunk/Cocoa/Pester/Source/PSAlarm.m
- Timestamp:
- 11/18/02 08:57:41 (21 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Cocoa/Pester/Source/PSAlarm.m
r43 r51 20 20 21 21 @implementation PSAlarm 22 23 #pragma mark initialize-release 22 24 23 25 + (void)initialize; // XXX change on locale modification, subscribe to NSNotifications … … 41 43 } 42 44 45 #pragma mark private 46 43 47 - (void)_setAlarmDate:(NSCalendarDate *)aDate; 44 48 { … … 50 54 } 51 55 52 - (void)_ invalidate:(NSString *)aMessage;56 - (void)_beInvalid:(NSString *)aMessage; 53 57 { 54 58 alarmType = PSAlarmInvalid; … … 62 66 } 63 67 64 - (void)_ validateForType:(PSAlarmType)type;68 - (void)_beValidWithType:(PSAlarmType)type; 65 69 { 66 70 if (alarmType == PSAlarmSet) return; // already valid … … 75 79 alarmDate = [NSCalendarDate dateWithTimeIntervalSinceNow: alarmInterval]; 76 80 [alarmDate retain]; 77 [self _validateForType: PSAlarmInterval]; 78 } 81 [self _beValidWithType: PSAlarmInterval]; 82 } 83 84 - (void)_setIntervalFromDate; 85 { 86 alarmInterval = [alarmDate timeIntervalSinceNow] + 1; 87 if (alarmInterval <= 0) { 88 [self _beInvalid: @"Please specify an alarm time in the future."]; 89 return; 90 } 91 [self _beValidWithType: PSAlarmDate]; 92 } 93 94 - (NSString *)_alarmTypeString; 95 { 96 switch (alarmType) { 97 case PSAlarmDate: return @"PSAlarmDate"; 98 case PSAlarmInterval: return @"PSAlarmInterval"; 99 case PSAlarmSet: return @"PSAlarmSet"; 100 case PSAlarmInvalid: return @"PSAlarmInvalid"; 101 default: return [NSString stringWithFormat: @"<unknown: %u>", alarmType]; 102 } 103 } 104 105 - (void)_timerExpired:(NSTimer *)aTimer; 106 { 107 [[NSNotificationCenter defaultCenter] postNotificationName: PSAlarmTimerExpiredNotification object: self]; 108 [timer release]; timer = nil; 109 } 110 111 #pragma mark alarm setting 79 112 80 113 - (void)setInterval:(NSTimeInterval)anInterval; … … 82 115 alarmInterval = anInterval; 83 116 if (alarmInterval <= 0) { 84 [self _ invalidate: @"Please specify an alarm interval."]; return;117 [self _beInvalid: @"Please specify an alarm interval."]; return; 85 118 } 86 119 [self _setDateFromInterval]; 87 }88 89 - (void)_setIntervalFromDate;90 {91 alarmInterval = [alarmDate timeIntervalSinceNow] + 1;92 if (alarmInterval <= 0) {93 [self _invalidate: @"Please specify an alarm time in the future."];94 return;95 }96 [self _validateForType: PSAlarmDate];97 120 } 98 121 … … 107 130 NSCalendarDate *calTime, *calDate; 108 131 if (time == nil && date == nil) { 109 [self _ invalidate: @"Please specify an alarm date and time."]; return;132 [self _beInvalid: @"Please specify an alarm date and time."]; return; 110 133 } 111 134 if (time == nil) { 112 [self _ invalidate: @"Please specify an alarm time."]; return;135 [self _beInvalid: @"Please specify an alarm time."]; return; 113 136 } 114 137 if (date == nil) { 115 [self _ invalidate: @"Please specify an alarm date."]; return;138 [self _beInvalid: @"Please specify an alarm date."]; return; 116 139 } 117 140 // XXX if calTime's date is different from the default date, complain … … 119 142 calDate = [NSCalendarDate dateWithTimeIntervalSinceReferenceDate: [date timeIntervalSinceReferenceDate]]; 120 143 if (calTime == nil || calDate == nil) { 121 [self _ invalidate: @"Please specify a reasonable date and time."];144 [self _beInvalid: @"Please specify a reasonable date and time."]; 122 145 } 123 146 [self setForDateAtTime: … … 131 154 } 132 155 133 - (BOOL)isValid; 134 { 135 if (alarmType == PSAlarmDate) [self _setIntervalFromDate]; 136 return (alarmType != PSAlarmInvalid); 156 #pragma mark accessing 157 158 - (NSString *)message; 159 { 160 if (alarmMessage == nil || [alarmMessage isEqualToString: @""]) 161 return @"Alarm!"; 162 return alarmMessage; 137 163 } 138 164 … … 146 172 } 147 173 148 - (NSString *)message; 149 { 150 if (alarmMessage == nil || [alarmMessage isEqualToString: @""]) 151 return @"Alarm!"; 152 return alarmMessage; 174 - (BOOL)isValid; 175 { 176 if (alarmType == PSAlarmDate) [self _setIntervalFromDate]; 177 return (alarmType != PSAlarmInvalid); 153 178 } 154 179 … … 163 188 if (alarmType == PSAlarmInterval) [self _setDateFromInterval]; 164 189 return alarmDate; 190 } 191 192 - (NSCalendarDate *)time; 193 { 194 if (alarmType == PSAlarmInterval) [self _setDateFromInterval]; 195 return [[NSCalendarDate alloc] initWithYear: 0 196 month: 1 197 day: 1 198 hour: [alarmDate hourOfDay] 199 minute: [alarmDate minuteOfHour] 200 second: [alarmDate secondOfMinute] 201 timeZone: nil]; 202 } 203 204 - (NSTimeInterval)interval; 205 { 206 if (alarmType == PSAlarmSet || alarmType == PSAlarmDate) [self _setIntervalFromDate]; 207 return alarmInterval; 208 } 209 210 - (void)addAlert:(PSAlert *)alert; 211 { 212 if (alerts == nil) alerts = [[NSMutableArray alloc] initWithCapacity: 4]; 213 [alerts addObject: alert]; 214 } 215 216 - (void)removeAlerts; 217 { 218 [alerts removeAllObjects]; 219 } 220 221 - (NSArray *)alerts; 222 { 223 return [[alerts copy] autorelease]; 165 224 } 166 225 … … 193 252 } 194 253 195 - (NSTimeInterval)interval; 196 { 197 if (alarmType == PSAlarmSet || alarmType == PSAlarmDate) [self _setIntervalFromDate]; 198 return alarmInterval; 199 } 254 #pragma mark actions 200 255 201 256 - (BOOL)setTimer; … … 204 259 case PSAlarmDate: if (![self isValid]) return NO; 205 260 case PSAlarmInterval: 206 timer = [NSTimer scheduledTimerWithTimeInterval: alarmInterval 207 target: self 208 selector: @selector(_timerExpired:) 209 userInfo: nil 210 repeats: NO]; 261 timer = [NSTimer scheduledTimerWithTimeInterval: alarmInterval target: self selector: @selector(_timerExpired:) userInfo: nil repeats: NO]; 211 262 if (timer != nil) { 212 263 [timer retain]; … … 220 271 } 221 272 222 - (void)cancel ;273 - (void)cancelTimer; 223 274 { 224 275 [timer invalidate]; [timer release]; timer = nil; 225 276 } 226 277 227 - (void)_timerExpired:(NSTimer *)aTimer; 228 { 229 [[NSNotificationCenter defaultCenter] postNotificationName: PSAlarmTimerExpiredNotification object: self]; 230 [timer release]; timer = nil; 231 } 232 233 - (NSString *)_alarmTypeString; 234 { 235 switch (alarmType) { 236 case PSAlarmDate: return @"PSAlarmDate"; 237 case PSAlarmInterval: return @"PSAlarmInterval"; 238 case PSAlarmSet: return @"PSAlarmSet"; 239 case PSAlarmInvalid: return @"PSAlarmInvalid"; 240 default: return [NSString stringWithFormat: @"<unknown: %u>", alarmType]; 241 } 242 } 243 244 - (NSComparisonResult)compare:(PSAlarm *)otherAlarm; 278 #pragma mark comparing 279 280 - (NSComparisonResult)compareDate:(PSAlarm *)otherAlarm; 245 281 { 246 282 return [[self date] compare: [otherAlarm date]]; 247 283 } 248 284 249 - (void)addAlert:(PSAlert *)alert; 250 { 251 if (alerts == nil) alerts = [[NSMutableArray alloc] initWithCapacity: 4]; 252 [alerts addObject: alert]; 253 } 254 255 - (void)removeAlerts; 256 { 257 [alerts removeAllObjects]; 258 } 259 260 - (NSArray *)alerts; 261 { 262 return [[alerts copy] autorelease]; 263 } 285 - (NSComparisonResult)compareMessage:(PSAlarm *)otherAlarm; 286 { 287 return [[self message] caseInsensitiveCompare: [otherAlarm message]]; 288 } 289 290 #pragma mark printing 264 291 265 292 - (NSString *)description; … … 272 299 [NSString stringWithFormat: @"\ntimer: %@", timer] : @""))]; 273 300 } 301 302 #pragma mark archiving 274 303 275 304 - (void)encodeWithCoder:(NSCoder *)coder;
Note:
See TracChangeset
for help on using the changeset viewer.