/* Copyright 2010 Hardcoded Software (http://www.hardcoded.net) This software is licensed under the "BSD" License as described in the "LICENSE" file, which should be included with this package. The terms are also available at http://www.hardcoded.net/licenses/bsd_license */ #import "AppDelegate.h" #import "ProgressController.h" #import "HSFairwareReminder.h" #import "Utils.h" #import "Consts.h" #import "Dialogs.h" #import @implementation AppDelegateBase - (void)awakeFromNib { _recentResults = [[HSRecentFiles alloc] initWithName:@"recentResults" menu:recentResultsMenu]; [_recentResults setDelegate:self]; } - (PyDupeGuruBase *)py { return py; } - (DirectoryPanel *)directoryPanel { if (!_directoryPanel) _directoryPanel = [[DirectoryPanel alloc] initWithParentApp:self]; return _directoryPanel; } - (DetailsPanel *)detailsPanel { if (!_detailsPanel) _detailsPanel = [[DetailsPanel alloc] initWithPy:py]; return _detailsPanel; } - (HSRecentFiles *)recentResults { return _recentResults; } - (NSString *)homepageURL { return @""; // Virtual } - (IBAction)showAboutBox:(id)sender { if (_aboutBox == nil) { _aboutBox = [[HSAboutBox alloc] initWithApp:py]; } [[_aboutBox window] makeKeyAndOrderFront:sender]; } - (IBAction)openWebsite:(id)sender { [[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:[self homepageURL]]]; } - (IBAction)openHelp:(id)sender { NSBundle *b = [NSBundle mainBundle]; NSString *p = [b pathForResource:@"index" ofType:@"html" inDirectory:@"help"]; NSURL *u = [NSURL fileURLWithPath:p]; [[NSWorkspace sharedWorkspace] openURL:u]; } - (IBAction)toggleDirectories:(id)sender { [[self directoryPanel] toggleVisible:sender]; } /* Delegate */ - (void)applicationDidFinishLaunching:(NSNotification *)aNotification { [[ProgressController mainProgressController] setWorker:py]; NSUserDefaults *ud = [NSUserDefaults standardUserDefaults]; //Restore Columns NSArray *columnsOrder = [ud arrayForKey:@"columnsOrder"]; NSDictionary *columnsWidth = [ud dictionaryForKey:@"columnsWidth"]; if ([columnsOrder count]) [result restoreColumnsPosition:columnsOrder widths:columnsWidth]; else [result resetColumnsToDefault:nil]; [HSFairwareReminder showNagWithApp:[self py]]; [py loadSession]; } - (void)applicationWillBecomeActive:(NSNotification *)aNotification { if (![[result window] isVisible]) [result showWindow:NSApp]; } - (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender { if ([py resultsAreModified]) { NSString *msg = @"You have unsaved results, do you really want to quit?"; if ([Dialogs askYesNo:msg] == NSAlertSecondButtonReturn) { // NO return NSTerminateCancel; } } return NSTerminateNow; } - (void)applicationWillTerminate:(NSNotification *)aNotification { NSUserDefaults *ud = [NSUserDefaults standardUserDefaults]; [ud setObject: [result getColumnsOrder] forKey:@"columnsOrder"]; [ud setObject: [result getColumnsWidth] forKey:@"columnsWidth"]; NSInteger sc = [ud integerForKey:@"sessionCountSinceLastIgnorePurge"]; if (sc >= 10) { sc = -1; [py purgeIgnoreList]; } sc++; [py saveSession]; [ud setInteger:sc forKey:@"sessionCountSinceLastIgnorePurge"]; // NSApplication does not release nib instances objects, we must do it manually // Well, it isn't needed because the memory is freed anyway (we are quitting the application // But I need to release HSRecentFiles so it saves the user defaults [_directoryPanel release]; [_recentResults release]; } - (void)recentFileClicked:(NSString *)path { [py loadResultsFrom:path]; } @end