From f0e656abd33789d8ad00a95c89b13bd891ae3879 Mon Sep 17 00:00:00 2001 From: stuconnolly Date: Thu, 14 Oct 2010 19:49:59 +0000 Subject: Split out AppleScript support into a category of SPAppController. --- Source/SPAppController.h | 1 - Source/SPAppController.m | 108 ++------------------------------- Source/SPAppleScriptSupport.h | 30 ++++++++++ Source/SPAppleScriptSupport.m | 135 ++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 170 insertions(+), 104 deletions(-) create mode 100644 Source/SPAppleScriptSupport.h create mode 100644 Source/SPAppleScriptSupport.m (limited to 'Source') diff --git a/Source/SPAppController.h b/Source/SPAppController.h index 999f5202..f5e92f16 100644 --- a/Source/SPAppController.h +++ b/Source/SPAppController.h @@ -39,7 +39,6 @@ NSURL *_sessionURL; NSMutableDictionary *_spfSessionDocData; - } // Window management diff --git a/Source/SPAppController.m b/Source/SPAppController.m index c6d89c02..c619b3a4 100644 --- a/Source/SPAppController.m +++ b/Source/SPAppController.m @@ -880,106 +880,6 @@ } } -#pragma mark - -#pragma mark AppleScript support - -//////////////// Examples to catch AS core events - maybe for further stuff -// - (void)handleQuitEvent:(NSAppleEventDescriptor *)event withReplyEvent:(NSAppleEventDescriptor *)replyEvent -// { -// [NSApp terminate:self]; -// } -// - (void)handleOpenEvent:(NSAppleEventDescriptor *)event withReplyEvent:(NSAppleEventDescriptor *)replyEvent -// { -// NSLog(@"OPEN "); -// } -// -// - (void)applicationWillFinishLaunching:(NSNotification *)aNotification -// { -// NSAppleEventManager *aeManager = [NSAppleEventManager sharedAppleEventManager]; -// [aeManager setEventHandler:self andSelector:@selector(handleQuitEvent:withReplyEvent:) forEventClass:kCoreEventClass andEventID:kAEQuitApplication]; -// [aeManager setEventHandler:self andSelector:@selector(handleOpenEvent:withReplyEvent:) forEventClass:kCoreEventClass andEventID:kAEOpenApplication]; -// } - - -/** - * Is needed to interact with AppleScript for set/get internal SP variables - */ -- (BOOL)application:(NSApplication *)sender delegateHandlesKey:(NSString *)key -{ - NSLog(@"Not yet implemented."); - - return NO; -} - -/** - * AppleScript calls that method to get the available documents - */ -- (NSArray *)orderedDocuments -{ - NSMutableArray *orderedDocuments = [NSMutableArray array]; - - for (NSWindow *aWindow in [self orderedWindows]) { - if ([[aWindow windowController] isMemberOfClass:[SPWindowController class]]) { - [orderedDocuments addObjectsFromArray:[[aWindow windowController] documents]]; - } - } - - return orderedDocuments; -} - -/** - * Support for 'make new document'. - * TODO: following tab support this has been disabled - need to discuss reimplmenting vs syntax. - */ -- (void)insertInOrderedDocuments:(SPDatabaseDocument *)doc -{ - [self newWindow:self]; - - // Set autoconnection if appropriate - if ([[NSUserDefaults standardUserDefaults] boolForKey:SPAutoConnectToDefault]) { - [[self frontDocument] connect]; - } - -} - -/** - * AppleScript calls that method to get the available windows. - */ -- (NSArray *)orderedWindows -{ - return [NSApp orderedWindows]; -} - -/** - * AppleScript handler to quit Sequel Pro - * This handler is needed to allow to quit SP via the Dock or AppleScript after activating it by using AppleScript - */ -- (id)handleQuitScriptCommand:(NSScriptCommand *)command -{ - [NSApp terminate:self]; - return nil; -} - -/** - * AppleScript handler - * This handler is needed to catch an 'open' command if no argument was passed which would cause a crash - */ -- (id)handleOpenScriptCommand:(NSScriptCommand *)command -{ - return nil; -} - -/** - * AppleScript handler for print - * This handler prints the active view - */ -- (id)handlePrintScriptCommand:(NSScriptCommand *)command -{ - SPDatabaseDocument *frontDoc = [self frontDocument]; - if (frontDoc && ![frontDoc isWorking] && ![[frontDoc connectionID] isEqualToString:@"_"]) - [frontDoc startPrintDocumentOperation]; -} - #pragma mark - /** @@ -988,11 +888,13 @@ - (void)dealloc { [[NSNotificationCenter defaultCenter] removeObserver:self]; - - if(_spfSessionDocData) [_spfSessionDocData release], _spfSessionDocData = nil; + [prefsController release], prefsController = nil; [aboutController release], aboutController = nil; - if(_sessionURL) [_sessionURL release], _sessionURL = nil; + + if (_sessionURL) [_sessionURL release], _sessionURL = nil; + if (_spfSessionDocData) [_spfSessionDocData release], _spfSessionDocData = nil; + [super dealloc]; } diff --git a/Source/SPAppleScriptSupport.h b/Source/SPAppleScriptSupport.h new file mode 100644 index 00000000..4878dc4b --- /dev/null +++ b/Source/SPAppleScriptSupport.h @@ -0,0 +1,30 @@ +// +// $Id$ +// +// SPAppleScriptSupport.h +// sequel-pro +// +// Created by Stuart Connolly (stuconnolly.com) on October 14, 2010 +// Copyright (c) 2010 Stuart Connolly. 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 "SPAppController.h" + +@interface SPAppController (SPAppleScriptSupport) + +@end diff --git a/Source/SPAppleScriptSupport.m b/Source/SPAppleScriptSupport.m new file mode 100644 index 00000000..73975a26 --- /dev/null +++ b/Source/SPAppleScriptSupport.m @@ -0,0 +1,135 @@ +// +// $Id$ +// +// SPAppleScriptSupport.m +// sequel-pro +// +// Created by Stuart Connolly (stuconnolly.com) on October 14, 2010 +// Copyright (c) 2010 Stuart Connolly. 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 "SPAppleScriptSupport.h" +#import "SPWindowController.h" +#import "SPConstants.h" + +@implementation SPAppController (SPAppleScriptSupport) + +//////////////// Examples to catch AS core events - maybe for further stuff +// - (void)handleQuitEvent:(NSAppleEventDescriptor *)event withReplyEvent:(NSAppleEventDescriptor *)replyEvent +// { +// [NSApp terminate:self]; +// } +// - (void)handleOpenEvent:(NSAppleEventDescriptor *)event withReplyEvent:(NSAppleEventDescriptor *)replyEvent +// { +// NSLog(@"OPEN "); +// } +// +// - (void)applicationWillFinishLaunching:(NSNotification *)aNotification +// { +// NSAppleEventManager *aeManager = [NSAppleEventManager sharedAppleEventManager]; +// [aeManager setEventHandler:self andSelector:@selector(handleQuitEvent:withReplyEvent:) forEventClass:kCoreEventClass andEventID:kAEQuitApplication]; +// [aeManager setEventHandler:self andSelector:@selector(handleOpenEvent:withReplyEvent:) forEventClass:kCoreEventClass andEventID:kAEOpenApplication]; +// } + +/** + * Is needed to interact with AppleScript for set/get internal SP variables + */ +- (BOOL)application:(NSApplication *)sender delegateHandlesKey:(NSString *)key +{ + NSLog(@"Not yet implemented."); + + return NO; +} + +/** + * AppleScript call to get the available documents. + */ +- (NSArray *)orderedDocuments +{ + NSMutableArray *orderedDocuments = [NSMutableArray array]; + + for (NSWindow *aWindow in [self orderedWindows]) + { + if ([[aWindow windowController] isMemberOfClass:[SPWindowController class]]) { + [orderedDocuments addObjectsFromArray:[[aWindow windowController] documents]]; + } + } + + return orderedDocuments; +} + +/** + * AppleScript support for 'make new document'. + * + * TODO: following tab support this has been disabled - need to discuss reimplmenting vs syntax. + */ +- (void)insertInOrderedDocuments:(SPDatabaseDocument *)doc +{ + [self newWindow:self]; + + // Set autoconnection if appropriate + if ([[NSUserDefaults standardUserDefaults] boolForKey:SPAutoConnectToDefault]) { + [[self frontDocument] connect]; + } +} + +/** + * AppleScript call to get the available windows. + */ +- (NSArray *)orderedWindows +{ + return [NSApp orderedWindows]; +} + +/** + * AppleScript handler to quit Sequel Pro + * + * This handler is required to allow termination via the Dock or AppleScript event after activating it using AppleScript + */ +- (id)handleQuitScriptCommand:(NSScriptCommand *)command +{ + [NSApp terminate:self]; + + return nil; +} + +/** + * AppleScript open handler + * + * This handler is required to catch the 'open' command if no argument was passed which would cause a crash. + */ +- (id)handleOpenScriptCommand:(NSScriptCommand *)command +{ + return nil; +} + +/** + * AppleScript print handler + * + * This handler prints the active view. + */ +- (id)handlePrintScriptCommand:(NSScriptCommand *)command +{ + SPDatabaseDocument *frontDoc = [self frontDocument]; + + if (frontDoc && ![frontDoc isWorking] && ![[frontDoc connectionID] isEqualToString:@"_"]) { + [frontDoc startPrintDocumentOperation]; + } +} + +@end -- cgit v1.2.3