diff options
author | stuconnolly <stuart02@gmail.com> | 2009-10-01 12:12:48 +0000 |
---|---|---|
committer | stuconnolly <stuart02@gmail.com> | 2009-10-01 12:12:48 +0000 |
commit | 9f7b5dccfae711371970031b3e79f671213441d6 (patch) | |
tree | 206bad35d400a2ddf2717f5fd81f1b5d58f16f9e /Source | |
parent | 67d16c468fe2a7e182e19e1cea24961a735ec05e (diff) | |
download | sequelpro-9f7b5dccfae711371970031b3e79f671213441d6.tar.gz sequelpro-9f7b5dccfae711371970031b3e79f671213441d6.tar.bz2 sequelpro-9f7b5dccfae711371970031b3e79f671213441d6.zip |
- Replace the create syntax transparent HUD panel with a standard sheet, which displays the create syntax in the same non-editable version of the custom query editor. Addresses issue #411.
- Add the ability to save the displayed create syntax to a file on disk.
- Change the 'Show Create Syntax' shortcut from shift+cmd+S (its already in use) to alt+cmd+S.
- Make both the create syntax and server variables sheets not run application modally and thus prevent them from blocking the main thread. Part of issue #351.
Diffstat (limited to 'Source')
-rw-r--r-- | Source/TableDocument.h | 7 | ||||
-rw-r--r-- | Source/TableDocument.m | 145 |
2 files changed, 103 insertions, 49 deletions
diff --git a/Source/TableDocument.h b/Source/TableDocument.h index 57cbeb4f..89603085 100644 --- a/Source/TableDocument.h +++ b/Source/TableDocument.h @@ -93,8 +93,8 @@ enum sp_current_query_mode IBOutlet NSTableView *dbTablesTableView; - IBOutlet id syntaxView; - IBOutlet id syntaxViewContent; + IBOutlet NSTextField *createTableSyntaxTextField; + IBOutlet NSTextView *createTableSyntaxTextView; IBOutlet NSWindow *createTableSyntaxWindow; IBOutlet NSWindow *connectionErrorDialog; @@ -144,7 +144,6 @@ enum sp_current_query_mode NSDictionary *spfSession; NSMutableDictionary *spfPreferences; NSMutableDictionary *spfDocData; - } - (NSString *)getHTMLforPrint; @@ -188,12 +187,14 @@ enum sp_current_query_mode - (IBAction)repairTable:(id)sender; - (IBAction)flushTable:(id)sender; - (IBAction)checksumTable:(id)sender; +- (IBAction)saveCreateSyntax:(id)sender; // Other methods - (void) setQueryMode:(int)theQueryMode; - (NSString *)host; - (IBAction)closeSheet:(id)sender; - (IBAction)closeErrorConnectionSheet:(id)sender; +- (IBAction)closePanelSheet:(id)sender; - (void)doPerformQueryService:(NSString *)query; - (void)doPerformLoadQueryService:(NSString *)query; - (void)flushPrivileges:(id)sender; diff --git a/Source/TableDocument.m b/Source/TableDocument.m index 6c1bd042..c685c89b 100644 --- a/Source/TableDocument.m +++ b/Source/TableDocument.m @@ -175,11 +175,23 @@ av.size.height); [titleAccessoryView setFrame:initialAccessoryViewFrame]; [windowFrame addSubview:titleAccessoryView]; + + // Bind the background color of the create syntax text view to the users preference + [createTableSyntaxTextView setAllowsDocumentBackgroundColorChange:YES]; + + NSMutableDictionary *bindingOptions = [NSMutableDictionary dictionary]; + + [bindingOptions setObject:NSUnarchiveFromDataTransformerName forKey:@"NSValueTransformerName"]; + + [createTableSyntaxTextView bind:@"backgroundColor" + toObject:[NSUserDefaultsController sharedUserDefaultsController] + withKeyPath:@"values.CustomQueryEditorBackgroundColor" + options:bindingOptions]; // Load additional nibs if (![NSBundle loadNibNamed:@"ConnectionErrorDialog" owner:self]) { NSLog(@"Connection error dialog could not be loaded; connection failure handling will not function correctly."); - } + } } - (void)initWithConnectionFile:(NSString *)path @@ -1327,31 +1339,30 @@ - (IBAction)showCreateTableSyntax:(id)sender { //Create the query and get results - NSString *query = nil; - NSString *createWindowTitle; int colOffs = 1; + NSString *query = nil; + NSString *typeString = @""; if( [tablesListInstance tableType] == SP_TABLETYPE_TABLE ) { query = [NSString stringWithFormat:@"SHOW CREATE TABLE %@", [[self table] backtickQuotedString]]; - createWindowTitle = @"Create Table Syntax"; + typeString = @"table"; } else if( [tablesListInstance tableType] == SP_TABLETYPE_VIEW ) { query = [NSString stringWithFormat:@"SHOW CREATE VIEW %@", [[self table] backtickQuotedString]]; - createWindowTitle = @"Create View Syntax"; + typeString = @"view"; } else if( [tablesListInstance tableType] == SP_TABLETYPE_PROC ) { query = [NSString stringWithFormat:@"SHOW CREATE PROCEDURE %@", [[self table] backtickQuotedString]]; - createWindowTitle = @"Create Procedure Syntax"; + typeString = @"procedure"; colOffs = 2; } else if( [tablesListInstance tableType] == SP_TABLETYPE_FUNC ) { query = [NSString stringWithFormat:@"SHOW CREATE FUNCTION %@", [[self table] backtickQuotedString]]; - createWindowTitle = @"Create Function Syntax"; + typeString = @"function"; colOffs = 2; } - if( query == nil ) - return; + if (query == nil) return; MCPResult *theResult = [mySQLConnection queryString:query]; @@ -1360,6 +1371,7 @@ if ([mySQLConnection isConnected]) { NSRunAlertPanel(@"Error", [NSString stringWithFormat:@"An error occured while creating table syntax.\n\n: %@",[mySQLConnection getLastErrorMessage]], @"OK", nil, nil); } + return; } @@ -1367,18 +1379,20 @@ if ([tableSyntax isKindOfClass:[NSData class]]) tableSyntax = [[NSString alloc] initWithData:tableSyntax encoding:[mySQLConnection encoding]]; - - if([tablesListInstance tableType] == SP_TABLETYPE_VIEW) - [syntaxViewContent setString:[tableSyntax createViewSyntaxPrettifier]]; - else - [syntaxViewContent setString:tableSyntax]; - - [syntaxViewContent setEditable:NO]; - [createTableSyntaxWindow setTitle:createWindowTitle]; - - if(![createTableSyntaxWindow isVisible]) - [createTableSyntaxWindow makeKeyAndOrderFront:self]; + [createTableSyntaxTextField setStringValue:[NSString stringWithFormat:@"Create syntax for %@ '%@'", typeString, [self table]]]; + + [createTableSyntaxTextView setEditable:YES]; + [createTableSyntaxTextView setString:@""]; + [createTableSyntaxTextView insertText:([tablesListInstance tableType] == SP_TABLETYPE_VIEW) ? [tableSyntax createViewSyntaxPrettifier] : tableSyntax]; + [createTableSyntaxTextView setEditable:NO]; + + // Show variables sheet + [NSApp beginSheet:createTableSyntaxWindow + modalForWindow:tableWindow + modalDelegate:self + didEndSelector:nil + contextInfo:nil]; } /** @@ -1713,6 +1727,22 @@ contextInfo:NULL]; } +/** + * Saves the current tables create syntax to the selected file. + */ +- (IBAction)saveCreateSyntax:(id)sender +{ + NSSavePanel *panel = [NSSavePanel savePanel]; + + [panel setRequiredFileType:@"sql"]; + + [panel setExtensionHidden:NO]; + [panel setAllowsOtherFileTypes:YES]; + [panel setCanSelectHiddenExtension:YES]; + + [panel beginSheetForDirectory:nil file:@"CreateSyntax" modalForWindow:createTableSyntaxWindow modalDelegate:self didEndSelector:@selector(savePanelDidEnd:returnCode:contextInfo:) contextInfo:@"CreateSyntax"]; +} + #pragma mark - #pragma mark Other Methods @@ -1731,7 +1761,7 @@ * dialogs such as the variableSheet or the createTableSyntaxSheet */ - (IBAction)closeSheet:(id)sender -{ +{ [NSApp stopModalWithCode:0]; } @@ -1744,6 +1774,25 @@ } /** + * + */ +- (IBAction)closePanelSheet:(id)sender +{ + [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 its 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; + } +} + +/** * Passes query to tablesListInstance */ - (void)doPerformQueryService:(NSString *)query @@ -1812,20 +1861,10 @@ // Show variables sheet [NSApp beginSheet:variablesSheet - modalForWindow:tableWindow modalDelegate:self - didEndSelector:nil contextInfo:nil]; - - [NSApp runModalForWindow:variablesSheet]; - [NSApp endSheet:variablesSheet]; - - [variablesSheet orderOut:nil]; - - // If the filtered array is allocated and its 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; + modalForWindow:tableWindow + modalDelegate:self + didEndSelector:nil + contextInfo:nil]; } - (void)closeConnection @@ -2461,7 +2500,7 @@ [panel setAllowsOtherFileTypes:YES]; [panel setCanSelectHiddenExtension:YES]; - [panel beginSheetForDirectory:nil file:@"ServerVariables" modalForWindow:variablesSheet modalDelegate:self didEndSelector:@selector(savePanelDidEnd:returnCode:contextInfo:) contextInfo:NULL]; + [panel beginSheetForDirectory:nil file:@"ServerVariables" modalForWindow:variablesSheet modalDelegate:self didEndSelector:@selector(savePanelDidEnd:returnCode:contextInfo:) contextInfo:@"ServerVariables"]; } /** @@ -2655,18 +2694,31 @@ /** * Called when the NSSavePanel sheet ends. Writes the server variables to the selected file if required. */ -- (void)savePanelDidEnd:(NSSavePanel *)sheet returnCode:(int)returnCode contextInfo:(void *)contextInfo +- (void)savePanelDidEnd:(NSSavePanel *)sheet returnCode:(int)returnCode contextInfo:(NSString *)contextInfo { if (returnCode == NSOKButton) { - if ([variablesFiltered count] > 0) { - NSMutableString *variablesString = [NSMutableString stringWithFormat:@"# MySQL server variables for %@\n\n", [self host]]; - - for (NSDictionary *variable in variablesFiltered) - { - [variablesString appendString:[NSString stringWithFormat:@"%@ = %@\n", [variable objectForKey:@"Variable_name"], [variable objectForKey:@"Value"]]]; + if ([contextInfo isEqualToString:@"ServerVariables"]) { + if ([variablesFiltered count] > 0) { + NSMutableString *variablesString = [NSMutableString stringWithFormat:@"# MySQL server variables for %@\n\n", [self host]]; + + for (NSDictionary *variable in variablesFiltered) + { + [variablesString appendString:[NSString stringWithFormat:@"%@ = %@\n", [variable objectForKey:@"Variable_name"], [variable objectForKey:@"Value"]]]; + } + + [variablesString writeToFile:[sheet filename] atomically:YES encoding:NSUTF8StringEncoding error:NULL]; } + } + else if ([contextInfo isEqualToString:@"CreateSyntax"]) { + - [variablesString writeToFile:[sheet filename] atomically:YES encoding:NSUTF8StringEncoding error:NULL]; + NSString *createSyntax = [createTableSyntaxTextView string]; + + if ([createSyntax length] > 0) { + NSString *output = [NSString stringWithFormat:@"-- Create syntax for '%@'\n\n%@\n", [self table], createSyntax]; + + [output writeToFile:[sheet filename] atomically:YES encoding:NSUTF8StringEncoding error:NULL]; + } } } } @@ -2976,14 +3028,13 @@ //set up interface if ( [prefs boolForKey:@"UseMonospacedFonts"] ) { [[SPQueryController sharedQueryController] setConsoleFont:[NSFont fontWithName:@"Monaco" size:[NSFont smallSystemFontSize]]]; - [syntaxViewContent setFont:[NSFont fontWithName:@"Monaco" size:[NSFont smallSystemFontSize]]]; while ( (theCol = [theCols nextObject]) ) { [[theCol dataCell] setFont:[NSFont fontWithName:@"Monaco" size:10]]; } } else { [[SPQueryController sharedQueryController] setConsoleFont:[NSFont systemFontOfSize:[NSFont smallSystemFontSize]]]; - [syntaxViewContent setFont:[NSFont systemFontOfSize:[NSFont smallSystemFontSize]]]; + while ( (theCol = [theCols nextObject]) ) { [[theCol dataCell] setFont:[NSFont systemFontOfSize:[NSFont smallSystemFontSize]]]; } @@ -3249,6 +3300,8 @@ return theValue; } +#pragma mark - + - (void)dealloc { |