diff options
Diffstat (limited to 'Source')
-rw-r--r-- | Source/SPProcessListController.m | 7 | ||||
-rw-r--r-- | Source/SPServerVariablesController.h | 53 | ||||
-rw-r--r-- | Source/SPServerVariablesController.m | 373 | ||||
-rw-r--r-- | Source/TableDocument.h | 22 | ||||
-rw-r--r-- | Source/TableDocument.m | 265 |
5 files changed, 470 insertions, 250 deletions
diff --git a/Source/SPProcessListController.m b/Source/SPProcessListController.m index c1f52d3c..af160177 100644 --- a/Source/SPProcessListController.m +++ b/Source/SPProcessListController.m @@ -26,8 +26,9 @@ #import <MCPKit/MCPKit.h> #import "SPProcessListController.h" -#import "SPConstants.h" #import "SPArrayAdditions.h" +#import "TableDocument.h" +#import "SPConstants.h" @interface SPProcessListController (PrivateAPI) @@ -277,9 +278,9 @@ */ - (void)savePanelDidEnd:(NSSavePanel *)panel returnCode:(NSInteger)returnCode contextInfo:(NSString *)contextInfo { - if (returnCode == NSAlertDefaultReturn) { + if (returnCode == NSOKButton) { if ([processesFiltered count] > 0) { - NSMutableString *processesString = [NSMutableString string]; + NSMutableString *processesString = [NSMutableString stringWithFormat:@"# MySQL server proceese for %@\n\n", [(TableDocument *)[[NSApp mainWindow] delegate] host]]; for (NSDictionary *process in processesFiltered) { diff --git a/Source/SPServerVariablesController.h b/Source/SPServerVariablesController.h new file mode 100644 index 00000000..3b90ae83 --- /dev/null +++ b/Source/SPServerVariablesController.h @@ -0,0 +1,53 @@ +// +// $Id$ +// +// SPServerVariablesController.h +// sequel-pro +// +// Created by Stuart Connolly (stuconnolly.com) on November 13, 2009 +// Copyright (c) 2009 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 <http://code.google.com/p/sequel-pro/> + +#import <Cocoa/Cocoa.h> + +@class MCPConnection; + +@interface SPServerVariablesController : NSWindowController +{ + MCPConnection *connection; + + NSMutableArray *variables, *variablesFiltered; + + IBOutlet NSTableView *variablesTableView; + IBOutlet NSButton *saveVariablesButton; + IBOutlet NSTextField *variablesCountTextField; + IBOutlet NSSearchField *filterVariablesSearchField; +} + +@property (readwrite, assign) MCPConnection *connection; + +- (IBAction)copy:(id)sender; +- (IBAction)copyServerVariableName:(id)sender; +- (IBAction)copyServerVariableValue:(id)sender; + +- (IBAction)closeSheet:(id)sender; +- (IBAction)saveServerVariables:(id)sender; + +- (void)displayServerVariablesSheetAttachedToWindow:(NSWindow *)window; + +@end diff --git a/Source/SPServerVariablesController.m b/Source/SPServerVariablesController.m new file mode 100644 index 00000000..ca4f53b1 --- /dev/null +++ b/Source/SPServerVariablesController.m @@ -0,0 +1,373 @@ +// +// $Id$ +// +// SPServerVariablesController.m +// sequel-pro +// +// Created by Stuart Connolly (stuconnolly.com) on November 13, 2009 +// Copyright (c) 2009 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 <http://code.google.com/p/sequel-pro/> + +#import <MCPKit/MCPKit.h> + +#import "SPServerVariablesController.h" +#import "SPArrayAdditions.h" +#import "TableDocument.h" +#import "SPConstants.h" + +@interface SPServerVariablesController (PrivateAPI) + +- (void)_getDatabaseServerVariables; +- (void)_updateServerVariablesFilterForFilterString:(NSString *)filterString; +- (void)_copyServerVariablesToPasteboardIncludingName:(BOOL)name andValue:(BOOL)value; + +@end + +@implementation SPServerVariablesController + +@synthesize connection; + +/** + * Initialisation + */ +- (id)init +{ + if ((self = [super initWithWindowNibName:@"DatabaseServerVariables"])) { + variables = [[NSMutableArray alloc] init]; + } + + return self; +} + +/** + * Interface initialisation + */ +- (void)awakeFromNib +{ + // Set the process table view's vertical gridlines if required + [variablesTableView setGridStyleMask:([[NSUserDefaults standardUserDefaults] boolForKey:SPDisplayTableViewVerticalGridlines]) ? NSTableViewSolidVerticalGridLineMask : NSTableViewGridNone]; +} + +#pragma mark - +#pragma mark IBAction methods + +/** + * Copy implementation for server variables table view. + */ +- (IBAction)copy:(id)sender +{ + [self _copyServerVariablesToPasteboardIncludingName:YES andValue:YES]; +} + +/** + * Copies the name(s) of the selected server variables. + */ +- (IBAction)copyServerVariableName:(id)sender +{ + [self _copyServerVariablesToPasteboardIncludingName:YES andValue:NO]; +} + +/** + * Copies the value(s) of the selected server variables. + */ +- (IBAction)copyServerVariableValue:(id)sender +{ + [self _copyServerVariablesToPasteboardIncludingName:NO andValue:YES]; +} + +/** + * Close the server variables sheet. + */ +- (IBAction)closeSheet:(id)sender +{ + [NSApp endSheet:[self window] returnCode:[sender tag]]; + [[self window] orderOut:self]; + + // If the filtered array is allocated and it's not a reference to the processes array get rid of it + if ((variablesFiltered) && (variablesFiltered != variables)) { + [variablesFiltered release], variablesFiltered = nil; + } +} + +/** + * Saves the server variables to the selected file. + */ +- (IBAction)saveServerVariables:(id)sender +{ + NSSavePanel *panel = [NSSavePanel savePanel]; + + [panel setRequiredFileType:@"cnf"]; + + [panel setExtensionHidden:NO]; + [panel setAllowsOtherFileTypes:YES]; + [panel setCanSelectHiddenExtension:YES]; + + [panel beginSheetForDirectory:nil file:@"ServerVariables" modalForWindow:[self window] modalDelegate:self didEndSelector:@selector(savePanelDidEnd:returnCode:contextInfo:) contextInfo:nil]; +} + + +#pragma mark - +#pragma mark Other methods + +/** + * Displays the process list sheet attached to the supplied window. + */ +- (void)displayServerVariablesSheetAttachedToWindow:(NSWindow *)window +{ + // Weak reference + variablesFiltered = variables; + + // Get the variables + [self _getDatabaseServerVariables]; + + // Reload the tableview + [variablesTableView reloadData]; + + // If the search field already has value from when the panel was previously open, apply the filter. + if ([[filterVariablesSearchField stringValue] length] > 0) { + [self _updateServerVariablesFilterForFilterString:[filterVariablesSearchField stringValue]]; + } + + // Open the sheet + [NSApp beginSheet:[self window] modalForWindow:window modalDelegate:self didEndSelector:nil contextInfo:nil]; +} + +/** + * Invoked when the save panel is dismissed. + */ +- (void)savePanelDidEnd:(NSSavePanel *)panel returnCode:(NSInteger)returnCode contextInfo:(NSString *)contextInfo +{ + if (returnCode == NSOKButton) { + if ([variablesFiltered count] > 0) { + NSMutableString *variablesString = [NSMutableString stringWithFormat:@"# MySQL server variables for %@\n\n", [(TableDocument *)[[NSApp mainWindow] delegate] host]]; + + for (NSDictionary *variable in variablesFiltered) + { + [variablesString appendString:[NSString stringWithFormat:@"%@ = %@\n", [variable objectForKey:@"Variable_name"], [variable objectForKey:@"Value"]]]; + } + + [variablesString writeToFile:[panel filename] atomically:YES encoding:NSUTF8StringEncoding error:NULL]; + } + } +} + +/** + * Menu item validation. + */ +- (BOOL)validateMenuItem:(NSMenuItem *)menuItem +{ + SEL action = [menuItem action]; + + if (action == @selector(copy:)) { + return ([variablesTableView numberOfSelectedRows] > 0); + } + + // Copy selected server variable name(s) + if ([menuItem action] == @selector(copyServerVariableName:)) { + [menuItem setTitle:([variablesTableView numberOfSelectedRows] > 1) ? NSLocalizedString(@"Copy Variable Names", @"copy server variable names menu item") : NSLocalizedString(@"Copy Variable Name", @"copy server variable name menu item")]; + + return ([variablesTableView numberOfSelectedRows] > 0); + } + + // Copy selected server variable value(s) + if ([menuItem action] == @selector(copyServerVariableValue:)) { + [menuItem setTitle:([variablesTableView numberOfSelectedRows] > 1) ? NSLocalizedString(@"Copy Variable Values", @"copy server variable values menu item") : NSLocalizedString(@"Copy Variable Value", @"copy server variable value menu item")]; + + return ([variablesTableView numberOfSelectedRows] > 0); + } + + return YES; +} + +/** + * This method is called as part of Key Value Observing which is used to watch for prefernce changes which effect the interface. + */ +- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context +{ + if ([keyPath isEqualToString:SPDisplayTableViewVerticalGridlines]) { + [variablesTableView setGridStyleMask:([[change objectForKey:NSKeyValueChangeNewKey] boolValue]) ? NSTableViewSolidVerticalGridLineMask : NSTableViewGridNone]; + } +} + +#pragma mark - +#pragma mark Tableview delegate methods + +/** + * Table view delegate method. Returns the number of rows in the table veiw. + */ +- (int)numberOfRowsInTableView:(NSTableView *)tableView +{ + return [variablesFiltered count]; +} + +/** + * Table view delegate method. Returns the specific object for the request column and row. + */ +- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row +{ + return [[variablesFiltered objectAtIndex:row] valueForKey:[tableColumn identifier]]; +} + +#pragma mark - +#pragma mark Text field delegate methods + +/** + * Apply the filter string to the current process list. + */ +- (void)controlTextDidChange:(NSNotification *)notification +{ + id object = [notification object]; + + if (object == filterVariablesSearchField) { + [self _updateServerVariablesFilterForFilterString:[object stringValue]]; + } +} + +#pragma mark - + +/** + * Dealloc + */ +- (void)dealloc +{ + [variables release], variables = nil; + + [super dealloc]; +} + +@end + +@implementation SPServerVariablesController (PrivateAPI) + +/** + * Gets the database's current server variables. + */ +- (void)_getDatabaseServerVariables +{ + NSUInteger i = 0; + + // Get processes + MCPResult *serverVariables = [connection queryString:@"SHOW VARIABLES"]; + + if ([serverVariables numOfRows]) [serverVariables dataSeek:0]; + + [variables removeAllObjects]; + + for (i = 0; i < [serverVariables numOfRows]; i++) + { + [variables addObject:[serverVariables fetchRowAsDictionary]]; + } +} + +/** + * Filter the displayed server variables by matching the variable name and value against the + * filter string. + */ +- (void)_updateServerVariablesFilterForFilterString:(NSString *)filterString +{ + [saveVariablesButton setEnabled:NO]; + + filterString = [[filterString lowercaseString] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; + + // If the filtered array is allocated and its not a reference to the variables array + // relase it to prevent memory leaks upon the next allocation. + if ((variablesFiltered) && (variablesFiltered != variables)) { + [variablesFiltered release], variablesFiltered = nil; + } + + variablesFiltered = [[NSMutableArray alloc] init]; + + if ([filterString length] == 0) { + [variablesFiltered release]; + variablesFiltered = variables; + + [saveVariablesButton setEnabled:YES]; + [saveVariablesButton setTitle:@"Save As..."]; + [variablesCountTextField setStringValue:@""]; + + [variablesTableView reloadData]; + + return; + } + + for (NSDictionary *variable in variables) + { + if (([[variable objectForKey:@"Variable_name"] rangeOfString:filterString options:NSCaseInsensitiveSearch].location != NSNotFound) || + ([[variable objectForKey:@"Value"] rangeOfString:filterString options:NSCaseInsensitiveSearch].location != NSNotFound)) + { + [variablesFiltered addObject:variable]; + } + } + + [variablesTableView reloadData]; + + [variablesCountTextField setHidden:NO]; + [variablesCountTextField setStringValue:[NSString stringWithFormat:NSLocalizedString(@"%d of %d", "filtered server variables count"), [variablesFiltered count], [variables count]]]; + + if ([variablesFiltered count] == 0) return; + + [saveVariablesButton setEnabled:YES]; + [saveVariablesButton setTitle:@"Save View As..."]; +} + +/** + * Copies either the name or value or both (as name = value pairs) of the currently selected server variables. + */ +- (void)_copyServerVariablesToPasteboardIncludingName:(BOOL)name andValue:(BOOL)value +{ + // At least one of either name or value must be true + if ((!name) && (!value)) return; + + NSResponder *firstResponder = [[self window] firstResponder]; + + if ((firstResponder == variablesTableView) && ([variablesTableView numberOfSelectedRows] > 0)) { + + NSString *string = @""; + NSIndexSet *rows = [variablesTableView selectedRowIndexes]; + + NSUInteger i = [rows firstIndex]; + + while (i != NSNotFound) + { + if (i < [variablesFiltered count]) { + NSDictionary *variable = NSArrayObjectAtIndex(variablesFiltered, i); + + NSString *variableName = [variable objectForKey:@"Variable_name"]; + NSString *variableValue = [variable objectForKey:@"Value"]; + + // Decide what to include in the string + if (name && value) { + string = [string stringByAppendingFormat:@"%@ = %@\n", variableName, variableValue]; + } + else { + string = [string stringByAppendingFormat:@"%@\n", (name) ? variableName : variableValue]; + } + } + + i = [rows indexGreaterThanIndex:i]; + } + + NSPasteboard *pasteBoard = [NSPasteboard generalPasteboard]; + + // Copy the string to the pasteboard + [pasteBoard declareTypes:[NSArray arrayWithObjects:NSStringPboardType, nil] owner:nil]; + [pasteBoard setString:string forType:NSStringPboardType]; + } +} + +@end diff --git a/Source/TableDocument.h b/Source/TableDocument.h index ab36ffb3..a577a6c4 100644 --- a/Source/TableDocument.h +++ b/Source/TableDocument.h @@ -29,7 +29,7 @@ #import <MCPKit/MCPKit.h> #import <WebKit/WebKit.h> -@class SPConnectionController, SPProcessListController, SPUserManager; +@class SPConnectionController, SPProcessListController, SPServerVariablesController, SPUserManager; enum sp_current_query_mode { @@ -55,8 +55,9 @@ enum sp_current_query_mode IBOutlet id databaseDataInstance; IBOutlet id spHistoryControllerInstance; IBOutlet id exportControllerInstance; + IBOutlet SPUserManager *userManagerInstance; - + IBOutlet NSSearchField *listFilterField; IBOutlet id tableWindow; @@ -66,7 +67,6 @@ enum sp_current_query_mode IBOutlet id titleStringView; IBOutlet id databaseSheet; - IBOutlet id variablesSheet; IBOutlet id queryProgressBar; IBOutlet NSBox *taskProgressLayer; @@ -81,11 +81,7 @@ enum sp_current_query_mode IBOutlet id addDatabaseButton; IBOutlet id chooseDatabaseButton; IBOutlet id historyControl; - IBOutlet id variablesTableView; IBOutlet NSTabView *tableTabView; - IBOutlet NSButton *saveVariablesButton; - IBOutlet NSSearchField *variablesSearchField; - IBOutlet NSTextField *variablesCountTextField; IBOutlet NSTableView *tableInfoTable; IBOutlet NSButton *tableInfoCollapseButton; @@ -118,9 +114,11 @@ enum sp_current_query_mode IBOutlet id inputTextWindowMessage; IBOutlet id inputTextWindowSecureTextField; int passwordSheetReturnCode; - + + // Controllers SPConnectionController *connectionController; SPProcessListController *processListController; + SPServerVariablesController *serverVariablesController; MCPConnection *mySQLConnection; @@ -183,8 +181,8 @@ enum sp_current_query_mode - (IBAction)addDatabase:(id)sender; - (IBAction)removeDatabase:(id)sender; - (IBAction)showMySQLHelp:(id)sender; -- (IBAction)saveServerVariables:(id)sender; -- (IBAction)showDatabaseProcessList:(id)sender; +- (IBAction)showServerVariables:(id)sender; +- (IBAction)showServerProcesses:(id)sender; - (IBAction)openCurrentConnectionInNewWindow:(id)sender; - (NSArray *)allDatabaseNames; @@ -230,7 +228,6 @@ enum sp_current_query_mode - (void)doPerformQueryService:(NSString *)query; - (void)doPerformLoadQueryService:(NSString *)query; - (void)flushPrivileges:(id)sender; -- (void)showVariables:(id)sender; - (void)closeConnection; - (NSWindow *)getCreateTableSyntaxWindow; - (void)refreshCurrentDatabase; @@ -239,9 +236,6 @@ enum sp_current_query_mode - (BOOL)saveDocumentWithFilePath:(NSString *)fileName inBackground:(BOOL)saveInBackground onlyPreferences:(BOOL)saveOnlyPreferences; - (IBAction)closePasswordSheet:(id)sender; - (IBAction)backForwardInHistory:(id)sender; -- (IBAction)copy:(id)sender; -- (IBAction)copyServerVariableName:(id)sender; -- (IBAction)copyServerVariableValue:(id)sender; - (IBAction)showUserManager:(id)sender; // Getter methods diff --git a/Source/TableDocument.m b/Source/TableDocument.m index 683d6237..6e3c91ca 100644 --- a/Source/TableDocument.m +++ b/Source/TableDocument.m @@ -53,6 +53,7 @@ #import "SPConstants.h" #import "YRKSpinningProgressIndicator.h" #import "SPProcessListController.h" +#import "SPServerVariablesController.h" // Printing #import "MGTemplateEngine.h" @@ -62,8 +63,6 @@ - (void)_addDatabase; - (void)_removeDatabase; -- (void)_updateServerVariablesFilterForFilterString:(NSString *)filterString; -- (void)_copyServerVariablesToPasteboardIncludingName:(BOOL)name andValue:(BOOL)value; @end @@ -106,7 +105,6 @@ taskFadeAnimator = nil; keyChainID = nil; - } return self; @@ -168,9 +166,6 @@ // Set the connection controller's delegate [connectionController setDelegate:self]; - // Set the server variables table view's vertical gridlines if required - [variablesTableView setGridStyleMask:([[NSUserDefaults standardUserDefaults] boolForKey:SPDisplayTableViewVerticalGridlines]) ? NSTableViewSolidVerticalGridLineMask : NSTableViewGridNone]; - // Register observers for when the DisplayTableViewVerticalGridlines preference changes [prefs addObserver:self forKeyPath:SPDisplayTableViewVerticalGridlines options:NSKeyValueObservingOptionNew context:NULL]; [prefs addObserver:tableSourceInstance forKeyPath:SPDisplayTableViewVerticalGridlines options:NSKeyValueObservingOptionNew context:NULL]; @@ -1051,9 +1046,26 @@ } /** + * Displays the database server variables sheet. + */ +- (IBAction)showServerVariables:(id)sender +{ + if (!serverVariablesController) { + serverVariablesController = [[SPServerVariablesController alloc] init]; + + [serverVariablesController setConnection:mySQLConnection]; + + // Register to obeserve table view vertical grid line pref changes + [prefs addObserver:serverVariablesController forKeyPath:SPDisplayTableViewVerticalGridlines options:NSKeyValueObservingOptionNew context:NULL]; + } + + [serverVariablesController displayServerVariablesSheetAttachedToWindow:tableWindow]; +} + +/** * Displays the database process list sheet. */ -- (IBAction)showDatabaseProcessList:(id)sender +- (IBAction)showServerProcesses:(id)sender { if (!processListController) { processListController = [[SPProcessListController alloc] init]; @@ -2033,41 +2045,6 @@ { [NSApp endSheet:[sender window] returnCode:[sender tag]]; [[sender window] orderOut:self]; - - // If it was the server variables sheet that was closed release the relevant arrays if necessary - if ([sender window] == variablesSheet) { - - // If the filtered array is allocated and it's not a reference to the variables array get rid of it - if ((variablesFiltered) && (variablesFiltered != variables)) { - [variablesFiltered release], variablesFiltered = nil; - } - - if (variables) [variables release], variables = nil; - } -} - -/** - * Copy implementation for server variables table view. - */ -- (IBAction)copy:(id)sender -{ - [self _copyServerVariablesToPasteboardIncludingName:YES andValue:YES]; -} - -/** - * Copies the name(s) of the selected server variables. - */ -- (IBAction)copyServerVariableName:(id)sender -{ - [self _copyServerVariablesToPasteboardIncludingName:YES andValue:NO]; -} - -/** - * Copies the value(s) of the selected server variables. - */ -- (IBAction)copyServerVariableValue:(id)sender -{ - [self _copyServerVariablesToPasteboardIncludingName:NO andValue:YES]; } /** @@ -2117,46 +2094,6 @@ } } -/** - * Shows the MySQL server variables - */ -- (void)showVariables:(id)sender -{ - int i; - - [variablesCountTextField setStringValue:@""]; - - if (variables) [variables release], variables = nil; - - // Get variables - MCPResult *theResult = [mySQLConnection queryString:@"SHOW VARIABLES"]; - - if ([theResult numOfRows]) [theResult dataSeek:0]; - - variables = [[NSMutableArray alloc] init]; - - for ( i = 0 ; i < [theResult numOfRows] ; i++ ) { - [variables addObject:[theResult fetchRowAsDictionary]]; - } - - // Weak reference - variablesFiltered = variables; - - [variablesTableView reloadData]; - - // If the search field already has value from when the panel was previously open, apply the filter. - if ([[variablesSearchField stringValue] length] > 0) { - [self _updateServerVariablesFilterForFilterString:[variablesSearchField stringValue]]; - } - - // Show variables sheet - [NSApp beginSheet:variablesSheet - modalForWindow:tableWindow - modalDelegate:self - didEndSelector:nil - contextInfo:nil]; -} - - (IBAction)openCurrentConnectionInNewWindow:(id)sender { TableDocument *newTableDocument; @@ -2190,9 +2127,6 @@ if ([keyPath isEqualToString:SPConsoleEnableLogging]) { [mySQLConnection setDelegateQueryLogging:[[change objectForKey:NSKeyValueChangeNewKey] boolValue]]; } - else if ([keyPath isEqualToString:SPDisplayTableViewVerticalGridlines]) { - [variablesTableView setGridStyleMask:([[change objectForKey:NSKeyValueChangeNewKey] boolValue]) ? NSTableViewSolidVerticalGridLineMask : NSTableViewGridNone]; - } } /* @@ -2811,22 +2745,6 @@ } /** - * Saves the server variables to the selected file. - */ -- (IBAction)saveServerVariables:(id)sender -{ - NSSavePanel *panel = [NSSavePanel savePanel]; - - [panel setRequiredFileType:@"cnf"]; - - [panel setExtensionHidden:NO]; - [panel setAllowsOtherFileTypes:YES]; - [panel setCanSelectHiddenExtension:YES]; - - [panel beginSheetForDirectory:nil file:@"ServerVariables" modalForWindow:variablesSheet modalDelegate:self didEndSelector:@selector(savePanelDidEnd:returnCode:contextInfo:) contextInfo:@"ServerVariables"]; -} - -/** * Menu item validation. */ - (BOOL)validateMenuItem:(NSMenuItem *)menuItem @@ -2911,25 +2829,6 @@ if (([menuItem action] == @selector(backForwardInHistory:)) && ([menuItem tag] == 1)) { return (([[spHistoryControllerInstance history] count]) && (([spHistoryControllerInstance historyPosition] + 1) < [[spHistoryControllerInstance history] count])); } - - // Copy selected server variable(s) - if ([menuItem action] == @selector(copy:)) { - return ([variablesTableView numberOfSelectedRows] > 0); - } - - // Copy selected server variable name(s) - if ([menuItem action] == @selector(copyServerVariableName:)) { - [menuItem setTitle:([variablesTableView numberOfSelectedRows] > 1) ? NSLocalizedString(@"Copy Variable Names", @"copy server variable names menu item") : NSLocalizedString(@"Copy Variable Name", @"copy server variable name menu item")]; - - return ([variablesTableView numberOfSelectedRows] > 0); - } - - // Copy selected server variable value(s) - if ([menuItem action] == @selector(copyServerVariableValue:)) { - [menuItem setTitle:([variablesTableView numberOfSelectedRows] > 1) ? NSLocalizedString(@"Copy Variable Values", @"copy server variable values menu item") : NSLocalizedString(@"Copy Variable Value", @"copy server variable value menu item")]; - - return ([variablesTableView numberOfSelectedRows] > 0); - } // Show/hide console if ([menuItem action] == @selector(toggleConsole:)) { @@ -3134,10 +3033,6 @@ [titleImageView setImage:nil]; } - - - - #pragma mark - #pragma mark Toolbar Methods @@ -3396,13 +3291,13 @@ * Code that need to be executed once the windowController has loaded the document's window * sets upt the interface (small fonts). */ -- (void)windowControllerDidLoadNib:(NSWindowController *) aController +- (void)windowControllerDidLoadNib:(NSWindowController *)aController { [aController setShouldCascadeWindows:YES]; [super windowControllerDidLoadNib:aController]; - NSEnumerator *theCols = [[variablesTableView tableColumns] objectEnumerator]; - NSTableColumn *theCol; + //NSEnumerator *theCols = [[variablesTableView tableColumns] objectEnumerator]; + //NSTableColumn *theCol; //register for notifications [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(willPerformQuery:) @@ -3413,7 +3308,7 @@ name:@"NSApplicationWillTerminateNotification" object:nil]; //set up interface - if ( [prefs boolForKey:SPUseMonospacedFonts] ) { + /*if ( [prefs boolForKey:SPUseMonospacedFonts] ) { [[SPQueryController sharedQueryController] setConsoleFont:[NSFont fontWithName:@"Monaco" size:[NSFont smallSystemFontSize]]]; while ( (theCol = [theCols nextObject]) ) { @@ -3425,7 +3320,7 @@ while ( (theCol = [theCols nextObject]) ) { [[theCol dataCell] setFont:[NSFont systemFontOfSize:[NSFont smallSystemFontSize]]]; } - } + }*/ } // NSWindow delegate methods @@ -3657,11 +3552,6 @@ if (object == databaseNameField) { [addDatabaseButton setEnabled:([[databaseNameField stringValue] length] > 0)]; } - - else if (object == variablesSearchField) { - [self _updateServerVariablesFilterForFilterString:[object stringValue]]; - } - else if (object == saveConnectionEncryptString) { [saveConnectionEncryptString setStringValue:[saveConnectionEncryptString stringValue]]; } @@ -3748,21 +3638,24 @@ - (void)dealloc { [_encoding release]; + [allDatabases release]; [printWebView release]; + if (connectionController) [connectionController release]; if (processListController) [processListController release]; + if (serverVariablesController) [serverVariablesController release]; if (mySQLConnection) [mySQLConnection release]; if (variables) [variables release]; if (selectedDatabase) [selectedDatabase release]; if (mySQLVersion) [mySQLVersion release]; - [allDatabases release]; if (taskDrawTimer) [taskDrawTimer release]; if (taskFadeAnimator) [taskFadeAnimator release]; - if(queryEditorInitString) [queryEditorInitString release]; - if(spfSession) [spfSession release]; - if(spfDocData) [spfDocData release]; - if(keyChainID) [keyChainID release]; + if (queryEditorInitString) [queryEditorInitString release]; + if (spfSession) [spfSession release]; + if (spfDocData) [spfDocData release]; + if (keyChainID) [keyChainID release]; if (taskProgressWindow) [taskProgressWindow release]; + [super dealloc]; } @@ -3852,98 +3745,4 @@ [tableWindow setTitle:[self displaySPName]]; } -/** - * Filter the displayed server variables by matching the variable name and value against the - * filter string. - */ -- (void)_updateServerVariablesFilterForFilterString:(NSString *)filterString -{ - [saveVariablesButton setEnabled:NO]; - - filterString = [[filterString lowercaseString] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; - - // If the filtered array is allocated and its not a reference to the variables array - // relase it to prevent memory leaks upon the next allocation. - if ((variablesFiltered) && (variablesFiltered != variables)) { - [variablesFiltered release], variablesFiltered = nil; - } - - variablesFiltered = [[NSMutableArray alloc] init]; - - if ([filterString length] == 0) { - [variablesFiltered release]; - variablesFiltered = variables; - - [saveVariablesButton setEnabled:YES]; - [saveVariablesButton setTitle:@"Save As..."]; - [variablesCountTextField setStringValue:@""]; - - [variablesTableView reloadData]; - - return; - } - - for (NSDictionary *variable in variables) - { - if (([[variable objectForKey:@"Variable_name"] rangeOfString:filterString options:NSCaseInsensitiveSearch].location != NSNotFound) || - ([[variable objectForKey:@"Value"] rangeOfString:filterString options:NSCaseInsensitiveSearch].location != NSNotFound)) - { - [variablesFiltered addObject:variable]; - } - } - - [variablesTableView reloadData]; - [variablesCountTextField setStringValue:[NSString stringWithFormat:NSLocalizedString(@"%d of %d", "filtered server variables count"), [variablesFiltered count], [variables count]]]; - - if ([variablesFiltered count] == 0) return; - - [saveVariablesButton setEnabled:YES]; - [saveVariablesButton setTitle:@"Save View As..."]; -} - -/** - * Copies either the name or value or both (as name = value pairs) of the currently selected server variables. - */ -- (void)_copyServerVariablesToPasteboardIncludingName:(BOOL)name andValue:(BOOL)value -{ - // At least one of either name or value must be true - if ((!name) && (!value)) return; - - NSResponder *firstResponder = [variablesSheet firstResponder]; - - if ((firstResponder == variablesTableView) && ([variablesTableView numberOfSelectedRows] > 0)) { - - NSString *string = @""; - NSIndexSet *rows = [variablesTableView selectedRowIndexes]; - - NSUInteger i = [rows firstIndex]; - - while (i != NSNotFound) - { - if (i < [variablesFiltered count]) { - NSDictionary *variable = NSArrayObjectAtIndex(variablesFiltered, i); - - NSString *variableName = [variable objectForKey:@"Variable_name"]; - NSString *variableValue = [variable objectForKey:@"Value"]; - - // Decide what to include in the string - if (name && value) { - string = [string stringByAppendingFormat:@"%@ = %@\n", variableName, variableValue]; - } - else { - string = [string stringByAppendingFormat:@"%@\n", (name) ? variableName : variableValue]; - } - } - - i = [rows indexGreaterThanIndex:i]; - } - - NSPasteboard *pasteBoard = [NSPasteboard generalPasteboard]; - - // Copy the string to the pasteboard - [pasteBoard declareTypes:[NSArray arrayWithObjects:NSStringPboardType, nil] owner:nil]; - [pasteBoard setString:string forType:NSStringPboardType]; - } -} - @end |