//
// $Id$
//
// MainController.m
// sequel-pro
//
// Created by lorenz textor (lorenz@textor.ch) on Wed May 01 2002.
// Copyright (c) 2002-2003 Lorenz Textor. All rights reserved.
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// More info at
#import "KeyChain.h"
#import "MainController.h"
#import "TableDocument.h"
#import "SPPreferenceController.h"
#import
#define SEQUEL_PRO_HOME_PAGE_URL @"http://www.sequelpro.com/"
#define SEQUEL_PRO_DONATIONS_URL @"http://www.sequelpro.com/donate.html"
#define SEQUEL_PRO_FAQ_URL @"http://www.sequelpro.com/frequently-asked-questions.html"
@implementation MainController
/**
* Called even before init so we can register our preference defaults
*/
+ (void)initialize
{
// Register application defaults
[[NSUserDefaults standardUserDefaults] registerDefaults:[NSDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"PreferenceDefaults" ofType:@"plist"]]];
}
/**
* Initialisation stuff upon nib awakening
*/
- (void)awakeFromNib
{
// Set Sparkle delegate
[[SUUpdater sharedUpdater] setDelegate:self];
prefsController = [[SPPreferenceController alloc] init];
// Register MainController as services provider
[NSApp setServicesProvider:self];
// Register MainController for AppleScript events
[[NSScriptExecutionContext sharedScriptExecutionContext] setTopLevelObject:self];
isNewFavorite = NO;
}
#pragma mark -
#pragma mark IBAction methods
/**
* Opens the preferences window
*/
- (IBAction)openPreferences:(id)sender
{
[prefsController showWindow:self];
}
#pragma mark -
#pragma mark Getters
/**
* Provide a method to retrieve the prefs controller
*/
- (SPPreferenceController *)preferenceController
{
return prefsController;
}
#pragma mark -
#pragma mark Services menu methods
/**
* Passes the query to the last created document
*/
- (void)doPerformQueryService:(NSPasteboard *)pboard userData:(NSString *)data error:(NSString **)error
{
NSString *pboardString;
NSArray *types = [pboard types];
if ((![types containsObject:NSStringPboardType]) || (!(pboardString = [pboard stringForType:NSStringPboardType]))) {
*error = @"Pasteboard couldn't give string.";
return;
}
// Check if at least one document exists
if (![[[NSDocumentController sharedDocumentController] documents] count]) {
*error = @"No Documents open!";
return;
}
// Pass query to last created document
[[[[NSDocumentController sharedDocumentController] documents] objectAtIndex:([[[NSDocumentController sharedDocumentController] documents] count] - 1)] doPerformQueryService:pboardString];
return;
}
#pragma mark -
#pragma mark Sequel Pro menu methods
/**
* Opens donate link in default browser
*/
- (IBAction)donate:(id)sender
{
[[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:SEQUEL_PRO_DONATIONS_URL]];
}
/**
* Opens website link in default browser
*/
- (IBAction)visitWebsite:(id)sender
{
[[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:SEQUEL_PRO_HOME_PAGE_URL]];
}
/**
* Opens help link in default browser
*/
- (IBAction)visitHelpWebsite:(id)sender
{
[[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:SEQUEL_PRO_FAQ_URL]];
}
#pragma mark -
#pragma mark Other methods
/**
* Override the default open-blank-document methods to automatically connect
* automatically opened windows.
*/
- (BOOL)applicationShouldOpenUntitledFile:(NSApplication *)sender
{
TableDocument *firstTableDocument;
// Manually open a new document, setting MainController as sender to trigger autoconnection
if (firstTableDocument = [[NSDocumentController sharedDocumentController] makeUntitledDocumentOfType:@"DocumentType" error:nil]) {
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"AutoConnectToDefault"]) {
[firstTableDocument setShouldAutomaticallyConnect:YES];
}
[[NSDocumentController sharedDocumentController] addDocument:firstTableDocument];
[firstTableDocument makeWindowControllers];
[firstTableDocument showWindows];
}
// Return NO to the automatic opening
return NO;
}
/**
* What exactly is this for?
*/
- (id)handleQuitScriptCommand:(NSScriptCommand *)command
{
[NSApp terminate:self];
// Suppress warning
return nil;
}
/**
* Sparkle updater delegate method. Called just before the updater relaunches Sequel Pro and we need to make
* sure that no sheets are currently open, which will prevent the app from being quit.
*/
- (void)updaterWillRelaunchApplication:(SUUpdater *)updater
{
NSLog(@"Called");
// Get all the currently open windows and their attached sheets if any
NSArray *windows = [NSApp windows];
for (NSWindow *window in windows)
{
NSWindow *attachedSheet = [window attachedSheet];
if (attachedSheet) {
[NSApp endSheet:attachedSheet returnCode:0];
[attachedSheet orderOut:nil];
}
}
}
/**
* Deallocate prefs controller
*/
- (void)dealloc
{
[prefsController release], prefsController = nil;
[super dealloc];
}
@end