translate_bubble_view.h revision 8bcbed890bc3ce4d7a057a8f32cab53fa534672e
1// Copyright 2013 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#ifndef CHROME_BROWSER_UI_VIEWS_TRANSLATE_TRANSLATE_BUBBLE_VIEW_H_ 6#define CHROME_BROWSER_UI_VIEWS_TRANSLATE_TRANSLATE_BUBBLE_VIEW_H_ 7 8#include <map> 9#include <string> 10 11#include "base/basictypes.h" 12#include "chrome/browser/ui/translate/language_combobox_model.h" 13#include "chrome/browser/ui/translate/translate_bubble_model.h" 14#include "ui/views/bubble/bubble_delegate.h" 15#include "ui/views/controls/button/button.h" 16#include "ui/views/controls/combobox/combobox_listener.h" 17#include "ui/views/controls/link_listener.h" 18 19class Browser; 20class PrefService; 21class TranslateBubbleModel; 22 23namespace content { 24class WebContents; 25} 26 27namespace views { 28class Checkbox; 29class GridLayout; 30class LabelButton; 31class Link; 32class View; 33} 34 35class TranslateBubbleView : public views::BubbleDelegateView, 36 public views::ButtonListener, 37 public views::ComboboxListener, 38 public views::LinkListener { 39 public: 40 virtual ~TranslateBubbleView(); 41 42 // Shows the Translate bubble. 43 static void ShowBubble(views::View* anchor_view, 44 content::WebContents* web_contents, 45 TranslateBubbleModel::ViewState type, 46 Browser* browser); 47 48 // If true, the Translate bubble is being shown. 49 static bool IsShowing(); 50 51 // views::BubbleDelegateView methods. 52 virtual void Init() OVERRIDE; 53 virtual void ButtonPressed(views::Button* sender, 54 const ui::Event& event) OVERRIDE; 55 56 // views::WidgetDelegate method. 57 virtual void WindowClosing() OVERRIDE; 58 59 // views::View methods. 60 virtual bool AcceleratorPressed(const ui::Accelerator& accelerator) OVERRIDE; 61 virtual gfx::Size GetPreferredSize() OVERRIDE; 62 63 // views::CombboxListener method. 64 virtual void OnSelectedIndexChanged(views::Combobox* combobox) OVERRIDE; 65 66 // views::LinkListener method. 67 virtual void LinkClicked(views::Link* source, int event_flags) OVERRIDE; 68 69 // Returns the current view state. 70 TranslateBubbleModel::ViewState GetViewState() const; 71 72 private: 73 enum LinkID { 74 LINK_ID_ADVANCED, 75 LINK_ID_LEARN_MORE, 76 }; 77 78 enum ButtonID { 79 BUTTON_ID_TRANSLATE, 80 BUTTON_ID_DONE, 81 BUTTON_ID_CANCEL, 82 BUTTON_ID_SHOW_ORIGINAL, 83 BUTTON_ID_TRY_AGAIN, 84 BUTTON_ID_ALWAYS_TRANSLATE, 85 }; 86 87 enum ComboboxID { 88 COMBOBOX_ID_DENIAL, 89 COMBOBOX_ID_SOURCE_LANGUAGE, 90 COMBOBOX_ID_TARGET_LANGUAGE, 91 }; 92 93 friend class TranslateBubbleViewTest; 94 FRIEND_TEST_ALL_PREFIXES(TranslateBubbleViewTest, TranslateButton); 95 FRIEND_TEST_ALL_PREFIXES(TranslateBubbleViewTest, AdvancedLink); 96 FRIEND_TEST_ALL_PREFIXES(TranslateBubbleViewTest, ShowOriginalButton); 97 FRIEND_TEST_ALL_PREFIXES(TranslateBubbleViewTest, TryAgainButton); 98 FRIEND_TEST_ALL_PREFIXES(TranslateBubbleViewTest, AlwaysTranslateCheckbox); 99 FRIEND_TEST_ALL_PREFIXES(TranslateBubbleViewTest, DoneButton); 100 FRIEND_TEST_ALL_PREFIXES(TranslateBubbleViewTest, 101 CancelButtonReturningBeforeTranslate); 102 FRIEND_TEST_ALL_PREFIXES(TranslateBubbleViewTest, 103 CancelButtonReturningAfterTranslate); 104 FRIEND_TEST_ALL_PREFIXES(TranslateBubbleViewTest, CancelButtonReturningError); 105 106 TranslateBubbleView(views::View* anchor_view, 107 scoped_ptr<TranslateBubbleModel> model, 108 bool is_in_incognito_window, 109 Browser* browser); 110 111 // Returns the current child view. 112 views::View* GetCurrentView(); 113 114 // Handles the event when the user presses a button. 115 void HandleButtonPressed(ButtonID sender_id); 116 117 // Handles the event when the user clicks a link. 118 void HandleLinkClicked(LinkID sender_id); 119 120 // Updates the visibilities of child views according to the current view type. 121 void UpdateChildVisibilities(); 122 123 // Creates the 'before translate' view. Caller takes ownership of the returned 124 // view. 125 views::View* CreateViewBeforeTranslate(); 126 127 // Creates the 'translating' view. Caller takes ownership of the returned 128 // view. 129 views::View* CreateViewTranslating(); 130 131 // Creates the 'after translate' view. Caller takes ownership of the returned 132 // view. 133 views::View* CreateViewAfterTranslate(); 134 135 // Creates the 'error' view. Caller takes ownership of the returned view. 136 views::View* CreateViewError(); 137 138 // Creates the 'advanced' view. Caller takes ownership of the returned view. 139 views::View* CreateViewAdvanced(); 140 141 // Switches the view type. 142 void SwitchView(TranslateBubbleModel::ViewState view_state); 143 144 // Updates the advanced view. 145 void UpdateAdvancedView(); 146 147 static TranslateBubbleView* translate_bubble_view_; 148 149 views::View* before_translate_view_; 150 views::View* translating_view_; 151 views::View* after_translate_view_; 152 views::View* error_view_; 153 views::View* advanced_view_; 154 155 scoped_ptr<LanguageComboboxModel> source_language_combobox_model_; 156 scoped_ptr<LanguageComboboxModel> target_language_combobox_model_; 157 158 views::Combobox* source_language_combobox_; 159 views::Combobox* target_language_combobox_; 160 views::Checkbox* always_translate_checkbox_; 161 162 scoped_ptr<TranslateBubbleModel> model_; 163 164 // Whether the window is an incognito window. 165 bool is_in_incognito_window_; 166 167 // The browser to open the help URL into a new tab. 168 Browser* browser_; 169 170 // Whether the translation is acutually executed. 171 bool translate_executed_; 172 173 DISALLOW_COPY_AND_ASSIGN(TranslateBubbleView); 174}; 175 176#endif // CHROME_BROWSER_UI_VIEWS_TRANSLATE_TRANSLATE_BUBBLE_VIEW_H_ 177