diff options
author | rowanbeentje <rowan@beent.je> | 2010-06-14 21:20:40 +0000 |
---|---|---|
committer | rowanbeentje <rowan@beent.je> | 2010-06-14 21:20:40 +0000 |
commit | ce0bde25cb5388aeb33e57883e7da89473086417 (patch) | |
tree | a2c91ca879e15a8f809361a5a5d1a18ee4e603de /Source | |
parent | 6e1a24c45eb99a9c9f8e1cb708b64bdc504d5efe (diff) | |
download | sequelpro-ce0bde25cb5388aeb33e57883e7da89473086417.tar.gz sequelpro-ce0bde25cb5388aeb33e57883e7da89473086417.tar.bz2 sequelpro-ce0bde25cb5388aeb33e57883e7da89473086417.zip |
- Convert connection encoding menus to be menu tag based to fix localisation errors
- Add database encoding retrieval support for MySQL 4.1
- Convert the add table and add database sheets to use encoding menus derived from server supported encodings
- Re-layout preferences with larger labels to aid localisation
- Fix preference resizing in non-Favorite tabs
Diffstat (limited to 'Source')
-rw-r--r-- | Source/SPConstants.h | 24 | ||||
-rw-r--r-- | Source/SPConstants.m | 2 | ||||
-rw-r--r-- | Source/SPDatabaseData.m | 26 | ||||
-rw-r--r-- | Source/SPDatabaseDocument.h | 6 | ||||
-rw-r--r-- | Source/SPDatabaseDocument.m | 144 | ||||
-rw-r--r-- | Source/SPPreferenceController.m | 41 | ||||
-rw-r--r-- | Source/SPTablesList.m | 33 |
7 files changed, 211 insertions, 65 deletions
diff --git a/Source/SPConstants.h b/Source/SPConstants.h index 99d16583..0eafec7a 100644 --- a/Source/SPConstants.h +++ b/Source/SPConstants.h @@ -151,6 +151,30 @@ typedef enum SPMainMenuHelp = 7 } SPMainMenuTags; +// Encoding constants +typedef enum +{ + SPEncodingAutodetect = 0, + SPEncodingUCS2 = 10, + SPEncodingUTF8 = 20, + SPEncodingUTF8viaLatin1 = 30, + SPEncodingASCII = 40, + SPEncodingLatin1 = 50, + SPEncodingMacRoman = 60, + SPEncodingCP1250Latin2 = 70, + SPEncodingISOLatin2 = 80, + SPEncodingCP1256Arabic = 90, + SPEncodingGreek = 100, + SPEncodingHebrew = 110, + SPEncodingLatin5Turkish = 120, + SPEncodingCP1257WinBaltic = 130, + SPEncodingCP1251WinCyrillic = 140, + SPEncodingBig5Chinese = 150, + SPEncodingShiftJISJapanese = 160, + SPEncodingEUCJPJapanese = 170, + SPEncodingEUCKRKorean = 180 +} SPEncodingTypes; + // Long running notification time for Growl messages extern const CGFloat SPLongRunningNotificationTime; diff --git a/Source/SPConstants.m b/Source/SPConstants.m index 4ce1a4c5..93553d78 100644 --- a/Source/SPConstants.m +++ b/Source/SPConstants.m @@ -59,7 +59,7 @@ NSString *SPLastFavoriteIndex = @"LastFavoriteIndex"; NSString *SPAutoConnectToDefault = @"AutoConnectToDefault"; NSString *SPDefaultViewMode = @"DefaultViewMode"; NSString *SPLastViewMode = @"LastViewMode"; -NSString *SPDefaultEncoding = @"DefaultEncoding"; +NSString *SPDefaultEncoding = @"DefaultEncodingTag"; NSString *SPUseMonospacedFonts = @"UseMonospacedFonts"; NSString *SPDisplayTableViewVerticalGridlines = @"DisplayTableViewVerticalGridlines"; NSString *SPCustomQueryMaxHistoryItems = @"CustomQueryMaxHistoryItems"; diff --git a/Source/SPDatabaseData.m b/Source/SPDatabaseData.m index becd1d6e..27b542c4 100644 --- a/Source/SPDatabaseData.m +++ b/Source/SPDatabaseData.m @@ -29,6 +29,7 @@ @interface SPDatabaseData (PrivateAPI) - (NSMutableArray *)_getDatabaseDataForQuery:(NSString *)query; +NSInteger _sortMySQL4CharsetEntry(NSDictionary *itemOne, NSDictionary *itemTwo, void *context); @end @@ -392,8 +393,21 @@ const SPDatabaseCharSets charsets[] = // Try to retrieve the available character set encodings from the database // Check the information_schema.character_sets table is accessible - if (serverMajorVersion >= 5) - [characterSetEncodings addObjectsFromArray:[self _getDatabaseDataForQuery:@"SELECT * FROM `information_schema`.`character_sets` ORDER BY `character_set_name` ASC"]]; + if (serverMajorVersion >= 5) { + [characterSetEncodings addObjectsFromArray:[self _getDatabaseDataForQuery:@"SELECT * FROM `information_schema`.`character_sets` ORDER BY `character_set_name` ASC"]]; + } else if (serverMajorVersion == 4 && serverMinorVersion >= 1) { + NSArray *supportedEncodings = [self _getDatabaseDataForQuery:@"SHOW CHARACTER SET"]; + supportedEncodings = [supportedEncodings sortedArrayUsingFunction:_sortMySQL4CharsetEntry context:nil]; + for (NSDictionary *anEncoding in supportedEncodings) { + NSDictionary *convertedEncoding = [NSDictionary dictionaryWithObjectsAndKeys: + [anEncoding objectForKey:@"Charset"], @"CHARACTER_SET_NAME", + [anEncoding objectForKey:@"Description"], @"DESCRIPTION", + [anEncoding objectForKey:@"Default collation"], @"DEFAULT_COLLATE_NAME", + [anEncoding objectForKey:@"Maxlen"], @"MAXLEN", + nil]; + [characterSetEncodings addObject:convertedEncoding]; + } + } // If that failed, get the list of character set encodings from the hard-coded list if (![characterSetEncodings count]) { @@ -453,4 +467,12 @@ const SPDatabaseCharSets charsets[] = return array; } +/** + * Sorts a 4.1-style SHOW CHARACTER SET result by the Charset key. + */ +NSInteger _sortMySQL4CharsetEntry(NSDictionary *itemOne, NSDictionary *itemTwo, void *context) +{ + return [[itemOne objectForKey:@"Charset"] compare:[itemTwo objectForKey:@"Charset"]]; +} + @end diff --git a/Source/SPDatabaseDocument.h b/Source/SPDatabaseDocument.h index 315b231c..3ca3ad6f 100644 --- a/Source/SPDatabaseDocument.h +++ b/Source/SPDatabaseDocument.h @@ -239,9 +239,9 @@ - (BOOL)connectionEncodingViaLatin1:(id)connection; - (IBAction)chooseEncoding:(id)sender; - (BOOL)supportsEncoding; -- (void)updateEncodingMenuWithSelectedEncoding:(NSString *)encoding; -- (NSString *)encodingNameFromMySQLEncoding:(NSString *)mysqlEncoding; -- (NSString *)mysqlEncodingFromDisplayEncoding:(NSString *)encodingName; +- (void)updateEncodingMenuWithSelectedEncoding:(NSNumber *)encodingTag; +- (NSNumber *)encodingTagFromMySQLEncoding:(NSString *)mysqlEncoding; +- (NSString *)mysqlEncodingFromEncodingTag:(NSNumber *)encodingTag; // Table methods - (IBAction)showCreateTableSyntax:(id)sender; diff --git a/Source/SPDatabaseDocument.m b/Source/SPDatabaseDocument.m index e06065af..c5381114 100644 --- a/Source/SPDatabaseDocument.m +++ b/Source/SPDatabaseDocument.m @@ -636,11 +636,11 @@ if ([self isUntitled]) [[parentWindow standardWindowButton:NSWindowDocumentIconButton] setImage:nil]; // Set the connection encoding - NSString *encodingName = [prefs objectForKey:SPDefaultEncoding]; - if ( [encodingName isEqualToString:@"Autodetect"] ) { + NSNumber *encodingType = [prefs objectForKey:SPDefaultEncoding]; + if ( [encodingType intValue] == SPEncodingAutodetect ) { [self setConnectionEncoding:[self databaseEncoding] reloadingViews:NO]; } else { - [self setConnectionEncoding:[self mysqlEncodingFromDisplayEncoding:encodingName] reloadingViews:NO]; + [self setConnectionEncoding:[self mysqlEncodingFromEncodingTag:encodingType] reloadingViews:NO]; } // Get the mysql version @@ -888,6 +888,36 @@ if (![tablesListInstance selectionShouldChangeInTableView:nil]) return; [databaseNameField setStringValue:@""]; + + // Populate the database encoding popup button with a default menu item + [databaseEncodingButton removeAllItems]; + [databaseEncodingButton addItemWithTitle:@"Default"]; + + // Retrieve the server-supported encodings and add them to the menu + NSArray *encodings = [databaseDataInstance getDatabaseCharacterSetEncodings]; + NSString *utf8MenuItemTitle = nil; + if ([encodings count] > 0 + && ([mySQLConnection serverMajorVersion] > 4 + || ([mySQLConnection serverMajorVersion] == 4 && [mySQLConnection serverMinorVersion] >= 1))) + { + [[databaseEncodingButton menu] addItem:[NSMenuItem separatorItem]]; + for (NSDictionary *encoding in encodings) { + NSString *menuItemTitle = (![encoding objectForKey:@"DESCRIPTION"]) ? [encoding objectForKey:@"CHARACTER_SET_NAME"] : [NSString stringWithFormat:@"%@ (%@)", [encoding objectForKey:@"DESCRIPTION"], [encoding objectForKey:@"CHARACTER_SET_NAME"]]; + [databaseEncodingButton addItemWithTitle:menuItemTitle]; + + // If the UTF8 entry has been encountered, store the title + if ([[encoding objectForKey:@"CHARACTER_SET_NAME"] isEqualToString:@"utf8"]) { + utf8MenuItemTitle = [NSString stringWithString:menuItemTitle]; + } + } + + // If a UTF8 entry was found, promote it to the top of the list + if (utf8MenuItemTitle) { + [[databaseEncodingButton menu] insertItem:[NSMenuItem separatorItem] atIndex:2]; + [databaseEncodingButton insertItemWithTitle:utf8MenuItemTitle atIndex:2]; + } + } + [NSApp beginSheet:databaseSheet modalForWindow:parentWindow @@ -1495,9 +1525,9 @@ // update the selected menu item if (_encodingViaLatin1) { - [self updateEncodingMenuWithSelectedEncoding:[self encodingNameFromMySQLEncoding:[NSString stringWithFormat:@"%@-", mysqlEncoding]]]; + [self updateEncodingMenuWithSelectedEncoding:[self encodingTagFromMySQLEncoding:[NSString stringWithFormat:@"%@-", mysqlEncoding]]]; } else { - [self updateEncodingMenuWithSelectedEncoding:[self encodingNameFromMySQLEncoding:mysqlEncoding]]; + [self updateEncodingMenuWithSelectedEncoding:[self encodingTagFromMySQLEncoding:mysqlEncoding]]; } // Reload stuff as appropriate @@ -1531,80 +1561,80 @@ * * @param NSString *encoding - the title of the menu item which will be selected */ -- (void)updateEncodingMenuWithSelectedEncoding:(NSString *)encoding +- (void)updateEncodingMenuWithSelectedEncoding:(NSNumber *)encodingTag { - NSEnumerator *dbEncodingMenuEn = [[selectEncodingMenu itemArray] objectEnumerator]; - id menuItem; + NSInteger itemToSelect = [encodingTag integerValue]; NSInteger correctStateForMenuItem; - while (menuItem = [dbEncodingMenuEn nextObject]) { - correctStateForMenuItem = [[menuItem title] isEqualToString:encoding] ? NSOnState : NSOffState; - if ([menuItem state] == correctStateForMenuItem) // don't re-apply state incase it causes performance issues + for (NSMenuItem *aMenuItem in [selectEncodingMenu itemArray]) { + correctStateForMenuItem = ([aMenuItem tag] == itemToSelect) ? NSOnState : NSOffState; + + if ([aMenuItem state] == correctStateForMenuItem) // don't re-apply state incase it causes performance issues continue; - [menuItem setState:correctStateForMenuItem]; + [aMenuItem setState:correctStateForMenuItem]; } } /** * Returns the display name for a mysql encoding */ -- (NSString *)encodingNameFromMySQLEncoding:(NSString *)mysqlEncoding +- (NSNumber *)encodingTagFromMySQLEncoding:(NSString *)mysqlEncoding { NSDictionary *translationMap = [NSDictionary dictionaryWithObjectsAndKeys: - @"UCS-2 Unicode (ucs2)", @"ucs2", - @"UTF-8 Unicode (utf8)", @"utf8", - @"UTF-8 Unicode via Latin 1", @"utf8-", - @"US ASCII (ascii)", @"ascii", - @"ISO Latin 1 (latin1)", @"latin1", - @"Mac Roman (macroman)", @"macroman", - @"Windows Latin 2 (cp1250)", @"cp1250", - @"ISO Latin 2 (latin2)", @"latin2", - @"Windows Arabic (cp1256)", @"cp1256", - @"ISO Greek (greek)", @"greek", - @"ISO Hebrew (hebrew)", @"hebrew", - @"ISO Turkish (latin5)", @"latin5", - @"Windows Baltic (cp1257)", @"cp1257", - @"Windows Cyrillic (cp1251)", @"cp1251", - @"Big5 Traditional Chinese (big5)", @"big5", - @"Shift-JIS Japanese (sjis)", @"sjis", - @"EUC-JP Japanese (ujis)", @"ujis", - @"EUC-KR Korean (euckr)", @"euckr", + [NSNumber numberWithInt:SPEncodingUCS2], @"ucs2", + [NSNumber numberWithInt:SPEncodingUTF8], @"utf8", + [NSNumber numberWithInt:SPEncodingUTF8viaLatin1], @"utf8-", + [NSNumber numberWithInt:SPEncodingASCII], @"ascii", + [NSNumber numberWithInt:SPEncodingLatin1], @"latin1", + [NSNumber numberWithInt:SPEncodingMacRoman], @"macroman", + [NSNumber numberWithInt:SPEncodingCP1250Latin2], @"cp1250", + [NSNumber numberWithInt:SPEncodingISOLatin2], @"latin2", + [NSNumber numberWithInt:SPEncodingCP1256Arabic], @"cp1256", + [NSNumber numberWithInt:SPEncodingGreek], @"greek", + [NSNumber numberWithInt:SPEncodingHebrew], @"hebrew", + [NSNumber numberWithInt:SPEncodingLatin5Turkish], @"latin5", + [NSNumber numberWithInt:SPEncodingCP1257WinBaltic], @"cp1257", + [NSNumber numberWithInt:SPEncodingCP1251WinCyrillic], @"cp1251", + [NSNumber numberWithInt:SPEncodingBig5Chinese], @"big5", + [NSNumber numberWithInt:SPEncodingShiftJISJapanese], @"sjis", + [NSNumber numberWithInt:SPEncodingEUCJPJapanese], @"ujis", + [NSNumber numberWithInt:SPEncodingEUCKRKorean], @"euckr", nil]; - NSString *encodingName = [translationMap valueForKey:mysqlEncoding]; + NSNumber *encodingTag = [translationMap valueForKey:mysqlEncoding]; - if (!encodingName) - return [NSString stringWithFormat:@"Unknown Encoding (%@)", mysqlEncoding, nil]; + if (!encodingTag) + return [NSNumber numberWithInt:SPEncodingAutodetect]; - return encodingName; + return encodingTag; } /** * Returns the mysql encoding for an encoding string that is displayed to the user */ -- (NSString *)mysqlEncodingFromDisplayEncoding:(NSString *)encodingName +- (NSString *)mysqlEncodingFromEncodingTag:(NSNumber *)encodingTag { NSDictionary *translationMap = [NSDictionary dictionaryWithObjectsAndKeys: - @"ucs2", @"UCS-2 Unicode (ucs2)", - @"utf8", @"UTF-8 Unicode (utf8)", - @"utf8-", @"UTF-8 Unicode via Latin 1", - @"ascii", @"US ASCII (ascii)", - @"latin1", @"ISO Latin 1 (latin1)", - @"macroman", @"Mac Roman (macroman)", - @"cp1250", @"Windows Latin 2 (cp1250)", - @"latin2", @"ISO Latin 2 (latin2)", - @"cp1256", @"Windows Arabic (cp1256)", - @"greek", @"ISO Greek (greek)", - @"hebrew", @"ISO Hebrew (hebrew)", - @"latin5", @"ISO Turkish (latin5)", - @"cp1257", @"Windows Baltic (cp1257)", - @"cp1251", @"Windows Cyrillic (cp1251)", - @"big5", @"Big5 Traditional Chinese (big5)", - @"sjis", @"Shift-JIS Japanese (sjis)", - @"ujis", @"EUC-JP Japanese (ujis)", - @"euckr", @"EUC-KR Korean (euckr)", + @"ucs2", [NSString stringWithFormat:@"%i", SPEncodingUCS2], + @"utf8", [NSString stringWithFormat:@"%i", SPEncodingUTF8], + @"utf8-", [NSString stringWithFormat:@"%i", SPEncodingUTF8viaLatin1], + @"ascii", [NSString stringWithFormat:@"%i", SPEncodingASCII], + @"latin1", [NSString stringWithFormat:@"%i", SPEncodingLatin1], + @"macroman", [NSString stringWithFormat:@"%i", SPEncodingMacRoman], + @"cp1250", [NSString stringWithFormat:@"%i", SPEncodingCP1250Latin2], + @"latin2", [NSString stringWithFormat:@"%i", SPEncodingISOLatin2], + @"cp1256", [NSString stringWithFormat:@"%i", SPEncodingCP1256Arabic], + @"greek", [NSString stringWithFormat:@"%i", SPEncodingGreek], + @"hebrew", [NSString stringWithFormat:@"%i", SPEncodingHebrew], + @"latin5", [NSString stringWithFormat:@"%i", SPEncodingLatin5Turkish], + @"cp1257", [NSString stringWithFormat:@"%i", SPEncodingCP1257WinBaltic], + @"cp1251", [NSString stringWithFormat:@"%i", SPEncodingCP1251WinCyrillic], + @"big5", [NSString stringWithFormat:@"%i", SPEncodingBig5Chinese], + @"sjis", [NSString stringWithFormat:@"%i", SPEncodingShiftJISJapanese], + @"ujis", [NSString stringWithFormat:@"%i", SPEncodingEUCJPJapanese], + @"euckr", [NSString stringWithFormat:@"%i", SPEncodingEUCKRKorean], nil]; - NSString *mysqlEncoding = [translationMap valueForKey:encodingName]; + NSString *mysqlEncoding = [translationMap valueForKey:[NSString stringWithFormat:@"%i", [encodingTag intValue]]]; if (!mysqlEncoding) return @"utf8"; @@ -1646,7 +1676,7 @@ */ - (IBAction)chooseEncoding:(id)sender { - [self setConnectionEncoding:[self mysqlEncodingFromDisplayEncoding:[(NSMenuItem *)sender title]] reloadingViews:YES]; + [self setConnectionEncoding:[self mysqlEncodingFromEncodingTag:[NSNumber numberWithInt:[(NSMenuItem *)sender tag]]] reloadingViews:YES]; } /** @@ -4366,7 +4396,7 @@ // If there is an encoding selected other than the default we must specify it in CREATE DATABASE statement if ([databaseEncodingButton indexOfSelectedItem] > 0) { - createStatement = [NSString stringWithFormat:@"%@ DEFAULT CHARACTER SET %@", createStatement, [[self mysqlEncodingFromDisplayEncoding:[databaseEncodingButton title]] backtickQuotedString]]; + createStatement = [NSString stringWithFormat:@"%@ DEFAULT CHARACTER SET %@", createStatement, [[self mysqlEncodingFromEncodingTag:[databaseEncodingButton tag]] backtickQuotedString]]; } // Create the database diff --git a/Source/SPPreferenceController.m b/Source/SPPreferenceController.m index 2a621325..bbf5c434 100644 --- a/Source/SPPreferenceController.m +++ b/Source/SPPreferenceController.m @@ -309,6 +309,34 @@ [prefs removeObjectForKey:@"SUSendProfileInfo"]; } + // For versions prior to 2325 (<0.9.9), convert the old encoding pref string into the new localizable constant + if (recordedVersionNumber < 2325 && [prefs objectForKey:@"DefaultEncoding"] && [[prefs objectForKey:@"DefaultEncoding"] isKindOfClass:[NSString class]]) { + NSDictionary *encodingMap = [NSDictionary dictionaryWithObjectsAndKeys: + [NSNumber numberWithInt:SPEncodingAutodetect], @"Autodetect", + [NSNumber numberWithInt:SPEncodingUCS2], @"UCS-2 Unicode (ucs2)", + [NSNumber numberWithInt:SPEncodingUTF8], @"UTF-8 Unicode (utf8)", + [NSNumber numberWithInt:SPEncodingUTF8viaLatin1], @"UTF-8 Unicode via Latin 1", + [NSNumber numberWithInt:SPEncodingASCII], @"US ASCII (ascii)", + [NSNumber numberWithInt:SPEncodingLatin1], @"ISO Latin 1 (latin1)", + [NSNumber numberWithInt:SPEncodingMacRoman], @"Mac Roman (macroman)", + [NSNumber numberWithInt:SPEncodingCP1250Latin2], @"Windows Latin 2 (cp1250)", + [NSNumber numberWithInt:SPEncodingISOLatin2], @"ISO Latin 2 (latin2)", + [NSNumber numberWithInt:SPEncodingCP1256Arabic], @"Windows Arabic (cp1256)", + [NSNumber numberWithInt:SPEncodingGreek], @"ISO Greek (greek)", + [NSNumber numberWithInt:SPEncodingHebrew], @"ISO Hebrew (hebrew)", + [NSNumber numberWithInt:SPEncodingLatin5Turkish], @"ISO Turkish (latin5)", + [NSNumber numberWithInt:SPEncodingCP1257WinBaltic], @"Windows Baltic (cp1257)", + [NSNumber numberWithInt:SPEncodingCP1251WinCyrillic], @"Windows Cyrillic (cp1251)", + [NSNumber numberWithInt:SPEncodingBig5Chinese], @"Big5 Traditional Chinese (big5)", + [NSNumber numberWithInt:SPEncodingShiftJISJapanese], @"Shift-JIS Japanese (sjis)", + [NSNumber numberWithInt:SPEncodingEUCJPJapanese], @"EUC-JP Japanese (ujis)", + [NSNumber numberWithInt:SPEncodingEUCKRKorean], @"EUC-KR Korean (euckr)", + nil]; + NSNumber *newMappedValue = [encodingMap valueForKey:[prefs objectForKey:@"DefaultEncoding"]]; + if (newMappedValue == nil) newMappedValue = [NSNumber numberWithInt:0]; + [prefs setObject:newMappedValue forKey:@"DefaultEncodingTag"]; + } + // Update the prefs revision [prefs setObject:[NSNumber numberWithInteger:currentVersionNumber] forKey:SPLastUsedVersion]; } @@ -989,6 +1017,19 @@ [preferencesWindow endEditingFor:[preferencesWindow firstResponder]]; } +// ------------------------------------------------------------------------------- +// windowWillResize:toSize: +// Trap window resize notifications and use them to disable resizing on most tabs +// - except for the favourites tab. +// ------------------------------------------------------------------------------- +- (NSSize)windowWillResize:(NSWindow *)sender toSize:(NSSize)frameSize +{ + if ([sender showsResizeIndicator]) + return frameSize; + else + return [sender frame].size; +} + #pragma mark - #pragma mark Other diff --git a/Source/SPTablesList.m b/Source/SPTablesList.m index 498a5166..509e3b83 100644 --- a/Source/SPTablesList.m +++ b/Source/SPTablesList.m @@ -287,6 +287,35 @@ [tableTypeButton addItemWithTitle:[engine objectForKey:@"Engine"]]; } + // Populate the table encoding popup button with a default menu item + [tableEncodingButton removeAllItems]; + [tableEncodingButton addItemWithTitle:@"Default"]; + + // Retrieve the server-supported encodings and add them to the menu + NSArray *encodings = [databaseDataInstance getDatabaseCharacterSetEncodings]; + NSString *utf8MenuItemTitle = nil; + if ([encodings count] > 0 + && ([mySQLConnection serverMajorVersion] > 4 + || ([mySQLConnection serverMajorVersion] == 4 && [mySQLConnection serverMinorVersion] >= 1))) + { + [[tableEncodingButton menu] addItem:[NSMenuItem separatorItem]]; + for (NSDictionary *encoding in encodings) { + NSString *menuItemTitle = (![encoding objectForKey:@"DESCRIPTION"]) ? [encoding objectForKey:@"CHARACTER_SET_NAME"] : [NSString stringWithFormat:@"%@ (%@)", [encoding objectForKey:@"DESCRIPTION"], [encoding objectForKey:@"CHARACTER_SET_NAME"]]; + [tableEncodingButton addItemWithTitle:menuItemTitle]; + + // If the UTF8 entry has been encountered, store the menu title + if ([[encoding objectForKey:@"CHARACTER_SET_NAME"] isEqualToString:@"utf8"]) { + utf8MenuItemTitle = [NSString stringWithString:menuItemTitle]; + } + } + + // If a UTF8 entry was found, promote it to the top of the list + if (utf8MenuItemTitle) { + [[tableEncodingButton menu] insertItem:[NSMenuItem separatorItem] atIndex:2]; + [tableEncodingButton insertItemWithTitle:utf8MenuItemTitle atIndex:2]; + } + } + [NSApp beginSheet:tableSheet modalForWindow:[tableDocumentInstance parentWindow] modalDelegate:self @@ -675,7 +704,7 @@ // If encoding is set to Autodetect, update the connection character set encoding // based on the newly selected table's encoding - but only if it differs from the current encoding. - if ([[[NSUserDefaults standardUserDefaults] objectForKey:SPDefaultEncoding] isEqualToString:@"Autodetect"]) { + if ([[[NSUserDefaults standardUserDefaults] objectForKey:SPDefaultEncoding] intValue] == SPEncodingAutodetect) { if (tableEncoding != nil && ![tableEncoding isEqualToString:[tableDocumentInstance connectionEncoding]]) { [tableDocumentInstance setConnectionEncoding:tableEncoding reloadingViews:NO]; [tableDataInstance resetAllData]; @@ -2033,7 +2062,7 @@ // If there is an encoding selected other than the default we must specify it in CREATE TABLE statement if ([tableEncodingButton indexOfSelectedItem] > 0) { - charSetStatement = [NSString stringWithFormat:@"DEFAULT CHARACTER SET %@", [[tableDocumentInstance mysqlEncodingFromDisplayEncoding:[tableEncodingButton title]] backtickQuotedString]]; + charSetStatement = [NSString stringWithFormat:@"DEFAULT CHARACTER SET %@", [[tableDocumentInstance mysqlEncodingFromEncodingTag:[tableEncodingButton tag]] backtickQuotedString]]; } // If there is a type selected other than the default we must specify it in CREATE TABLE statement |