Fixed language menu.

This commit is contained in:
Jeena 2013-10-23 14:12:15 +02:00
parent b7e3c49648
commit e9a43c4872

View file

@ -40,38 +40,52 @@
- (void)initLanugageMenu - (void)initLanugageMenu
{ {
NSInteger start = [[NSUserDefaults standardUserDefaults] integerForKey:@"languageVoiceIndex"]; NSString *startName = [[NSUserDefaults standardUserDefaults] stringForKey:@"languageVoiceName"];
NSMenuItem *startItem = nil;
NSLocale *currentLocale = [NSLocale currentLocale]; NSLocale *currentLocale = [NSLocale currentLocale];
NSArray *voices = [NSSpeechSynthesizer availableVoices]; NSArray *voices = [NSSpeechSynthesizer availableVoices];
[self.languageMenu removeAllItems]; [self.languageMenu removeAllItems];
for (NSInteger i = 0; i < [voices count]; i++) for (NSInteger i = 0; i < [voices count]; i++)
{ {
NSDictionary *dict = [NSSpeechSynthesizer attributesForVoice:[voices objectAtIndex:i]]; NSDictionary *dict = [NSSpeechSynthesizer attributesForVoice:[voices objectAtIndex:i]];
NSString *country = [currentLocale displayNameForKey:NSLocaleIdentifier value:[dict objectForKey:@"VoiceLocaleIdentifier"]]; NSString *countryString = [currentLocale displayNameForKey:NSLocaleIdentifier value:[dict objectForKey:@"VoiceLocaleIdentifier"]];
NSMenuItem *item = [[NSMenuItem alloc] initWithTitle:[NSString stringWithFormat:@"%@ - %@", country, [dict objectForKey:@"VoiceName"]] action:@selector(changeLanguage:) keyEquivalent:@""]; NSMenuItem *country = [self.languageMenu itemWithTitle:countryString];
if (!country) {
country = [[NSMenuItem alloc] initWithTitle:countryString action:nil keyEquivalent:@""];
NSMenu *submenu = [[NSMenu alloc] init];
[country setSubmenu:submenu];
[self.languageMenu addItem:country];
}
NSMenuItem *item = [[NSMenuItem alloc] initWithTitle:[dict objectForKey:@"VoiceName"] action:@selector(changeLanguage:) keyEquivalent:@""];
item.tag = i; item.tag = i;
[self.languageMenu addItem:item]; [[country submenu] addItem:item];
if (![[NSUserDefaults standardUserDefaults] objectForKey:@"languageVoiceIndex"] && [[dict objectForKey:@"VoiceName"] isEqualToString:@"Alex"]) if ((![[NSUserDefaults standardUserDefaults] objectForKey:@"languageVoiceIndex"] && [[dict objectForKey:@"VoiceName"] isEqualToString:@"Alex"]) || [item.title isEqualToString:startName])
{ {
start = i; startItem = item;
} }
} }
[self changeLanguage:[self.languageMenu itemAtIndex:start]]; [self changeLanguage:startItem];
} }
- (void)changeLanguage:(id)sender - (void)changeLanguage:(id)sender
{ {
NSInteger index = [(NSMenuItem *)sender tag]; NSMenuItem *item = (NSMenuItem *)sender;
NSString *voice = [[NSSpeechSynthesizer attributesForVoice:[[NSSpeechSynthesizer availableVoices] objectAtIndex:index]] objectForKey:@"VoiceIdentifier"];
[synth setVoice:voice];
[[NSUserDefaults standardUserDefaults] setInteger:index forKey:@"languageVoiceIndex"]; // Only if the user doesn't chose the same as it already was.
[self.languageMenuPopupButton selectItemAtIndex:index]; if (item.menu != self.languageMenu) {
NSString *voice = [[NSSpeechSynthesizer attributesForVoice:[[NSSpeechSynthesizer availableVoices] objectAtIndex:item.tag]] objectForKey:@"VoiceIdentifier"];
[synth setVoice:voice];
[[NSUserDefaults standardUserDefaults] setObject:item.title forKey:@"languageVoiceName"];
[self.languageMenuPopupButton setTitle:item.title];
}
} }
- (void)applicationWillTerminate:(NSNotification *)aNotification { - (void)applicationWillTerminate:(NSNotification *)aNotification {