//
// $Id$
//
// SPDatabaseDocument.h
// sequel-pro
//
// Created by lorenz textor (lorenz@textor.ch) on Wed May 01 2002.
// Copyright (c) 2002-2003 Lorenz Textor. All rights reserved.
//
// Forked by Abhi Beckert (abhibeckert.com) 2008-04-04
//
// 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
#import
@class SPConnectionController,
SPProcessListController,
SPServerVariablesController,
SPUserManager,
SPWindowController,
SPServerSupport;
@protocol SPConnectionControllerDelegateProtocol;
/**
* The SPDatabaseDocument class controls the primary database view window.
*/
@interface SPDatabaseDocument : NSObject
{
// IBOutlets
IBOutlet id tablesListInstance;
IBOutlet id tableSourceInstance;
IBOutlet id tableContentInstance;
IBOutlet id tableRelationsInstance;
IBOutlet id tableTriggersInstance;
IBOutlet id customQueryInstance;
IBOutlet id tableDumpInstance;
IBOutlet id tableDataInstance;
IBOutlet id extendedTableInfoInstance;
IBOutlet id databaseDataInstance;
IBOutlet id spHistoryControllerInstance;
IBOutlet id exportControllerInstance;
IBOutlet id statusTableAccessoryView;
IBOutlet id statusTableView;
IBOutlet id statusTableCopyChecksum;
SPUserManager *userManagerInstance;
SPServerSupport *serverSupport;
IBOutlet NSSearchField *listFilterField;
IBOutlet NSView *parentView;
IBOutlet id titleAccessoryView;
IBOutlet id titleImageView;
IBOutlet id titleStringView;
IBOutlet id databaseSheet;
IBOutlet id databaseCopySheet;
IBOutlet id databaseRenameSheet;
IBOutlet id queryProgressBar;
IBOutlet NSBox *taskProgressLayer;
IBOutlet id taskProgressIndicator;
IBOutlet id taskDescriptionText;
IBOutlet NSButton *taskCancelButton;
IBOutlet id favoritesButton;
IBOutlet id databaseNameField;
IBOutlet id databaseEncodingButton;
IBOutlet id addDatabaseButton;
IBOutlet id databaseCopyNameField;
IBOutlet id copyDatabaseDataButton;
IBOutlet id copyDatabaseMessageField;
IBOutlet id copyDatabaseButton;
IBOutlet id databaseRenameNameField;
IBOutlet id renameDatabaseMessageField;
IBOutlet id renameDatabaseButton;
IBOutlet id chooseDatabaseButton;
IBOutlet id historyControl;
IBOutlet NSTabView *tableTabView;
IBOutlet NSTableView *tableInfoTable;
IBOutlet NSButton *tableInfoCollapseButton;
IBOutlet NSSplitView *tableListSplitter;
IBOutlet NSSplitView *contentViewSplitter;
IBOutlet id sidebarGrabber;
IBOutlet NSPopUpButton *encodingPopUp;
IBOutlet NSTextView *customQueryTextView;
IBOutlet NSTableView *dbTablesTableView;
IBOutlet NSTextField *createTableSyntaxTextField;
IBOutlet NSTextView *createTableSyntaxTextView;
IBOutlet NSWindow *createTableSyntaxWindow;
IBOutlet NSWindow *connectionErrorDialog;
IBOutlet id saveConnectionAccessory;
IBOutlet id saveConnectionIncludeData;
IBOutlet id saveConnectionIncludeQuery;
IBOutlet id saveConnectionSavePassword;
IBOutlet id saveConnectionSavePasswordAlert;
IBOutlet id saveConnectionEncrypt;
IBOutlet id saveConnectionAutoConnect;
IBOutlet NSSecureTextField *saveConnectionEncryptString;
IBOutlet id inputTextWindow;
IBOutlet id inputTextWindowHeader;
IBOutlet id inputTextWindowMessage;
IBOutlet id inputTextWindowSecureTextField;
NSInteger passwordSheetReturnCode;
// Controllers
SPConnectionController *connectionController;
SPProcessListController *processListController;
SPServerVariablesController *serverVariablesController;
MCPConnection *mySQLConnection;
NSInteger currentTabIndex;
NSString *selectedTableName;
NSInteger selectedTableType;
BOOL structureLoaded;
BOOL contentLoaded;
BOOL statusLoaded;
BOOL triggersLoaded;
NSString *selectedDatabase;
NSString *mySQLVersion;
NSUserDefaults *prefs;
NSMutableArray *nibObjectsToRelease;
NSMenu *selectEncodingMenu;
BOOL _supportsEncoding;
BOOL _isConnected;
NSInteger _isWorkingLevel;
BOOL _mainNibLoaded;
BOOL databaseListIsSelectable;
NSInteger _queryMode;
BOOL _isSavedInBundle;
NSWindow *taskProgressWindow;
BOOL taskDisplayIsIndeterminate;
CGFloat taskProgressValue;
CGFloat taskDisplayLastValue;
CGFloat taskProgressValueDisplayInterval;
NSTimer *taskDrawTimer;
NSDate *taskFadeInStartDate;
BOOL taskCanBeCancelled;
id taskCancellationCallbackObject;
SEL taskCancellationCallbackSelector;
NSToolbar *mainToolbar;
NSToolbarItem *chooseDatabaseToolbarItem;
WebView *printWebView;
NSMutableArray *allDatabases;
NSMutableArray *allSystemDatabases;
NSString *queryEditorInitString;
NSURL *spfFileURL;
NSDictionary *spfSession;
NSMutableDictionary *spfPreferences;
NSMutableDictionary *spfDocData;
NSMutableArray *runningActivitiesArray;
NSString *keyChainID;
NSThread *printThread;
id statusValues;
NSInteger saveDocPrefSheetStatus;
// Properties
SPWindowController *parentWindowController;
NSWindow *parentWindow;
NSTabViewItem *parentTabViewItem;
BOOL isProcessing;
NSString *processID;
}
@property (readwrite, assign) SPWindowController *parentWindowController;
@property (readwrite, assign) NSTabViewItem *parentTabViewItem;
@property (readwrite, assign) BOOL isProcessing;
@property (readwrite, retain) NSString *processID;
@property (readonly) SPServerSupport *serverSupport;
- (BOOL)isUntitled;
- (BOOL)couldCommitCurrentViewActions;
- (void)initQueryEditorWithString:(NSString *)query;
// Connection callback and methods
- (void)setConnection:(MCPConnection *)theConnection;
- (MCPConnection *)getConnection;
- (void)setKeychainID:(NSString *)theID;
// Database methods
- (IBAction)setDatabases:(id)sender;
- (IBAction)chooseDatabase:(id)sender;
- (void)selectDatabase:(NSString *)aDatabase item:(NSString *)anItem;
- (IBAction)addDatabase:(id)sender;
- (IBAction)removeDatabase:(id)sender;
- (IBAction)refreshTables:(id)sender;
- (IBAction)copyDatabase:(id)sender;
- (IBAction)renameDatabase:(id)sender;
- (IBAction)showMySQLHelp:(id)sender;
- (IBAction)showServerVariables:(id)sender;
- (IBAction)showServerProcesses:(id)sender;
- (IBAction)openCurrentConnectionInNewWindow:(id)sender;
- (NSArray *)allDatabaseNames;
- (NSArray *)allSystemDatabaseNames;
- (NSDictionary *)getDbStructure;
- (NSArray *)allSchemaKeys;
// Task progress and notification methods
- (void)startTaskWithDescription:(NSString *)description;
- (void)fadeInTaskProgressWindow:(NSTimer *)theTimer;
- (void)setTaskDescription:(NSString *)description;
- (void)setTaskPercentage:(CGFloat)taskPercentage;
- (void)setTaskProgressToIndeterminateAfterDelay:(BOOL)afterDelay;
- (void)endTask;
- (void)enableTaskCancellationWithTitle:(NSString *)buttonTitle callbackObject:(id)callbackObject callbackFunction:(SEL)callbackFunction;
- (void)disableTaskCancellation;
- (IBAction)cancelTask:(id)sender;
- (BOOL)isWorking;
- (void)setDatabaseListIsSelectable:(BOOL)isSelectable;
- (void)centerTaskWindow;
- (void)setTaskIndicatorShouldAnimate:(BOOL)shouldAnimate;
// Encoding methods
- (void)setConnectionEncoding:(NSString *)mysqlEncoding reloadingViews:(BOOL)reloadViews;
- (NSString *)databaseEncoding;
- (IBAction)chooseEncoding:(id)sender;
- (BOOL)supportsEncoding;
- (void)updateEncodingMenuWithSelectedEncoding:(NSNumber *)encodingTag;
- (NSNumber *)encodingTagFromMySQLEncoding:(NSString *)mysqlEncoding;
- (NSString *)mysqlEncodingFromEncodingTag:(NSNumber *)encodingTag;
// Table methods
- (IBAction)showCreateTableSyntax:(id)sender;
- (IBAction)copyCreateTableSyntax:(id)sender;
- (IBAction)checkTable:(id)sender;
- (IBAction)analyzeTable:(id)sender;
- (IBAction)optimizeTable:(id)sender;
- (IBAction)repairTable:(id)sender;
- (IBAction)flushTable:(id)sender;
- (IBAction)checksumTable:(id)sender;
- (IBAction)saveCreateSyntax:(id)sender;
- (IBAction)copyCreateTableSyntaxFromSheet:(id)sender;
- (IBAction)focusOnTableContentFilter:(id)sender;
- (IBAction)focusOnTableListFilter:(id)sender;
- (IBAction)export:(id)sender;
- (IBAction)exportSelectedTablesAs:(id)sender;
// Other methods
- (void) setQueryMode:(NSInteger)theQueryMode;
- (IBAction)closeSheet:(id)sender;
- (IBAction)closePanelSheet:(id)sender;
- (void)doPerformQueryService:(NSString *)query;
- (void)doPerformLoadQueryService:(NSString *)query;
- (void)flushPrivileges:(id)sender;
- (void)closeConnection;
- (NSWindow *)getCreateTableSyntaxWindow;
- (void)refreshCurrentDatabase;
- (void)saveConnectionPanelDidEnd:(NSSavePanel *)panel returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo;
- (IBAction)validateSaveConnectionAccessory:(id)sender;
- (BOOL)saveDocumentWithFilePath:(NSString *)fileName inBackground:(BOOL)saveInBackground onlyPreferences:(BOOL)saveOnlyPreferences contextInfo:(NSDictionary*)contextInfo;
- (IBAction)closePasswordSheet:(id)sender;
- (IBAction)backForwardInHistory:(id)sender;
- (IBAction)showUserManager:(id)sender;
- (IBAction)copyChecksumFromSheet:(id)sender;
- (void)setIsSavedInBundle:(BOOL)savedInBundle;
- (void)showConsole:(id)sender;
- (IBAction)showNavigator:(id)sender;
- (IBAction)toggleNavigator:(id)sender;
// Accessor methods
- (NSString *)host;
- (NSString *)name;
- (NSString *)database;
- (NSString *)port;
- (NSString *)mySQLVersion;
- (NSString *)user;
- (NSString *)keyChainID;
- (NSString *)connectionID;
- (NSString *)tabTitleForTooltip;
- (BOOL)isSaveInBundle;
// Notification center methods
- (void)willPerformQuery:(NSNotification *)notification;
- (void)hasPerformedQuery:(NSNotification *)notification;
- (void)applicationWillTerminate:(NSNotification *)notification;
// Menu methods
- (BOOL)validateMenuItem:(NSMenuItem *)menuItem;
- (IBAction)openDatabaseInNewTab:(id)sender;
- (IBAction)saveConnectionSheet:(id)sender;
- (IBAction)import:(id)sender;
- (IBAction)importFromClipboard:(id)sender;
- (IBAction)addConnectionToFavorites:(id)sender;
- (BOOL)isCustomQuerySelected;
// Titlebar methods
- (void)setStatusIconToImageWithName:(NSString *)imagePath;
- (void)setTitlebarStatus:(NSString *)status;
- (void)clearStatusIcon;
// Toolbar methods
- (void)updateWindowTitle:(id)sender;
- (void)setupToolbar;
- (NSString *)selectedToolbarItemIdentifier;
- (NSToolbarItem *)toolbar:(NSToolbar *)toolbar itemForItemIdentifier:(NSString *)itemIdentifier willBeInsertedIntoToolbar:(BOOL)flag;
- (void)updateChooseDatabaseToolbarItemWidth;
// Tab methods
- (void)makeKeyDocument;
- (BOOL)parentTabShouldClose;
- (void)parentTabDidClose;
- (void)willResignActiveTabInWindow;
- (void)didBecomeActiveTabInWindow;
- (void)tabDidBecomeKey;
- (void)tabDidResize;
- (void)setIsProcessing:(BOOL)value;
- (BOOL)isProcessing;
- (void)setParentWindow:(NSWindow *)aWindow;
- (NSWindow *)parentWindow;
// Scripting
- (NSString*)doSQLSyntaxHighlightForString:(NSString*)sqlText cssLike:(BOOL)cssLike;
- (void)handleSchemeCommand:(NSDictionary*)commandDict;
- (void)registerActivity:(NSDictionary*)commandDict;
- (void)removeRegisteredActivity:(NSInteger)pid;
- (NSArray*)runningActivities;
- (NSDictionary*)shellVariables;
// State saving and setting
- (NSDictionary *) stateIncludingDetails:(NSDictionary *)detailsToReturn;
- (BOOL)setState:(NSDictionary *)stateDetails;
- (void)setStateFromConnectionFile:(NSString *)path;
@end