diff options
-rw-r--r-- | Interfaces/English.lproj/MainMenu.xib | 15 | ||||
-rw-r--r-- | Resources/PreferenceDefaults.plist | 2 | ||||
-rw-r--r-- | Source/MainController.m | 10 | ||||
-rw-r--r-- | Source/TableDocument.h | 3 | ||||
-rw-r--r-- | Source/TableDocument.m | 145 |
5 files changed, 114 insertions, 61 deletions
diff --git a/Interfaces/English.lproj/MainMenu.xib b/Interfaces/English.lproj/MainMenu.xib index c19968a2..750018c4 100644 --- a/Interfaces/English.lproj/MainMenu.xib +++ b/Interfaces/English.lproj/MainMenu.xib @@ -2,9 +2,9 @@ <archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.03"> <data> <int key="IBDocument.SystemTarget">1050</int> - <string key="IBDocument.SystemVersion">9J61</string> + <string key="IBDocument.SystemVersion">9L30</string> <string key="IBDocument.InterfaceBuilderVersion">677</string> - <string key="IBDocument.AppKitVersion">949.46</string> + <string key="IBDocument.AppKitVersion">949.54</string> <string key="IBDocument.HIToolboxVersion">353.00</string> <object class="NSMutableArray" key="IBDocument.EditedObjectIDs"> <bool key="EncodedWithXMLCoder">YES</bool> @@ -241,7 +241,6 @@ </object> <object class="NSMenuItem" id="849728981"> <reference key="NSMenu" ref="709725194"/> - <bool key="NSIsHidden">YES</bool> <string key="NSTitle">Open</string> <string key="NSKeyEquiv">o</string> <int key="NSKeyEquivModMask">1048576</int> @@ -252,7 +251,7 @@ <object class="NSMenuItem" id="256715652"> <reference key="NSMenu" ref="709725194"/> <bool key="NSIsHidden">YES</bool> - <string key="NSTitle">Save Connection</string> + <string key="NSTitle">Save</string> <string key="NSKeyEquiv">s</string> <int key="NSKeyEquivModMask">1048576</int> <int key="NSMnemonicLoc">2147483647</int> @@ -4178,7 +4177,7 @@ <string>com.apple.InterfaceBuilder.CocoaPlugin</string> <reference ref="9"/> <string>{{449, 1007}, {197, 53}}</string> - <string>{{164, 719}, {511, 20}}</string> + <string>{{311, 851}, {511, 20}}</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> <reference ref="9"/> <string>{{506, 836}, {511, 20}}</string> @@ -4249,7 +4248,7 @@ <reference ref="9"/> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> <reference ref="9"/> - <string>{{701, 502}, {218, 253}}</string> + <string>{{176, 466}, {218, 253}}</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> <reference ref="9"/> <string>{{518, 583}, {218, 253}}</string> @@ -4271,7 +4270,7 @@ <reference ref="9"/> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> <reference ref="9"/> - <string>{{1022, 54}, {279, 423}}</string> + <string>{{660, 216}, {279, 423}}</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> <reference ref="9"/> <string>{{556, 185}, {279, 383}}</string> @@ -4355,7 +4354,7 @@ <string>com.apple.InterfaceBuilder.CocoaPlugin</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>{{270, 486}, {209, 233}}</string> + <string>{{417, 618}, {209, 233}}</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> <reference ref="9"/> <string>{{180, 535}, {182, 253}}</string> diff --git a/Resources/PreferenceDefaults.plist b/Resources/PreferenceDefaults.plist index 644a6db1..72e975b3 100644 --- a/Resources/PreferenceDefaults.plist +++ b/Resources/PreferenceDefaults.plist @@ -72,6 +72,8 @@ <false/> <key>CustomQueryAutoHelpDelay</key> <real>1</real> + <key>lastSqlFileEncoding</key> + <integer>4</integer> <key>SelectLastFavoriteUsed</key> <true/> <key>LastFavoriteIndex</key> diff --git a/Source/MainController.m b/Source/MainController.m index 1cdc0244..3f297574 100644 --- a/Source/MainController.m +++ b/Source/MainController.m @@ -73,11 +73,11 @@ [firstTableDocument makeWindowControllers]; [firstTableDocument showWindows]; } - } else - - // Pass query to the Query editor of the current document - [[[NSDocumentController sharedDocumentController] currentDocument] doPerformLoadQueryService:[self contentOfFile:filename]]; - + } else { + // Pass query to the Query editor of the current document + [[[NSDocumentController sharedDocumentController] currentDocument] doPerformLoadQueryService:[self contentOfFile:filename]]; + } + break; // open only the first SQL file } diff --git a/Source/TableDocument.h b/Source/TableDocument.h index a89a4a69..7df1155d 100644 --- a/Source/TableDocument.h +++ b/Source/TableDocument.h @@ -121,8 +121,7 @@ enum { NSMutableArray *allDatabases; NSString *queryEditorInitString; - - NSArray *encodings; + } - (NSString *)getHTMLforPrint; diff --git a/Source/TableDocument.m b/Source/TableDocument.m index 3faa9f94..851fc746 100644 --- a/Source/TableDocument.m +++ b/Source/TableDocument.m @@ -1550,32 +1550,19 @@ kCFStringEncodingEUC_KR, -1 }; - if (encodings == nil) { - NSMutableArray *encs = [[[NSUserDefaults standardUserDefaults] arrayForKey:@"Encodings"] mutableCopy]; - if (encs == nil) { - NSStringEncoding defaultEncoding = [NSString defaultCStringEncoding]; - NSStringEncoding encoding; - BOOL hasDefault = NO; - NSInteger cnt = 0; - encs = [[NSMutableArray alloc] init]; - while (plainTextFileStringEncodingsSupported[cnt] != -1) { - if ((encoding = CFStringConvertEncodingToNSStringEncoding(plainTextFileStringEncodingsSupported[cnt++])) != kCFStringEncodingInvalidId) { - [encs addObject:[NSNumber numberWithUnsignedInteger:encoding]]; - if (encoding == defaultEncoding) hasDefault = YES; - } - } - if (!hasDefault) [encs addObject:[NSNumber numberWithUnsignedInteger:defaultEncoding]]; - } - encodings = encs; - } - return encodings; + NSStringEncoding encoding; + NSInteger cnt = 0; + NSMutableArray *encs = [NSMutableArray array]; + while (plainTextFileStringEncodingsSupported[cnt] != -1) + if ((encoding = CFStringConvertEncodingToNSStringEncoding(plainTextFileStringEncodingsSupported[cnt++])) != kCFStringEncodingInvalidId) + [encs addObject:[NSNumber numberWithUnsignedInteger:encoding]]; + + return encs; } /** * This method initializes the provided popup with list of encodings; - * it also sets up the selected encoding as indicated and if includeDefaultItem is YES, - * includes an initial item for selecting "Automatic" choice. - * These non-encoding items all have NoStringEncoding as their tags. + * it also sets up the selected encoding as indicated and if includeDefaultItem is YES. * Otherwise the tags are set to the NSStringEncoding value for the encoding. */ - (void)setupPopUp:(NSPopUpButton *)popup selectedEncoding:(NSUInteger)selectedEncoding withDefaultEntry:(BOOL)includeDefaultItem @@ -1586,12 +1573,6 @@ // Put the encodings in the popup [popup removeAllItems]; - // Put the initial "Automatic" item, if desired - if (includeDefaultItem) { - [popup addItemWithTitle:NSLocalizedString(@"Automatic", @"Encoding popup entry indicating automatic choice of encoding")]; - [[popup itemAtIndex:0] setTag:NoStringEncoding]; - } - // Make sure the initial selected encoding appears in the list if (!includeDefaultItem && (selectedEncoding != NoStringEncoding) && ![encs containsObject:[NSNumber numberWithUnsignedInteger:selectedEncoding]]) encs = [encs arrayByAddingObject:[NSNumber numberWithUnsignedInteger:selectedEncoding]]; @@ -1606,22 +1587,12 @@ if (enc == selectedEncoding) itemToSelect = [popup numberOfItems] - 1; } - // Add an optional separator and "customize" item at end - // if ([popup numberOfItems] > 0) { - // [[popup menu] addItem:[NSMenuItem separatorItem]]; - // [[popup lastItem] setTag:NoStringEncoding]; - // } - // [popup addItemWithTitle:NSLocalizedString(@"Customize Encodings List\\U2026", @"Encoding popup entry for bringing up the Customize Encodings List panel (this also occurs as the title of the panel itself, they should have the same localization)")]; - // [[popup lastItem] setAction:@selector(showPanel:)]; - // [[popup lastItem] setTarget:self]; - // [[popup lastItem] setTag:NoStringEncoding]; - [popup selectItemAtIndex:itemToSelect]; } /** - * Opens connection file(s) + * Opens SP session file(s) or a SQL file */ - (IBAction)openConnectionSheet:(id)sender { @@ -1635,9 +1606,15 @@ [panel setAccessoryView:encodingAccessoryView]; // Set up encoding list - // TODO save last used enc in prefs [encodingPopUp setEnabled:NO]; - [self setupPopUp:encodingPopUp selectedEncoding:4 withDefaultEntry:NO]; + + // If no lastSqlFileEncoding in prefs set it to UTF-8 + if(![prefs integerForKey:@"lastSqlFileEncoding"]) { + [prefs setInteger:4 forKey:@"lastSqlFileEncoding"]; + [prefs synchronize]; + } + + [self setupPopUp:encodingPopUp selectedEncoding:[prefs integerForKey:@"lastSqlFileEncoding"] withDefaultEntry:NO]; [panel beginSheetForDirectory:nil file:@"" @@ -1650,8 +1627,53 @@ - (void)openConnectionPanelDidEnd:(NSOpenPanel *)panel returnCode:(int)returnCode contextInfo:(void *)contextInfo { if ( returnCode ) { - NSArray *fileName = [panel filenames]; - NSLog(@"open: '%@' %d", [fileName description], [[encodingPopUp selectedItem] tag]); + NSArray *fileNames = [panel filenames]; + NSString *filename; + + for(filename in fileNames) { + if([[[filename pathExtension] lowercaseString] isEqualToString:@"sql"]) { + + NSError *err; + NSString *content = [NSString stringWithContentsOfFile:filename encoding:[[encodingPopUp selectedItem] tag] error:&err]; + + // If file couldn't read show an alert and return + if(!content) { + NSAlert *errorAlert = [NSAlert alertWithError:err]; + [errorAlert runModal]; + return; + } + + // Save last used encoding + [prefs setInteger:[[encodingPopUp selectedItem] tag] forKey:@"lastSqlFileEncoding"]; + + // Check if at least one document exists + if (![[[NSDocumentController sharedDocumentController] documents] count]) { + // TODO : maybe open a connection first + // return; + TableDocument *firstTableDocument; + + // Manually open a new document, setting MainController as sender to trigger autoconnection + if (firstTableDocument = [[NSDocumentController sharedDocumentController] makeUntitledDocumentOfType:@"DocumentType" error:nil]) { + [firstTableDocument setShouldAutomaticallyConnect:NO]; + [firstTableDocument initQueryEditorWithString:content]; + [[NSDocumentController sharedDocumentController] addDocument:firstTableDocument]; + [firstTableDocument makeWindowControllers]; + [firstTableDocument showWindows]; + } + } else { + // Pass query to the Query editor of the current document + [[[NSDocumentController sharedDocumentController] currentDocument] doPerformLoadQueryService:content]; + } + + break; // open only the first SQL file + } + else if([[[filename pathExtension] lowercaseString] isEqualToString:@"spf"]) { + NSLog(@"open connection %@", filename); + } + else { + NSLog(@"Only files with the extensions ‘spf’ or ‘sql’ are allowed."); + } + } } } @@ -1674,18 +1696,46 @@ } /** - * Saves connection(s) to file + * Saves SP session or if Custom Query tab is active the editor's content as SQL file */ - (IBAction)saveConnectionSheet:(id)sender { NSSavePanel *panel = [NSSavePanel savePanel]; - [panel setAllowedFileTypes:[NSArray arrayWithObjects:@"spf", nil]]; + NSString *filename; + [panel setAllowsOtherFileTypes:NO]; [panel setCanSelectHiddenExtension:YES]; + if( [tableTabView indexOfTabViewItem:[tableTabView selectedTabViewItem]] == 2 ) { + + // Custom Query tab is active thus save the editor's content as SQL file + [panel setAccessoryView:encodingAccessoryView]; + [panel setMessage:NSLocalizedString(@"Save SQL file", @"Save SQL file")]; + [panel setAllowedFileTypes:[NSArray arrayWithObjects:@"sql", nil]]; + filename = [NSString stringWithString:@""]; + + // If no lastSqlFileEncoding in prefs set it to UTF-8 + if(![prefs integerForKey:@"lastSqlFileEncoding"]) { + [prefs setInteger:4 forKey:@"lastSqlFileEncoding"]; + [prefs synchronize]; + } + + // Set up encoding list + [encodingPopUp setEnabled:YES]; + [self setupPopUp:encodingPopUp selectedEncoding:[prefs integerForKey:@"lastSqlFileEncoding"] withDefaultEntry:NO]; + + } else { + + // Save current session (open connection windows as SPF file) + [panel setMessage:NSLocalizedString(@"Save Sequel Pro session", @"Save Sequel Pro session")]; + [panel setAllowedFileTypes:[NSArray arrayWithObjects:@"spf", nil]]; + filename = [NSString stringWithFormat:@"%@", [self name]]; + + } + [panel beginSheetForDirectory:nil - file:[NSString stringWithFormat:@"%@", [self name]] + file:filename modalForWindow:tableWindow modalDelegate:self didEndSelector:@selector(saveConnectionPanelDidEnd:returnCode:contextInfo:) @@ -1697,6 +1747,9 @@ if ( returnCode ) { NSString *fileName = [panel filename]; NSLog(@"save as: '%@'", fileName); + + [prefs setInteger:[[encodingPopUp selectedItem] tag] forKey:@"lastSqlFileEncoding"]; + } } /** |