| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #import <Cocoa/Cocoa.h> | |
| 6 #import "chrome/browser/cocoa/infobar_controller.h" | |
| 7 | |
| 8 #import "base/cocoa_protocols_mac.h" | |
| 9 #import "base/scoped_nsobject.h" | |
| 10 #include "base/scoped_ptr.h" | |
| 11 #include "chrome/browser/translate/languages_menu_model.h" | |
| 12 #include "chrome/browser/translate/options_menu_model.h" | |
| 13 #include "chrome/browser/translate/translate_infobars_delegates.h" | |
| 14 #include "chrome/common/notification_registrar.h" | |
| 15 #include "chrome/common/translate_errors.h" | |
| 16 | |
| 17 class TranslateInfoBarMenuModel; | |
| 18 class TranslateNotificationObserverBridge; | |
| 19 | |
| 20 // Draws and maintains Translate Infobar GUI. | |
| 21 // The translate bar can be in one of 3 states: | |
| 22 // 1. "Before Translate" - source language popup and translate/cancel buttons | |
| 23 // visible. | |
| 24 // 2. "Translating" - "Translating..." status text visible in address bar. | |
| 25 // 3. "After Translation" - source & target language popups visible. | |
| 26 // | |
| 27 // The following state transitions are supported: | |
| 28 // 1->{2,3} | |
| 29 // 2<->3 | |
| 30 // i.e. Once you've transitioned out of "Before Translate" mode you can't switch | |
| 31 // back, however all other state transitions are supported. | |
| 32 // | |
| 33 // The GUI uses popup menus interspersed in a text label. For localization | |
| 34 // purposes this means we potentially need 3 labels to display the UI (the 3rd | |
| 35 // is only visible in certain locales). | |
| 36 @interface TranslateInfoBarController : InfoBarController<NSMenuDelegate> { | |
| 37 @protected | |
| 38 // Infobar keeps track of the state it is displaying, which should match that | |
| 39 // in the TranslateInfoBarDelegate. UI needs to keep track separately because | |
| 40 // infobar may receive PAGE_TRANSLATED notifications before delegate does, in | |
| 41 // which case, delegate's state is not updated and hence can't be used to | |
| 42 // update display. After the notification is sent out to all observers, both | |
| 43 // infobar and delegate would end up with the same state. | |
| 44 TranslateInfoBarDelegate::TranslateState state_; | |
| 45 | |
| 46 // Is a translation currently in progress. | |
| 47 bool translationPending_; | |
| 48 | |
| 49 scoped_nsobject<NSTextField> label1_; | |
| 50 scoped_nsobject<NSTextField> label2_; | |
| 51 scoped_nsobject<NSTextField> label3_; | |
| 52 scoped_nsobject<NSTextField> translatingLabel_; | |
| 53 scoped_nsobject<NSPopUpButton> fromLanguagePopUp_; | |
| 54 scoped_nsobject<NSPopUpButton> toLanguagePopUp_; | |
| 55 scoped_nsobject<NSPopUpButton> optionsPopUp_; | |
| 56 scoped_nsobject<NSButton> showOriginalButton_; | |
| 57 scoped_nsobject<NSButton> tryAgainButton_; | |
| 58 | |
| 59 // In the current locale, are the "from" and "to" language popup menu | |
| 60 // flipped from what they'd appear in English. | |
| 61 bool swappedLanguagePlaceholders_; | |
| 62 | |
| 63 // Space between controls in pixels - read from the NIB. | |
| 64 CGFloat spaceBetweenControls_; | |
| 65 int numLabelsDisplayed_; | |
| 66 | |
| 67 scoped_ptr<LanguagesMenuModel> original_language_menu_model_; | |
| 68 scoped_ptr<LanguagesMenuModel> target_language_menu_model_; | |
| 69 scoped_ptr<OptionsMenuModel> options_menu_model_; | |
| 70 scoped_ptr<TranslateInfoBarMenuModel> menu_model_; | |
| 71 scoped_ptr<TranslateNotificationObserverBridge> observer_bridge_; | |
| 72 } | |
| 73 | |
| 74 // Called when the "Show Original" button is pressed. | |
| 75 - (IBAction)showOriginal:(id)sender; | |
| 76 | |
| 77 @end | |
| 78 | |
| 79 @interface TranslateInfoBarController (TestingAPI) | |
| 80 | |
| 81 // Main function to update the toolbar graphic state and data model after | |
| 82 // the state has changed. | |
| 83 // Controls are moved around as needed and visibility changed to match the | |
| 84 // current state. | |
| 85 - (void)updateState:(TranslateInfoBarDelegate::TranslateState)newState | |
| 86 translationPending:(bool)newTranslationPending | |
| 87 error:(TranslateErrors::Type)error; | |
| 88 | |
| 89 | |
| 90 // Called when the source or target language selection changes in a menu. | |
| 91 // |newLanguageIdx| is the index of the newly selected item in the appropriate | |
| 92 // menu. | |
| 93 - (void)sourceLanguageModified:(NSInteger)newLanguageIdx; | |
| 94 - (void)targetLanguageModified:(NSInteger)newLanguageIdx; | |
| 95 | |
| 96 // Called when an item in one of the toolbar's menus is selected. | |
| 97 - (void)menuItemSelected:(id)item; | |
| 98 | |
| 99 // Returns the underlying options menu. | |
| 100 - (NSMenu*)optionsMenu; | |
| 101 | |
| 102 // Returns the "try again" button. | |
| 103 - (NSButton*)tryAgainButton; | |
| 104 | |
| 105 // The TranslateInfoBarController's internal idea of the current state. | |
| 106 - (TranslateInfoBarDelegate::TranslateState)state; | |
| 107 | |
| 108 // Verifies that the layout of the infobar is correct for |state|. | |
| 109 - (bool)verifyLayout:(TranslateInfoBarDelegate::TranslateState)state | |
| 110 translationPending:(bool)translationPending; | |
| 111 | |
| 112 // Teardown and rebuild the options menu. | |
| 113 - (void)rebuildOptionsMenu; | |
| 114 | |
| 115 @end | |
| OLD | NEW |