// -*-objc-*- // Calando - Volume Fading for OS X // Copyright (C) 2007 Greg Heartsfield #import "VolumeWindowController.h" @implementation VolumeWindowController - (void)awakeFromNib { NSLog(@"Nib loaded"); // Save duration to shared user defaults id theDefaultsController = [NSUserDefaultsController sharedUserDefaultsController]; id duration_key_value = [[theDefaultsController values] valueForKey:@"duration"]; if (duration_key_value == nil) { NSLog(@"Couldn't find value for duration in user defaults"); [durationMinutes setIntValue:60]; } else { NSLog(@"duration from user defaults is available"); } } - (void)windowWillClose:(NSNotification *)aNotification { [NSApp terminate:self]; } - (void)volumeFadeFinished { NSLog(@"VolumeWindowController notified that volume fade finished"); [self resetToStartState]; } - (IBAction)startFade:(id)sender { if (myVolumeFader == nil) { NSLog(@"startFade button activated"); [self setInterfaceToWorkingState]; id theDefaultsController = [NSUserDefaultsController sharedUserDefaultsController]; NSString *durationString = [NSString stringWithFormat:@"%d",[durationMinutes intValue]]; // Save current selected duration to defaults. Next time // the app is started, this value will be restored. [[theDefaultsController values] setValue:durationString forKey:@"duration"]; NSLog(@"Volume slider is %f", [volumeSlider floatValue]); NSLog(@"Duration textfield is %d", [durationMinutes intValue]); // Create volumeFader and initialize with user-selected values. myVolumeFader = [[VolumeFader alloc] init]; [myVolumeFader setSecondsDuration:([durationMinutes intValue] * 60)]; [myVolumeFader setFinalVolume:([volumeSlider floatValue]/100.0)]; [myVolumeFader setNotifyFinished:self]; // Create new thread to fade volume and immediately return. [NSThread detachNewThreadSelector:@selector(fadeSystemVolumeThreaded:) toTarget:[VolumeFader class] withObject:myVolumeFader]; // When the thread finishes, it will notify this // object's volumeFadeFinished method. } else { // A fade was already running, user requested it be stopped. NSLog(@"myVolumeFader was running, now resetting"); [self resetToStartState]; } } // End running fades, reset interface - (void)resetToStartState { [startAndEndButton setTitle:(@"Start Fade")]; if (myVolumeFader != nil) { [myVolumeFader stopFade]; [myVolumeFader release]; } myVolumeFader = nil; } // Set interface to indicate that fade is running - (void)setInterfaceToWorkingState { [startAndEndButton setTitle:(@"End Fade...")]; } @end