Changeset 24 for trunk/Cocoa/Pester/Source/PSAlarmSetController.m
- Timestamp:
- 10/20/02 06:31:58 (21 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Cocoa/Pester/Source/PSAlarmSetController.m
r21 r24 39 39 // [timeDate setFormatter: [[NJRDateFormatter alloc] initWithDateFormat: [defaults objectForKey: NSShortDateFormatString] allowNaturalLanguage: YES]]; 40 40 [self inAtChanged: nil]; 41 alarm = [[PSAlarm alloc] init]; 42 [[self window] makeKeyAndOrderFront: nil]; 43 } 44 45 - (BOOL)applicationShouldHandleReopen:(NSApplication *)sender hasVisibleWindows:(BOOL)flag; 46 { 47 if (!flag) [self showWindow: self]; 48 return YES; 41 49 } 42 50 … … 66 74 - (void)setAlarmDateAndInterval:(id)sender; 67 75 { 68 [alarmDate release];69 alarmDate = nil;70 alarmInterval = 0;71 76 if (isIn) { 72 alarmInterval = [[self objectValueForTextField: timeInterval whileEditing: sender] intValue] * [timeIntervalUnits selectedTag]; 73 if (alarmInterval == 0) { 74 [self setStatus: @"Please specify an alarm interval."]; return; 75 } 76 alarmDate = [NSCalendarDate dateWithTimeIntervalSinceNow: alarmInterval]; 77 [alarmDate retain]; 77 [alarm setInterval: 78 [[self objectValueForTextField: timeInterval whileEditing: sender] intValue] * 79 [timeIntervalUnits selectedTag]]; 78 80 } else { 79 NSDate *time = [self objectValueForTextField: timeOfDay whileEditing: sender]; 80 NSDate *date = [self objectValueForTextField: timeDate whileEditing: sender]; 81 NSCalendarDate *calTime, *calDate; 82 if (time == nil && date == nil) { 83 [self setStatus: @"Please specify an alarm date and time."]; return; 84 } 85 if (time == nil) { 86 [self setStatus: @"Please specify an alarm time."]; return; 87 } 88 if (date == nil) { 89 [self setStatus: @"Please specify an alarm date."]; return; 90 } 91 // XXX if calTime's date is different from the default date, complain 92 calTime = [NSCalendarDate dateWithTimeIntervalSinceReferenceDate: [time timeIntervalSinceReferenceDate]]; 93 calDate = [NSCalendarDate dateWithTimeIntervalSinceReferenceDate: [date timeIntervalSinceReferenceDate]]; 94 if (time == nil || date == nil) { 95 [self setStatus: @"Please specify a reasonable date and time."]; 96 } 97 alarmDate = [[NSCalendarDate alloc] initWithYear: [calDate yearOfCommonEra] 98 month: [calDate monthOfYear] 99 day: [calDate dayOfMonth] 100 hour: [calTime hourOfDay] 101 minute: [calTime minuteOfHour] 102 second: [calTime secondOfMinute] 103 timeZone: nil]; 104 alarmInterval = [alarmDate timeIntervalSinceNow]; 105 if (alarmInterval <= 0) { 106 [self setStatus: @"Please specify an alarm time in the future."]; 107 [alarmDate release]; 108 alarmDate = nil; 109 return; 110 } 81 [alarm setForDate: [self objectValueForTextField: timeDate whileEditing: sender] 82 atTime: [self objectValueForTextField: timeOfDay whileEditing: sender]]; 111 83 } 112 84 } … … 118 90 // Be careful not to hook up any of the text fields' actions to update: because we handle them in controlTextDidChange: instead. If we could get the active text field somehow via public API (guess we could use controlTextDidBegin/controlTextDidEndEditing) then we'd not need to overload the update sender for this purpose. Or, I guess, we could use another method other than update. It should not be this hard to implement what is essentially standard behavior. Sigh. 119 91 92 - (IBAction)updateDateDisplay:(id)sender; 93 { 94 if ([alarm isValid]) { 95 [self setStatus: [[alarm date] descriptionWithCalendarFormat: @"Alarm will be set for %X on %x" timeZone: nil locale: nil]]; 96 [setButton setEnabled: YES]; 97 } else { 98 [setButton setEnabled: NO]; 99 } 100 } 101 120 102 - (IBAction)update:(id)sender; 121 103 { 122 104 // NSLog(@"update: %@", sender); 123 105 [self setAlarmDateAndInterval: sender]; 124 if (alarmDate != nil) { 125 [self setStatus: [alarmDate descriptionWithCalendarFormat: @"Alarm will be set for %X on %x" timeZone: nil locale: nil]]; 126 [setButton setEnabled: YES]; 127 } else { 128 [setButton setEnabled: NO]; 129 } 106 [self updateDateDisplay: sender]; 130 107 } 131 108 … … 183 160 PSAlarmNotifierController *notifier = [PSAlarmNotifierController alloc]; 184 161 NSTimer *timer; 162 NSTimeInterval interval; 185 163 [self setAlarmDateAndInterval: sender]; 186 if (notifier == nil || alarmDate == nil) {164 if (notifier == nil || ( (interval = [alarm interval]) == 0)) { 187 165 [self setStatus: @"Unable to set alarm (time just passed?)"]; 188 166 return; 189 167 } 168 [alarm setMessage: [messageField stringValue]]; 190 169 // XXX should use alarm object instead for userInfo 191 timer = [NSTimer scheduledTimerWithTimeInterval: alarmInterval170 timer = [NSTimer scheduledTimerWithTimeInterval: interval 192 171 target: notifier 193 172 selector: @selector(initWithTimer:) 194 userInfo: [messageField stringValue]173 userInfo: alarm 195 174 repeats: NO]; 196 [self setStatus: [ alarmDatedescriptionWithCalendarFormat: @"Alarm set for %x at %X" timeZone: nil locale: nil]];175 [self setStatus: [[alarm date] descriptionWithCalendarFormat: @"Alarm set for %x at %X" timeZone: nil locale: nil]]; 197 176 [[self window] close]; 198 177 }
Note:
See TracChangeset
for help on using the changeset viewer.