| 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/strings/sys_string_conversions.h" | 8 #include "base/strings/sys_string_conversions.h" |
| 9 #include "chrome/app/chrome_command_ids.h" | 9 #include "chrome/app/chrome_command_ids.h" |
| 10 #include "chrome/browser/translate/chrome_translate_client.h" | 10 #include "chrome/browser/translate/chrome_translate_client.h" |
| (...skipping 11 matching lines...) Expand all Loading... |
| 22 #include "third_party/google_toolbox_for_mac/src/AppKit/GTMUILocalizerAndLayoutT
weaker.h" | 22 #include "third_party/google_toolbox_for_mac/src/AppKit/GTMUILocalizerAndLayoutT
weaker.h" |
| 23 #include "ui/base/l10n/l10n_util.h" | 23 #include "ui/base/l10n/l10n_util.h" |
| 24 | 24 |
| 25 using InfoBarUtilities::MoveControl; | 25 using InfoBarUtilities::MoveControl; |
| 26 using InfoBarUtilities::VerticallyCenterView; | 26 using InfoBarUtilities::VerticallyCenterView; |
| 27 using InfoBarUtilities::VerifyControlOrderAndSpacing; | 27 using InfoBarUtilities::VerifyControlOrderAndSpacing; |
| 28 using InfoBarUtilities::CreateLabel; | 28 using InfoBarUtilities::CreateLabel; |
| 29 using InfoBarUtilities::AddMenuItem; | 29 using InfoBarUtilities::AddMenuItem; |
| 30 | 30 |
| 31 scoped_ptr<infobars::InfoBar> ChromeTranslateClient::CreateInfoBar( | 31 scoped_ptr<infobars::InfoBar> ChromeTranslateClient::CreateInfoBar( |
| 32 scoped_ptr<TranslateInfoBarDelegate> delegate) const { | 32 scoped_ptr<translate::TranslateInfoBarDelegate> delegate) const { |
| 33 scoped_ptr<InfoBarCocoa> infobar( | 33 scoped_ptr<InfoBarCocoa> infobar( |
| 34 new InfoBarCocoa(delegate.PassAs<infobars::InfoBarDelegate>())); | 34 new InfoBarCocoa(delegate.PassAs<infobars::InfoBarDelegate>())); |
| 35 base::scoped_nsobject<TranslateInfoBarControllerBase> infobar_controller; | 35 base::scoped_nsobject<TranslateInfoBarControllerBase> infobar_controller; |
| 36 switch (infobar->delegate()->AsTranslateInfoBarDelegate()->translate_step()) { | 36 switch (infobar->delegate()->AsTranslateInfoBarDelegate()->translate_step()) { |
| 37 case translate::TRANSLATE_STEP_BEFORE_TRANSLATE: | 37 case translate::TRANSLATE_STEP_BEFORE_TRANSLATE: |
| 38 infobar_controller.reset([[BeforeTranslateInfobarController alloc] | 38 infobar_controller.reset([[BeforeTranslateInfobarController alloc] |
| 39 initWithInfoBar:infobar.get()]); | 39 initWithInfoBar:infobar.get()]); |
| 40 break; | 40 break; |
| 41 case translate::TRANSLATE_STEP_AFTER_TRANSLATE: | 41 case translate::TRANSLATE_STEP_AFTER_TRANSLATE: |
| 42 infobar_controller.reset([[AfterTranslateInfobarController alloc] | 42 infobar_controller.reset([[AfterTranslateInfobarController alloc] |
| (...skipping 26 matching lines...) Expand all Loading... |
| 69 @interface TranslateInfoBarControllerBase (Private) | 69 @interface TranslateInfoBarControllerBase (Private) |
| 70 | 70 |
| 71 // Removes all controls so that layout can add in only the controls | 71 // Removes all controls so that layout can add in only the controls |
| 72 // required. | 72 // required. |
| 73 - (void)clearAllControls; | 73 - (void)clearAllControls; |
| 74 | 74 |
| 75 // Create all the various controls we need for the toolbar. | 75 // Create all the various controls we need for the toolbar. |
| 76 - (void)constructViews; | 76 - (void)constructViews; |
| 77 | 77 |
| 78 // Reloads text for all labels for the current state. | 78 // Reloads text for all labels for the current state. |
| 79 - (void)loadLabelText:(TranslateErrors::Type)error; | 79 - (void)loadLabelText:(translate::TranslateErrors::Type)error; |
| 80 | 80 |
| 81 // Main function to update the toolbar graphic state and data model after | 81 // Main function to update the toolbar graphic state and data model after |
| 82 // the state has changed. | 82 // the state has changed. |
| 83 // Controls are moved around as needed and visibility changed to match the | 83 // Controls are moved around as needed and visibility changed to match the |
| 84 // current state. | 84 // current state. |
| 85 - (void)updateState; | 85 - (void)updateState; |
| 86 | 86 |
| 87 // Called when the source or target language selection changes in a menu. | 87 // Called when the source or target language selection changes in a menu. |
| 88 // |newLanguageIdx| is the index of the newly selected item in the appropriate | 88 // |newLanguageIdx| is the index of the newly selected item in the appropriate |
| 89 // menu. | 89 // menu. |
| 90 - (void)sourceLanguageModified:(NSInteger)newLanguageIdx; | 90 - (void)sourceLanguageModified:(NSInteger)newLanguageIdx; |
| 91 - (void)targetLanguageModified:(NSInteger)newLanguageIdx; | 91 - (void)targetLanguageModified:(NSInteger)newLanguageIdx; |
| 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 - (TranslateInfoBarDelegate*)delegate { | 102 - (translate::TranslateInfoBarDelegate*)delegate { |
| 103 return reinterpret_cast<TranslateInfoBarDelegate*>([super delegate]); | 103 return reinterpret_cast<translate::TranslateInfoBarDelegate*>( |
| 104 [super delegate]); |
| 104 } | 105 } |
| 105 | 106 |
| 106 - (void)constructViews { | 107 - (void)constructViews { |
| 107 // Using a zero or very large frame causes GTMUILocalizerAndLayoutTweaker | 108 // Using a zero or very large frame causes GTMUILocalizerAndLayoutTweaker |
| 108 // to not resize the view properly so we take the bounds of the first label | 109 // to not resize the view properly so we take the bounds of the first label |
| 109 // which is contained in the nib. | 110 // which is contained in the nib. |
| 110 NSRect bogusFrame = [label_ frame]; | 111 NSRect bogusFrame = [label_ frame]; |
| 111 label1_.reset(CreateLabel(bogusFrame)); | 112 label1_.reset(CreateLabel(bogusFrame)); |
| 112 label2_.reset(CreateLabel(bogusFrame)); | 113 label2_.reset(CreateLabel(bogusFrame)); |
| 113 label3_.reset(CreateLabel(bogusFrame)); | 114 label3_.reset(CreateLabel(bogusFrame)); |
| 114 | 115 |
| 115 optionsPopUp_.reset([[NSPopUpButton alloc] initWithFrame:bogusFrame | 116 optionsPopUp_.reset([[NSPopUpButton alloc] initWithFrame:bogusFrame |
| 116 pullsDown:YES]); | 117 pullsDown:YES]); |
| 117 fromLanguagePopUp_.reset([[NSPopUpButton alloc] initWithFrame:bogusFrame | 118 fromLanguagePopUp_.reset([[NSPopUpButton alloc] initWithFrame:bogusFrame |
| 118 pullsDown:NO]); | 119 pullsDown:NO]); |
| 119 toLanguagePopUp_.reset([[NSPopUpButton alloc] initWithFrame:bogusFrame | 120 toLanguagePopUp_.reset([[NSPopUpButton alloc] initWithFrame:bogusFrame |
| 120 pullsDown:NO]); | 121 pullsDown:NO]); |
| 121 showOriginalButton_.reset([[NSButton alloc] init]); | 122 showOriginalButton_.reset([[NSButton alloc] init]); |
| 122 translateMessageButton_.reset([[NSButton alloc] init]); | 123 translateMessageButton_.reset([[NSButton alloc] init]); |
| 123 } | 124 } |
| 124 | 125 |
| 125 - (void)sourceLanguageModified:(NSInteger)newLanguageIdx { | 126 - (void)sourceLanguageModified:(NSInteger)newLanguageIdx { |
| 126 size_t newLanguageIdxSizeT = static_cast<size_t>(newLanguageIdx); | 127 size_t newLanguageIdxSizeT = static_cast<size_t>(newLanguageIdx); |
| 127 DCHECK_NE(TranslateInfoBarDelegate::kNoIndex, newLanguageIdxSizeT); | 128 DCHECK_NE(translate::TranslateInfoBarDelegate::kNoIndex, newLanguageIdxSizeT); |
| 128 if (newLanguageIdxSizeT == [self delegate]->original_language_index()) | 129 if (newLanguageIdxSizeT == [self delegate]->original_language_index()) |
| 129 return; | 130 return; |
| 130 [self delegate]->UpdateOriginalLanguageIndex(newLanguageIdxSizeT); | 131 [self delegate]->UpdateOriginalLanguageIndex(newLanguageIdxSizeT); |
| 131 if ([self delegate]->translate_step() == | 132 if ([self delegate]->translate_step() == |
| 132 translate::TRANSLATE_STEP_AFTER_TRANSLATE) | 133 translate::TRANSLATE_STEP_AFTER_TRANSLATE) |
| 133 [self delegate]->Translate(); | 134 [self delegate]->Translate(); |
| 134 int commandId = IDC_TRANSLATE_ORIGINAL_LANGUAGE_BASE + newLanguageIdx; | 135 int commandId = IDC_TRANSLATE_ORIGINAL_LANGUAGE_BASE + newLanguageIdx; |
| 135 int newMenuIdx = [fromLanguagePopUp_ indexOfItemWithTag:commandId]; | 136 int newMenuIdx = [fromLanguagePopUp_ indexOfItemWithTag:commandId]; |
| 136 [fromLanguagePopUp_ selectItemAtIndex:newMenuIdx]; | 137 [fromLanguagePopUp_ selectItemAtIndex:newMenuIdx]; |
| 137 } | 138 } |
| 138 | 139 |
| 139 - (void)targetLanguageModified:(NSInteger)newLanguageIdx { | 140 - (void)targetLanguageModified:(NSInteger)newLanguageIdx { |
| 140 size_t newLanguageIdxSizeT = static_cast<size_t>(newLanguageIdx); | 141 size_t newLanguageIdxSizeT = static_cast<size_t>(newLanguageIdx); |
| 141 DCHECK_NE(TranslateInfoBarDelegate::kNoIndex, newLanguageIdxSizeT); | 142 DCHECK_NE(translate::TranslateInfoBarDelegate::kNoIndex, newLanguageIdxSizeT); |
| 142 if (newLanguageIdxSizeT == [self delegate]->target_language_index()) | 143 if (newLanguageIdxSizeT == [self delegate]->target_language_index()) |
| 143 return; | 144 return; |
| 144 [self delegate]->UpdateTargetLanguageIndex(newLanguageIdxSizeT); | 145 [self delegate]->UpdateTargetLanguageIndex(newLanguageIdxSizeT); |
| 145 if ([self delegate]->translate_step() == | 146 if ([self delegate]->translate_step() == |
| 146 translate::TRANSLATE_STEP_AFTER_TRANSLATE) | 147 translate::TRANSLATE_STEP_AFTER_TRANSLATE) |
| 147 [self delegate]->Translate(); | 148 [self delegate]->Translate(); |
| 148 int commandId = IDC_TRANSLATE_TARGET_LANGUAGE_BASE + newLanguageIdx; | 149 int commandId = IDC_TRANSLATE_TARGET_LANGUAGE_BASE + newLanguageIdx; |
| 149 int newMenuIdx = [toLanguagePopUp_ indexOfItemWithTag:commandId]; | 150 int newMenuIdx = [toLanguagePopUp_ indexOfItemWithTag:commandId]; |
| 150 [toLanguagePopUp_ selectItemAtIndex:newMenuIdx]; | 151 [toLanguagePopUp_ selectItemAtIndex:newMenuIdx]; |
| 151 } | 152 } |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 214 - (NSArray*)visibleControls { | 215 - (NSArray*)visibleControls { |
| 215 return [NSArray array]; | 216 return [NSArray array]; |
| 216 } | 217 } |
| 217 | 218 |
| 218 - (void)rebuildOptionsMenu:(BOOL)hideTitle { | 219 - (void)rebuildOptionsMenu:(BOOL)hideTitle { |
| 219 if (![self shouldShowOptionsPopUp]) | 220 if (![self shouldShowOptionsPopUp]) |
| 220 return; | 221 return; |
| 221 | 222 |
| 222 // The options model doesn't know how to handle state transitions, so rebuild | 223 // The options model doesn't know how to handle state transitions, so rebuild |
| 223 // it each time through here. | 224 // it each time through here. |
| 224 optionsMenuModel_.reset(new OptionsMenuModel([self delegate])); | 225 optionsMenuModel_.reset(new translate::OptionsMenuModel([self delegate])); |
| 225 | 226 |
| 226 [optionsPopUp_ removeAllItems]; | 227 [optionsPopUp_ removeAllItems]; |
| 227 // Set title. | 228 // Set title. |
| 228 NSString* optionsLabel = hideTitle ? @"" : | 229 NSString* optionsLabel = hideTitle ? @"" : |
| 229 l10n_util::GetNSString(IDS_TRANSLATE_INFOBAR_OPTIONS); | 230 l10n_util::GetNSString(IDS_TRANSLATE_INFOBAR_OPTIONS); |
| 230 [optionsPopUp_ addItemWithTitle:optionsLabel]; | 231 [optionsPopUp_ addItemWithTitle:optionsLabel]; |
| 231 | 232 |
| 232 // Populate options menu. | 233 // Populate options menu. |
| 233 NSMenu* optionsMenu = [optionsPopUp_ menu]; | 234 NSMenu* optionsMenu = [optionsPopUp_ menu]; |
| 234 [optionsMenu setAutoenablesItems:NO]; | 235 [optionsMenu setAutoenablesItems:NO]; |
| (...skipping 29 matching lines...) Expand all Loading... |
| 264 i == [self delegate]->original_language_index()); | 265 i == [self delegate]->original_language_index()); |
| 265 AddMenuItem(targetLanguageMenu, | 266 AddMenuItem(targetLanguageMenu, |
| 266 self, | 267 self, |
| 267 @selector(languageMenuChanged:), | 268 @selector(languageMenuChanged:), |
| 268 title, | 269 title, |
| 269 IDC_TRANSLATE_TARGET_LANGUAGE_BASE + i, | 270 IDC_TRANSLATE_TARGET_LANGUAGE_BASE + i, |
| 270 i != [self delegate]->original_language_index(), | 271 i != [self delegate]->original_language_index(), |
| 271 i == [self delegate]->target_language_index()); | 272 i == [self delegate]->target_language_index()); |
| 272 } | 273 } |
| 273 if ([self delegate]->original_language_index() != | 274 if ([self delegate]->original_language_index() != |
| 274 TranslateInfoBarDelegate::kNoIndex) { | 275 translate::TranslateInfoBarDelegate::kNoIndex) { |
| 275 [fromLanguagePopUp_ | 276 [fromLanguagePopUp_ |
| 276 selectItemAtIndex:([self delegate]->original_language_index())]; | 277 selectItemAtIndex:([self delegate]->original_language_index())]; |
| 277 } | 278 } |
| 278 [toLanguagePopUp_ | 279 [toLanguagePopUp_ |
| 279 selectItemAtIndex:([self delegate]->target_language_index())]; | 280 selectItemAtIndex:([self delegate]->target_language_index())]; |
| 280 } | 281 } |
| 281 | 282 |
| 282 - (void)addAdditionalControls { | 283 - (void)addAdditionalControls { |
| 283 using l10n_util::GetNSString; | 284 using l10n_util::GetNSString; |
| 284 using l10n_util::GetNSStringWithFixup; | 285 using l10n_util::GetNSStringWithFixup; |
| (...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 393 if (!VerifyControlOrderAndSpacing(lastView, optionsPopUp_)) { | 394 if (!VerifyControlOrderAndSpacing(lastView, optionsPopUp_)) { |
| 394 [optionsPopUp_ setHidden:YES]; | 395 [optionsPopUp_ setHidden:YES]; |
| 395 } | 396 } |
| 396 } | 397 } |
| 397 } | 398 } |
| 398 | 399 |
| 399 // Called when "Translate" button is clicked. | 400 // Called when "Translate" button is clicked. |
| 400 - (void)ok:(id)sender { | 401 - (void)ok:(id)sender { |
| 401 if (![self isOwned]) | 402 if (![self isOwned]) |
| 402 return; | 403 return; |
| 403 TranslateInfoBarDelegate* delegate = [self delegate]; | 404 translate::TranslateInfoBarDelegate* delegate = [self delegate]; |
| 404 translate::TranslateStep state = delegate->translate_step(); | 405 translate::TranslateStep state = delegate->translate_step(); |
| 405 DCHECK(state == translate::TRANSLATE_STEP_BEFORE_TRANSLATE || | 406 DCHECK(state == translate::TRANSLATE_STEP_BEFORE_TRANSLATE || |
| 406 state == translate::TRANSLATE_STEP_TRANSLATE_ERROR); | 407 state == translate::TRANSLATE_STEP_TRANSLATE_ERROR); |
| 407 delegate->Translate(); | 408 delegate->Translate(); |
| 408 } | 409 } |
| 409 | 410 |
| 410 // Called when someone clicks on the "Nope" button. | 411 // Called when someone clicks on the "Nope" button. |
| 411 - (void)cancel:(id)sender { | 412 - (void)cancel:(id)sender { |
| 412 if (![self isOwned]) | 413 if (![self isOwned]) |
| 413 return; | 414 return; |
| 414 TranslateInfoBarDelegate* delegate = [self delegate]; | 415 translate::TranslateInfoBarDelegate* delegate = [self delegate]; |
| 415 DCHECK_EQ(translate::TRANSLATE_STEP_BEFORE_TRANSLATE, | 416 DCHECK_EQ(translate::TRANSLATE_STEP_BEFORE_TRANSLATE, |
| 416 delegate->translate_step()); | 417 delegate->translate_step()); |
| 417 delegate->TranslationDeclined(); | 418 delegate->TranslationDeclined(); |
| 418 [super removeSelf]; | 419 [super removeSelf]; |
| 419 } | 420 } |
| 420 | 421 |
| 421 - (void)messageButtonPressed:(id)sender { | 422 - (void)messageButtonPressed:(id)sender { |
| 422 if (![self isOwned]) | 423 if (![self isOwned]) |
| 423 return; | 424 return; |
| 424 [self delegate]->MessageInfoBarButtonPressed(); | 425 [self delegate]->MessageInfoBarButtonPressed(); |
| (...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 546 [[control description] UTF8String] <<[title UTF8String]; | 547 [[control description] UTF8String] <<[title UTF8String]; |
| 547 return false; | 548 return false; |
| 548 } | 549 } |
| 549 previousControl = control; | 550 previousControl = control; |
| 550 } | 551 } |
| 551 | 552 |
| 552 return true; | 553 return true; |
| 553 } | 554 } |
| 554 | 555 |
| 555 @end // TranslateInfoBarControllerBase (TestingAPI) | 556 @end // TranslateInfoBarControllerBase (TestingAPI) |
| OLD | NEW |