| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #import "chrome/browser/ui/cocoa/infobars/translate_infobar_base.h" | 5 #import "chrome/browser/ui/cocoa/infobars/translate_infobar_base.h" |
| 6 | 6 |
| 7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "base/metrics/histogram.h" | 8 #include "base/metrics/histogram.h" |
| 9 #include "base/sys_string_conversions.h" | 9 #include "base/sys_string_conversions.h" |
| 10 #include "chrome/app/chrome_command_ids.h" | 10 #include "chrome/app/chrome_command_ids.h" |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 92 | 92 |
| 93 // Completely rebuild "from" and "to" language menus from the data model. | 93 // Completely rebuild "from" and "to" language menus from the data model. |
| 94 - (void)populateLanguageMenus; | 94 - (void)populateLanguageMenus; |
| 95 | 95 |
| 96 @end | 96 @end |
| 97 | 97 |
| 98 #pragma mark TranslateInfoBarController class | 98 #pragma mark TranslateInfoBarController class |
| 99 | 99 |
| 100 @implementation TranslateInfoBarControllerBase | 100 @implementation TranslateInfoBarControllerBase |
| 101 | 101 |
| 102 - (id)initWithDelegate:(InfoBarDelegate*)delegate | |
| 103 owner:(InfoBarService*)owner { | |
| 104 if ((self = [super initWithDelegate:delegate owner:owner])) { | |
| 105 originalLanguageMenuModel_.reset( | |
| 106 new LanguagesMenuModel([self delegate], | |
| 107 LanguagesMenuModel::ORIGINAL)); | |
| 108 | |
| 109 targetLanguageMenuModel_.reset( | |
| 110 new LanguagesMenuModel([self delegate], | |
| 111 LanguagesMenuModel::TARGET)); | |
| 112 } | |
| 113 return self; | |
| 114 } | |
| 115 | |
| 116 - (TranslateInfoBarDelegate*)delegate { | 102 - (TranslateInfoBarDelegate*)delegate { |
| 117 return reinterpret_cast<TranslateInfoBarDelegate*>(delegate_); | 103 return reinterpret_cast<TranslateInfoBarDelegate*>(delegate_); |
| 118 } | 104 } |
| 119 | 105 |
| 120 - (void)constructViews { | 106 - (void)constructViews { |
| 121 // Using a zero or very large frame causes GTMUILocalizerAndLayoutTweaker | 107 // Using a zero or very large frame causes GTMUILocalizerAndLayoutTweaker |
| 122 // to not resize the view properly so we take the bounds of the first label | 108 // to not resize the view properly so we take the bounds of the first label |
| 123 // which is contained in the nib. | 109 // which is contained in the nib. |
| 124 NSRect bogusFrame = [label_ frame]; | 110 NSRect bogusFrame = [label_ frame]; |
| 125 label1_.reset(CreateLabel(bogusFrame)); | 111 label1_.reset(CreateLabel(bogusFrame)); |
| 126 label2_.reset(CreateLabel(bogusFrame)); | 112 label2_.reset(CreateLabel(bogusFrame)); |
| 127 label3_.reset(CreateLabel(bogusFrame)); | 113 label3_.reset(CreateLabel(bogusFrame)); |
| 128 | 114 |
| 129 optionsPopUp_.reset([[NSPopUpButton alloc] initWithFrame:bogusFrame | 115 optionsPopUp_.reset([[NSPopUpButton alloc] initWithFrame:bogusFrame |
| 130 pullsDown:YES]); | 116 pullsDown:YES]); |
| 131 fromLanguagePopUp_.reset([[NSPopUpButton alloc] initWithFrame:bogusFrame | 117 fromLanguagePopUp_.reset([[NSPopUpButton alloc] initWithFrame:bogusFrame |
| 132 pullsDown:NO]); | 118 pullsDown:NO]); |
| 133 toLanguagePopUp_.reset([[NSPopUpButton alloc] initWithFrame:bogusFrame | 119 toLanguagePopUp_.reset([[NSPopUpButton alloc] initWithFrame:bogusFrame |
| 134 pullsDown:NO]); | 120 pullsDown:NO]); |
| 135 showOriginalButton_.reset([[NSButton alloc] init]); | 121 showOriginalButton_.reset([[NSButton alloc] init]); |
| 136 translateMessageButton_.reset([[NSButton alloc] init]); | 122 translateMessageButton_.reset([[NSButton alloc] init]); |
| 137 } | 123 } |
| 138 | 124 |
| 139 - (void)sourceLanguageModified:(NSInteger)newLanguageIdx { | 125 - (void)sourceLanguageModified:(NSInteger)newLanguageIdx { |
| 140 size_t newLanguageIdxSizeT = static_cast<size_t>(newLanguageIdx); | 126 size_t newLanguageIdxSizeT = static_cast<size_t>(newLanguageIdx); |
| 141 DCHECK_NE(TranslateInfoBarDelegate::kNoIndex, newLanguageIdxSizeT); | 127 DCHECK_NE(TranslateInfoBarDelegate::kNoIndex, newLanguageIdxSizeT); |
| 142 if (newLanguageIdxSizeT == [self delegate]->original_language_index()) | 128 if (newLanguageIdxSizeT == [self delegate]->original_language_index()) |
| 143 return; | 129 return; |
| 144 [self delegate]->SetOriginalLanguage(newLanguageIdxSizeT); | 130 [self delegate]->set_original_language_index(newLanguageIdxSizeT); |
| 131 if ([self delegate]->type() == TranslateInfoBarDelegate::AFTER_TRANSLATE) |
| 132 [self delegate]->Translate(); |
| 145 int commandId = IDC_TRANSLATE_ORIGINAL_LANGUAGE_BASE + newLanguageIdx; | 133 int commandId = IDC_TRANSLATE_ORIGINAL_LANGUAGE_BASE + newLanguageIdx; |
| 146 int newMenuIdx = [fromLanguagePopUp_ indexOfItemWithTag:commandId]; | 134 int newMenuIdx = [fromLanguagePopUp_ indexOfItemWithTag:commandId]; |
| 147 [fromLanguagePopUp_ selectItemAtIndex:newMenuIdx]; | 135 [fromLanguagePopUp_ selectItemAtIndex:newMenuIdx]; |
| 148 } | 136 } |
| 149 | 137 |
| 150 - (void)targetLanguageModified:(NSInteger)newLanguageIdx { | 138 - (void)targetLanguageModified:(NSInteger)newLanguageIdx { |
| 151 size_t newLanguageIdxSizeT = static_cast<size_t>(newLanguageIdx); | 139 size_t newLanguageIdxSizeT = static_cast<size_t>(newLanguageIdx); |
| 152 DCHECK_NE(TranslateInfoBarDelegate::kNoIndex, newLanguageIdxSizeT); | 140 DCHECK_NE(TranslateInfoBarDelegate::kNoIndex, newLanguageIdxSizeT); |
| 153 if (newLanguageIdxSizeT == [self delegate]->target_language_index()) | 141 if (newLanguageIdxSizeT == [self delegate]->target_language_index()) |
| 154 return; | 142 return; |
| 155 [self delegate]->SetTargetLanguage(newLanguageIdxSizeT); | 143 [self delegate]->set_target_language_index(newLanguageIdxSizeT); |
| 144 if ([self delegate]->type() == TranslateInfoBarDelegate::AFTER_TRANSLATE) |
| 145 [self delegate]->Translate(); |
| 156 int commandId = IDC_TRANSLATE_TARGET_LANGUAGE_BASE + newLanguageIdx; | 146 int commandId = IDC_TRANSLATE_TARGET_LANGUAGE_BASE + newLanguageIdx; |
| 157 int newMenuIdx = [toLanguagePopUp_ indexOfItemWithTag:commandId]; | 147 int newMenuIdx = [toLanguagePopUp_ indexOfItemWithTag:commandId]; |
| 158 [toLanguagePopUp_ selectItemAtIndex:newMenuIdx]; | 148 [toLanguagePopUp_ selectItemAtIndex:newMenuIdx]; |
| 159 } | 149 } |
| 160 | 150 |
| 161 - (void)loadLabelText { | 151 - (void)loadLabelText { |
| 162 // Do nothing by default, should be implemented by subclasses. | 152 // Do nothing by default, should be implemented by subclasses. |
| 163 } | 153 } |
| 164 | 154 |
| 165 - (void)updateState { | 155 - (void)updateState { |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 234 [optionsPopUp_ removeAllItems]; | 224 [optionsPopUp_ removeAllItems]; |
| 235 // Set title. | 225 // Set title. |
| 236 NSString* optionsLabel = hideTitle ? @"" : | 226 NSString* optionsLabel = hideTitle ? @"" : |
| 237 l10n_util::GetNSString(IDS_TRANSLATE_INFOBAR_OPTIONS); | 227 l10n_util::GetNSString(IDS_TRANSLATE_INFOBAR_OPTIONS); |
| 238 [optionsPopUp_ addItemWithTitle:optionsLabel]; | 228 [optionsPopUp_ addItemWithTitle:optionsLabel]; |
| 239 | 229 |
| 240 // Populate options menu. | 230 // Populate options menu. |
| 241 NSMenu* optionsMenu = [optionsPopUp_ menu]; | 231 NSMenu* optionsMenu = [optionsPopUp_ menu]; |
| 242 [optionsMenu setAutoenablesItems:NO]; | 232 [optionsMenu setAutoenablesItems:NO]; |
| 243 for (int i = 0; i < optionsMenuModel_->GetItemCount(); ++i) { | 233 for (int i = 0; i < optionsMenuModel_->GetItemCount(); ++i) { |
| 244 NSString* title = base::SysUTF16ToNSString( | |
| 245 optionsMenuModel_->GetLabelAt(i)); | |
| 246 int cmd = optionsMenuModel_->GetCommandIdAt(i); | |
| 247 bool checked = optionsMenuModel_->IsItemCheckedAt(i); | |
| 248 bool enabled = optionsMenuModel_->IsEnabledAt(i); | |
| 249 AddMenuItem(optionsMenu, | 234 AddMenuItem(optionsMenu, |
| 250 self, | 235 self, |
| 251 @selector(optionsMenuChanged:), | 236 @selector(optionsMenuChanged:), |
| 252 title, | 237 base::SysUTF16ToNSString(optionsMenuModel_->GetLabelAt(i)), |
| 253 cmd, | 238 optionsMenuModel_->GetCommandIdAt(i), |
| 254 enabled, | 239 optionsMenuModel_->IsEnabledAt(i), |
| 255 checked); | 240 optionsMenuModel_->IsItemCheckedAt(i)); |
| 256 } | 241 } |
| 257 } | 242 } |
| 258 | 243 |
| 259 - (BOOL)shouldShowOptionsPopUp { | 244 - (BOOL)shouldShowOptionsPopUp { |
| 260 return YES; | 245 return YES; |
| 261 } | 246 } |
| 262 | 247 |
| 263 - (void)populateLanguageMenus { | 248 - (void)populateLanguageMenus { |
| 264 NSMenu* originalLanguageMenu = [fromLanguagePopUp_ menu]; | 249 NSMenu* originalLanguageMenu = [fromLanguagePopUp_ menu]; |
| 265 [originalLanguageMenu setAutoenablesItems:NO]; | 250 [originalLanguageMenu setAutoenablesItems:NO]; |
| 266 int selectedMenuIndex = 0; | 251 NSMenu* targetLanguageMenu = [toLanguagePopUp_ menu]; |
| 267 int selectedLangIndex = | 252 [targetLanguageMenu setAutoenablesItems:NO]; |
| 268 static_cast<int>([self delegate]->original_language_index()); | 253 for (size_t i = 0; i < [self delegate]->num_languages(); ++i) { |
| 269 for (int i = 0; i < originalLanguageMenuModel_->GetItemCount(); ++i) { | 254 NSString* title = |
| 270 NSString* title = base::SysUTF16ToNSString( | 255 base::SysUTF16ToNSString([self delegate]->language_name_at(i)); |
| 271 originalLanguageMenuModel_->GetLabelAt(i)); | |
| 272 int cmd = originalLanguageMenuModel_->GetCommandIdAt(i); | |
| 273 bool checked = (cmd == selectedLangIndex); | |
| 274 if (checked) | |
| 275 selectedMenuIndex = i; | |
| 276 bool enabled = originalLanguageMenuModel_->IsEnabledAt(i); | |
| 277 cmd += IDC_TRANSLATE_ORIGINAL_LANGUAGE_BASE; | |
| 278 AddMenuItem(originalLanguageMenu, | 256 AddMenuItem(originalLanguageMenu, |
| 279 self, | 257 self, |
| 280 @selector(languageMenuChanged:), | 258 @selector(languageMenuChanged:), |
| 281 title, | 259 title, |
| 282 cmd, | 260 IDC_TRANSLATE_ORIGINAL_LANGUAGE_BASE + i, |
| 283 enabled, | 261 i != [self delegate]->target_language_index(), |
| 284 checked); | 262 i == [self delegate]->original_language_index()); |
| 285 } | |
| 286 [fromLanguagePopUp_ selectItemAtIndex:selectedMenuIndex]; | |
| 287 | |
| 288 NSMenu* targetLanguageMenu = [toLanguagePopUp_ menu]; | |
| 289 [targetLanguageMenu setAutoenablesItems:NO]; | |
| 290 selectedLangIndex = | |
| 291 static_cast<int>([self delegate]->target_language_index()); | |
| 292 for (int i = 0; i < targetLanguageMenuModel_->GetItemCount(); ++i) { | |
| 293 NSString* title = base::SysUTF16ToNSString( | |
| 294 targetLanguageMenuModel_->GetLabelAt(i)); | |
| 295 int cmd = targetLanguageMenuModel_->GetCommandIdAt(i); | |
| 296 bool checked = (cmd == selectedLangIndex); | |
| 297 if (checked) | |
| 298 selectedMenuIndex = i; | |
| 299 bool enabled = targetLanguageMenuModel_->IsEnabledAt(i); | |
| 300 cmd += IDC_TRANSLATE_TARGET_LANGUAGE_BASE; | |
| 301 AddMenuItem(targetLanguageMenu, | 263 AddMenuItem(targetLanguageMenu, |
| 302 self, | 264 self, |
| 303 @selector(languageMenuChanged:), | 265 @selector(languageMenuChanged:), |
| 304 title, | 266 title, |
| 305 cmd, | 267 IDC_TRANSLATE_TARGET_LANGUAGE_BASE + i, |
| 306 enabled, | 268 i != [self delegate]->original_language_index(), |
| 307 checked); | 269 i == [self delegate]->target_language_index()); |
| 308 } | 270 } |
| 309 [toLanguagePopUp_ selectItemAtIndex:selectedMenuIndex]; | 271 [fromLanguagePopUp_ |
| 272 selectItemAtIndex:([self delegate]->original_language_index())]; |
| 273 [toLanguagePopUp_ |
| 274 selectItemAtIndex:([self delegate]->target_language_index())]; |
| 310 } | 275 } |
| 311 | 276 |
| 312 - (void)addAdditionalControls { | 277 - (void)addAdditionalControls { |
| 313 using l10n_util::GetNSString; | 278 using l10n_util::GetNSString; |
| 314 using l10n_util::GetNSStringWithFixup; | 279 using l10n_util::GetNSStringWithFixup; |
| 315 | 280 |
| 316 // Get layout information from the NIB. | 281 // Get layout information from the NIB. |
| 317 NSRect okButtonFrame = [okButton_ frame]; | 282 NSRect okButtonFrame = [okButton_ frame]; |
| 318 NSRect cancelButtonFrame = [cancelButton_ frame]; | 283 NSRect cancelButtonFrame = [cancelButton_ frame]; |
| 319 | 284 |
| (...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 575 [[control description] UTF8String] <<[title UTF8String]; | 540 [[control description] UTF8String] <<[title UTF8String]; |
| 576 return false; | 541 return false; |
| 577 } | 542 } |
| 578 previousControl = control; | 543 previousControl = control; |
| 579 } | 544 } |
| 580 | 545 |
| 581 return true; | 546 return true; |
| 582 } | 547 } |
| 583 | 548 |
| 584 @end // TranslateInfoBarControllerBase (TestingAPI) | 549 @end // TranslateInfoBarControllerBase (TestingAPI) |
| OLD | NEW |