Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(602)

Side by Side Diff: chrome/browser/ui/views/translate/translate_bubble_view.cc

Issue 1923143003: Implement the 2016Q2 Translate UI designe spec out in (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: change to use MenuButton with MenuRunner for 'Options' menu in new UI based on msw review request. Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 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 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 #include "chrome/browser/ui/views/translate/translate_bubble_view.h" 5 #include "chrome/browser/ui/views/translate/translate_bubble_view.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <algorithm> 8 #include <algorithm>
9 #include <string> 9 #include <string>
10 #include <utility> 10 #include <utility>
11 #include <vector> 11 #include <vector>
12 12
13 #include "base/i18n/string_compare.h" 13 #include "base/i18n/string_compare.h"
14 #include "base/memory/singleton.h" 14 #include "base/memory/singleton.h"
15 #include "base/metrics/histogram.h" 15 #include "base/metrics/histogram.h"
16 #include "base/strings/utf_string_conversions.h" 16 #include "base/strings/utf_string_conversions.h"
17 #include "chrome/browser/browser_process.h" 17 #include "chrome/browser/browser_process.h"
18 #include "chrome/browser/profiles/profile.h" 18 #include "chrome/browser/profiles/profile.h"
19 #include "chrome/browser/translate/chrome_translate_client.h" 19 #include "chrome/browser/translate/chrome_translate_client.h"
20 #include "chrome/browser/translate/translate_service.h" 20 #include "chrome/browser/translate/translate_service.h"
21 #include "chrome/browser/ui/chrome_pages.h" 21 #include "chrome/browser/ui/chrome_pages.h"
22 #include "chrome/browser/ui/translate/translate_bubble_model_impl.h" 22 #include "chrome/browser/ui/translate/translate_bubble_model_impl.h"
23 #include "chrome/browser/ui/translate/translate_bubble_view_state_transition.h"
23 #include "chrome/common/url_constants.h" 24 #include "chrome/common/url_constants.h"
24 #include "chrome/grit/generated_resources.h" 25 #include "chrome/grit/generated_resources.h"
25 #include "components/prefs/pref_service.h" 26 #include "components/prefs/pref_service.h"
26 #include "components/translate/core/browser/translate_download_manager.h" 27 #include "components/translate/core/browser/translate_download_manager.h"
27 #include "components/translate/core/browser/translate_manager.h" 28 #include "components/translate/core/browser/translate_manager.h"
29 #include "components/translate/core/browser/translate_prefs.h"
28 #include "components/translate/core/browser/translate_ui_delegate.h" 30 #include "components/translate/core/browser/translate_ui_delegate.h"
29 #include "content/public/browser/web_contents.h" 31 #include "content/public/browser/web_contents.h"
30 #include "grit/components_strings.h" 32 #include "grit/components_strings.h"
33 #include "grit/ui_resources.h"
31 #include "ui/base/l10n/l10n_util.h" 34 #include "ui/base/l10n/l10n_util.h"
32 #include "ui/base/models/combobox_model.h" 35 #include "ui/base/models/combobox_model.h"
33 #include "ui/base/models/simple_combobox_model.h" 36 #include "ui/base/models/simple_combobox_model.h"
37 #include "ui/base/models/simple_menu_model.h"
msw 2016/05/03 18:16:41 nit: not needed, included by header.
ftang 2016/05/03 20:34:50 Done.
38 #include "ui/base/resource/resource_bundle.h"
39 #include "ui/views/bubble/bubble_frame_view.h"
40 #include "ui/views/controls/button/blue_button.h"
34 #include "ui/views/controls/button/checkbox.h" 41 #include "ui/views/controls/button/checkbox.h"
35 #include "ui/views/controls/button/label_button.h" 42 #include "ui/views/controls/button/label_button.h"
43 #include "ui/views/controls/button/menu_button.h"
36 #include "ui/views/controls/combobox/combobox.h" 44 #include "ui/views/controls/combobox/combobox.h"
37 #include "ui/views/controls/label.h" 45 #include "ui/views/controls/label.h"
38 #include "ui/views/controls/link.h" 46 #include "ui/views/controls/link.h"
47 #include "ui/views/controls/styled_label.h"
39 #include "ui/views/layout/box_layout.h" 48 #include "ui/views/layout/box_layout.h"
40 #include "ui/views/layout/grid_layout.h" 49 #include "ui/views/layout/grid_layout.h"
41 #include "ui/views/layout/layout_constants.h" 50 #include "ui/views/layout/layout_constants.h"
42 #include "ui/views/widget/widget.h" 51 #include "ui/views/widget/widget.h"
43 52
44 namespace { 53 namespace {
45 54
55 const char kTranslateBubbleUIEvent[] = "Translate.BubbleUiEvent";
56
57 views::LabelButton* CreateBlueButton(views::ButtonListener* listener,
58 const base::string16& label,
59 int id) {
60 views::LabelButton* button = new views::BlueButton(listener, label);
61 button->set_id(id);
62 return button;
63 }
64
46 views::LabelButton* CreateLabelButton(views::ButtonListener* listener, 65 views::LabelButton* CreateLabelButton(views::ButtonListener* listener,
47 const base::string16& label, 66 const base::string16& label,
48 int id) { 67 int id) {
49 views::LabelButton* button = new views::LabelButton(listener, label); 68 views::LabelButton* button = new views::LabelButton(listener, label);
50 button->set_id(id); 69 button->set_id(id);
51 button->SetStyle(views::Button::STYLE_BUTTON); 70 button->SetStyle(views::Button::STYLE_BUTTON);
52 return button; 71 return button;
53 } 72 }
54 73
55 views::Link* CreateLink(views::LinkListener* listener, 74 views::Link* CreateLink(views::LinkListener* listener,
75 const base::string16& text,
76 int id) {
77 views::Link* link = new views::Link(text);
78 link->set_listener(listener);
79 link->set_id(id);
80 return link;
81 }
82
83 views::Link* CreateLink(views::LinkListener* listener,
56 int resource_id, 84 int resource_id,
57 int id) { 85 int id) {
58 views::Link* link = new views::Link( 86 return CreateLink(listener, l10n_util::GetStringUTF16(resource_id), id);
59 l10n_util::GetStringUTF16(resource_id)); 87 }
60 link->set_listener(listener); 88
61 link->set_id(id); 89 void AddIconToLayout(views::GridLayout* layout) {
62 return link; 90 views::ImageView* icon = new views::ImageView();
91 ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance();
92 icon->SetImage(bundle.GetImageNamed(IDR_TRANSLATE_ICON_BUBBLE).ToImageSkia());
93 layout->AddView(icon);
63 } 94 }
64 95
65 } // namespace 96 } // namespace
66 97
67 // static 98 // static
68 TranslateBubbleView* TranslateBubbleView::translate_bubble_view_ = NULL; 99 TranslateBubbleView* TranslateBubbleView::translate_bubble_view_ = NULL;
69 100
70 TranslateBubbleView::~TranslateBubbleView() { 101 TranslateBubbleView::~TranslateBubbleView() {
71 // A child view could refer to a model which is owned by this class when 102 // A child view could refer to a model which is owned by this class when
72 // the child view is destructed. For example, |source_language_combobx_model_| 103 // the child view is destructed. For example, |source_language_combobx_model_|
73 // is referred by Combobox's destructor. Before destroying the models, 104 // is referred by Combobox's destructor. Before destroying the models,
74 // removing the child views is needed. 105 // removing the child views is needed.
75 RemoveAllChildViews(true); 106 RemoveAllChildViews(true);
76 } 107 }
77 108
78 // static 109 // static
79 views::Widget* TranslateBubbleView::ShowBubble( 110 views::Widget* TranslateBubbleView::ShowBubble(
80 views::View* anchor_view, 111 views::View* anchor_view,
81 content::WebContents* web_contents, 112 content::WebContents* web_contents,
82 translate::TranslateStep step, 113 translate::TranslateStep step,
83 translate::TranslateErrors::Type error_type, 114 translate::TranslateErrors::Type error_type,
84 DisplayReason reason) { 115 DisplayReason reason) {
85 if (translate_bubble_view_) { 116 if (translate_bubble_view_) {
86 // When the user reads the advanced setting panel, the bubble should not be 117 // When the user reads the advanced setting panel, the bubble should not be
87 // changed because they are focusing on the bubble. 118 // changed because they are focusing on the bubble.
88 if (translate_bubble_view_->web_contents() == web_contents && 119 if (translate_bubble_view_->web_contents() == web_contents &&
89 translate_bubble_view_->model()->GetViewState() == 120 translate_bubble_view_->model()->GetViewState() ==
90 TranslateBubbleModel::VIEW_STATE_ADVANCED) { 121 TranslateBubbleModel::VIEW_STATE_ADVANCED) {
91 return nullptr; 122 return nullptr;
92 } 123 }
93 if (step != translate::TRANSLATE_STEP_TRANSLATE_ERROR) { 124 if (step != translate::TRANSLATE_STEP_TRANSLATE_ERROR) {
94 TranslateBubbleModel::ViewState state = 125 TranslateBubbleModel::ViewState state =
95 TranslateBubbleModelImpl::TranslateStepToViewState(step); 126 TranslateBubbleModelImpl::TranslateStepToViewState(step);
96 translate_bubble_view_->SwitchView(state); 127 translate_bubble_view_->SwitchView(state);
97 } else { 128 } else {
98 translate_bubble_view_->SwitchToErrorView(error_type); 129 translate_bubble_view_->SwitchToErrorView(error_type);
99 } 130 }
100 return nullptr; 131 return nullptr;
101 } else { 132 } else {
102 if (step == translate::TRANSLATE_STEP_AFTER_TRANSLATE && 133 if (step == translate::TRANSLATE_STEP_AFTER_TRANSLATE &&
103 reason == AUTOMATIC) { 134 reason == AUTOMATIC) {
104 return nullptr; 135 return nullptr;
105 } 136 }
106 } 137 }
107 138
108 std::string source_language; 139 std::string source_language;
109 std::string target_language; 140 std::string target_language;
110 ChromeTranslateClient::GetTranslateLanguages( 141 ChromeTranslateClient::GetTranslateLanguages(web_contents, &source_language,
111 web_contents, &source_language, &target_language); 142 &target_language);
112 143
113 std::unique_ptr<translate::TranslateUIDelegate> ui_delegate( 144 std::unique_ptr<translate::TranslateUIDelegate> ui_delegate(
114 new translate::TranslateUIDelegate( 145 new translate::TranslateUIDelegate(
115 ChromeTranslateClient::GetManagerFromWebContents(web_contents) 146 ChromeTranslateClient::GetManagerFromWebContents(web_contents)
116 ->GetWeakPtr(), 147 ->GetWeakPtr(),
117 source_language, target_language)); 148 source_language, target_language));
118 std::unique_ptr<TranslateBubbleModel> model( 149 std::unique_ptr<TranslateBubbleModel> model(
119 new TranslateBubbleModelImpl(step, std::move(ui_delegate))); 150 new TranslateBubbleModelImpl(step, std::move(ui_delegate)));
120 TranslateBubbleView* view = new TranslateBubbleView( 151 TranslateBubbleView* view = new TranslateBubbleView(
121 anchor_view, std::move(model), error_type, web_contents); 152 anchor_view, std::move(model), error_type, web_contents);
122 views::Widget* bubble_widget = 153 views::Widget* bubble_widget =
123 views::BubbleDialogDelegateView::CreateBubble(view); 154 views::BubbleDialogDelegateView::CreateBubble(view);
124 view->ShowForReason(reason); 155 view->ShowForReason(reason);
125 return bubble_widget; 156 return bubble_widget;
126 } 157 }
127 158
128 // static 159 // static
129 void TranslateBubbleView::CloseCurrentBubble() { 160 void TranslateBubbleView::CloseCurrentBubble() {
130 if (translate_bubble_view_) 161 if (translate_bubble_view_)
131 translate_bubble_view_->CloseBubble(); 162 translate_bubble_view_->CloseBubble();
132 } 163 }
133 164
134 // static 165 // static
135 TranslateBubbleView* TranslateBubbleView::GetCurrentBubble() { 166 TranslateBubbleView* TranslateBubbleView::GetCurrentBubble() {
136 return translate_bubble_view_; 167 return translate_bubble_view_;
137 } 168 }
138 169
139 void TranslateBubbleView::Init() { 170 void TranslateBubbleView::Init() {
140 SetLayoutManager(new views::BoxLayout(views::BoxLayout::kVertical, 171 SetLayoutManager(new views::BoxLayout(views::BoxLayout::kVertical, 0, 0, 0));
141 0, 0, 0));
142 172
143 before_translate_view_ = CreateViewBeforeTranslate(); 173 before_translate_view_ = CreateViewBeforeTranslate();
144 translating_view_ = CreateViewTranslating(); 174 translating_view_ = CreateViewTranslating();
145 after_translate_view_ = CreateViewAfterTranslate(); 175 after_translate_view_ = CreateViewAfterTranslate();
146 error_view_ = CreateViewError(); 176 error_view_ = CreateViewError();
147 advanced_view_ = CreateViewAdvanced(); 177 advanced_view_ = CreateViewAdvanced();
148 178
149 AddChildView(before_translate_view_); 179 AddChildView(before_translate_view_);
150 AddChildView(translating_view_); 180 AddChildView(translating_view_);
151 AddChildView(after_translate_view_); 181 AddChildView(after_translate_view_);
152 AddChildView(error_view_); 182 AddChildView(error_view_);
153 AddChildView(advanced_view_); 183 AddChildView(advanced_view_);
154 184
155 AddAccelerator(ui::Accelerator(ui::VKEY_RETURN, ui::EF_NONE)); 185 AddAccelerator(ui::Accelerator(ui::VKEY_RETURN, ui::EF_NONE));
156 186
157 UpdateChildVisibilities(); 187 UpdateChildVisibilities();
158 188
159 if (model_->GetViewState() == TranslateBubbleModel::VIEW_STATE_ERROR) 189 if (model_->GetViewState() == TranslateBubbleModel::VIEW_STATE_ERROR)
160 model_->ShowError(error_type_); 190 model_->ShowError(error_type_);
161 } 191 }
162 192
163 void TranslateBubbleView::ButtonPressed(views::Button* sender, 193 void TranslateBubbleView::ButtonPressed(views::Button* sender,
164 const ui::Event& event) { 194 const ui::Event& event) {
165 HandleButtonPressed(static_cast<ButtonID>(sender->id())); 195 HandleButtonPressed(static_cast<ButtonID>(sender->id()));
166 } 196 }
167 197
198 bool TranslateBubbleView::ShouldShowCloseButton() const {
199 return use_2016_q2_ui_;
200 }
201
168 void TranslateBubbleView::WindowClosing() { 202 void TranslateBubbleView::WindowClosing() {
169 // The operations for |model_| are valid only when a WebContents is alive. 203 // The operations for |model_| are valid only when a WebContents is alive.
170 // TODO(hajimehoshi): TranslateBubbleViewModel(Impl) should not hold a 204 // TODO(hajimehoshi): TranslateBubbleViewModel(Impl) should not hold a
171 // WebContents as a member variable because the WebContents might be destroyed 205 // WebContents as a member variable because the WebContents might be destroyed
172 // while the TranslateBubbleViewModel(Impl) is still alive. Instead, 206 // while the TranslateBubbleViewModel(Impl) is still alive. Instead,
173 // TranslateBubbleViewModel should take a reference of a WebContents at each 207 // TranslateBubbleViewModel should take a reference of a WebContents at each
174 // method. (crbug/320497) 208 // method. (crbug/320497)
175 if (web_contents()) 209 if (web_contents())
176 model_->OnBubbleClosing(); 210 model_->OnBubbleClosing();
177 211
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
225 } 259 }
226 260
227 void TranslateBubbleView::OnPerformAction(views::Combobox* combobox) { 261 void TranslateBubbleView::OnPerformAction(views::Combobox* combobox) {
228 HandleComboboxPerformAction(static_cast<ComboboxID>(combobox->id())); 262 HandleComboboxPerformAction(static_cast<ComboboxID>(combobox->id()));
229 } 263 }
230 264
231 void TranslateBubbleView::LinkClicked(views::Link* source, int event_flags) { 265 void TranslateBubbleView::LinkClicked(views::Link* source, int event_flags) {
232 HandleLinkClicked(static_cast<LinkID>(source->id())); 266 HandleLinkClicked(static_cast<LinkID>(source->id()));
233 } 267 }
234 268
269 void TranslateBubbleView::OnMenuButtonClicked(views::MenuButton* source,
270 const gfx::Point& point,
271 const ui::Event* event) {
272 if (!denial_menu_runner_) {
273 base::string16 original_language_name =
274 model_->GetLanguageNameAt(model_->GetOriginalLanguageIndex());
275 denial_menu_model_.reset(new ui::SimpleMenuModel(this));
276 denial_menu_model_->AddItem(
277 DenialMenuItem::NEVER_TRANSLATE_LANGUAGE,
278 l10n_util::GetStringFUTF16(IDS_TRANSLATE_BUBBLE_NEVER_TRANSLATE_LANG,
279 original_language_name));
280
281 denial_menu_model_->AddSeparator(ui::NORMAL_SEPARATOR);
282
283 denial_menu_model_->AddItemWithStringId(
284 DenialMenuItem::NEVER_TRANSLATE_SITE,
285 IDS_TRANSLATE_BUBBLE_NEVER_TRANSLATE_SITE);
286
287 denial_menu_runner_.reset(
288 new views::MenuRunner(denial_menu_model_.get(), 0));
289 }
290 gfx::Rect screen_bounds = source->GetBoundsInScreen();
291 screen_bounds.Inset(source->GetInsets());
292 if (denial_menu_runner_->RunMenuAt(source->GetWidget(), source, screen_bounds,
293 views::MENU_ANCHOR_TOPRIGHT,
294 ui::MENU_SOURCE_MOUSE) ==
295 views::MenuRunner::MENU_DELETED)
296 return;
297 denial_menu_runner_.reset();
msw 2016/05/03 18:16:41 Why reset the runner here? Isn't it okay to re-use
ftang 2016/05/03 20:34:50 Done.
298 }
299
300 bool TranslateBubbleView::IsCommandIdChecked(int command_id) const {
301 return false;
302 }
303
304 bool TranslateBubbleView::IsCommandIdEnabled(int command_id) const {
305 return true;
306 }
307
308 bool TranslateBubbleView::GetAcceleratorForCommandId(
309 int command_id,
310 ui::Accelerator* accelerator) {
311 return false;
312 }
313
314 void TranslateBubbleView::ExecuteCommand(int command_id, int event_flags) {
315 model_->DeclineTranslation();
316 switch (command_id) {
317 case DenialMenuItem::NEVER_TRANSLATE_LANGUAGE:
318 model_->SetNeverTranslateLanguage(true);
319 ReportUiAction(translate::NEVER_TRANSLATE_LANGUAGE_MENU_CLICKED);
320 break;
321 case DenialMenuItem::NEVER_TRANSLATE_SITE:
322 model_->SetNeverTranslateSite(true);
323 ReportUiAction(translate::NEVER_TRANSLATE_SITE_MENU_CLICKED);
324 break;
325 default:
326 NOTREACHED();
327 }
328 GetWidget()->Close();
329 }
330
331 void TranslateBubbleView::StyledLabelLinkClicked(views::StyledLabel* label,
332 const gfx::Range& range,
333 int event_flags) {
334 SwitchView(TranslateBubbleModel::VIEW_STATE_ADVANCED);
335 ReportUiAction(translate::ADVANCED_LINK_CLICKED);
336 }
337
235 void TranslateBubbleView::WebContentsDestroyed() { 338 void TranslateBubbleView::WebContentsDestroyed() {
236 GetWidget()->CloseNow(); 339 GetWidget()->CloseNow();
237 } 340 }
238 341
342 void TranslateBubbleView::OnWidgetClosing(views::Widget* widget) {
343 if (GetBubbleFrameView()->close_button_clicked()) {
344 model_->DeclineTranslation();
345 ReportUiAction(translate::CLOSE_BUTTON_CLICKED);
346 }
347 }
348
239 TranslateBubbleModel::ViewState TranslateBubbleView::GetViewState() const { 349 TranslateBubbleModel::ViewState TranslateBubbleView::GetViewState() const {
240 return model_->GetViewState(); 350 return model_->GetViewState();
241 } 351 }
242 352
243 TranslateBubbleView::TranslateBubbleView( 353 TranslateBubbleView::TranslateBubbleView(
244 views::View* anchor_view, 354 views::View* anchor_view,
245 std::unique_ptr<TranslateBubbleModel> model, 355 std::unique_ptr<TranslateBubbleModel> model,
246 translate::TranslateErrors::Type error_type, 356 translate::TranslateErrors::Type error_type,
247 content::WebContents* web_contents) 357 content::WebContents* web_contents)
248 : LocationBarBubbleDelegateView(anchor_view, web_contents), 358 : LocationBarBubbleDelegateView(anchor_view, web_contents),
249 WebContentsObserver(web_contents), 359 WebContentsObserver(web_contents),
250 before_translate_view_(NULL), 360 before_translate_view_(NULL),
251 translating_view_(NULL), 361 translating_view_(NULL),
252 after_translate_view_(NULL), 362 after_translate_view_(NULL),
253 error_view_(NULL), 363 error_view_(NULL),
254 advanced_view_(NULL), 364 advanced_view_(NULL),
255 denial_combobox_(NULL), 365 denial_combobox_(NULL),
256 source_language_combobox_(NULL), 366 source_language_combobox_(NULL),
257 target_language_combobox_(NULL), 367 target_language_combobox_(NULL),
258 always_translate_checkbox_(NULL), 368 always_translate_checkbox_(NULL),
259 advanced_cancel_button_(NULL), 369 advanced_cancel_button_(NULL),
260 advanced_done_button_(NULL), 370 advanced_done_button_(NULL),
261 model_(std::move(model)), 371 model_(std::move(model)),
262 error_type_(error_type), 372 error_type_(error_type),
263 is_in_incognito_window_( 373 is_in_incognito_window_(
264 web_contents && web_contents->GetBrowserContext()->IsOffTheRecord()) { 374 web_contents && web_contents->GetBrowserContext()->IsOffTheRecord()),
375 use_2016_q2_ui_(
376 base::FeatureList::IsEnabled(translate::kTranslateUI2016Q2)) {
265 translate_bubble_view_ = this; 377 translate_bubble_view_ = this;
266 } 378 }
267 379
268 views::View* TranslateBubbleView::GetCurrentView() const { 380 views::View* TranslateBubbleView::GetCurrentView() const {
269 switch (model_->GetViewState()) { 381 switch (model_->GetViewState()) {
270 case TranslateBubbleModel::VIEW_STATE_BEFORE_TRANSLATE: 382 case TranslateBubbleModel::VIEW_STATE_BEFORE_TRANSLATE:
271 return before_translate_view_; 383 return before_translate_view_;
272 case TranslateBubbleModel::VIEW_STATE_TRANSLATING: 384 case TranslateBubbleModel::VIEW_STATE_TRANSLATING:
273 return translating_view_; 385 return translating_view_;
274 case TranslateBubbleModel::VIEW_STATE_AFTER_TRANSLATE: 386 case TranslateBubbleModel::VIEW_STATE_AFTER_TRANSLATE:
275 return after_translate_view_; 387 return after_translate_view_;
276 case TranslateBubbleModel::VIEW_STATE_ERROR: 388 case TranslateBubbleModel::VIEW_STATE_ERROR:
277 return error_view_; 389 return error_view_;
278 case TranslateBubbleModel::VIEW_STATE_ADVANCED: 390 case TranslateBubbleModel::VIEW_STATE_ADVANCED:
279 return advanced_view_; 391 return advanced_view_;
280 } 392 }
281 NOTREACHED(); 393 NOTREACHED();
282 return NULL; 394 return NULL;
283 } 395 }
284 396
285 void TranslateBubbleView::HandleButtonPressed( 397 void TranslateBubbleView::HandleButtonPressed(
286 TranslateBubbleView::ButtonID sender_id) { 398 TranslateBubbleView::ButtonID sender_id) {
287 switch (sender_id) { 399 switch (sender_id) {
288 case BUTTON_ID_TRANSLATE: { 400 case BUTTON_ID_TRANSLATE: {
289 model_->Translate(); 401 model_->Translate();
402 ReportUiAction(translate::TRANSLATE_BUTTON_CLICKED);
290 break; 403 break;
291 } 404 }
292 case BUTTON_ID_DONE: { 405 case BUTTON_ID_DONE: {
293 if (always_translate_checkbox_) 406 if (always_translate_checkbox_)
294 model_->SetAlwaysTranslate(always_translate_checkbox_->checked()); 407 model_->SetAlwaysTranslate(always_translate_checkbox_->checked());
295 if (model_->IsPageTranslatedInCurrentLanguages()) { 408 if (model_->IsPageTranslatedInCurrentLanguages()) {
296 model_->GoBackFromAdvanced(); 409 model_->GoBackFromAdvanced();
297 UpdateChildVisibilities(); 410 UpdateChildVisibilities();
298 SizeToContents(); 411 SizeToContents();
299 } else { 412 } else {
300 model_->Translate(); 413 model_->Translate();
301 SwitchView(TranslateBubbleModel::VIEW_STATE_TRANSLATING); 414 SwitchView(TranslateBubbleModel::VIEW_STATE_TRANSLATING);
302 } 415 }
416 ReportUiAction(translate::DONE_BUTTON_CLICKED);
303 break; 417 break;
304 } 418 }
305 case BUTTON_ID_CANCEL: { 419 case BUTTON_ID_CANCEL: {
306 model_->GoBackFromAdvanced(); 420 model_->GoBackFromAdvanced();
307 UpdateChildVisibilities(); 421 UpdateChildVisibilities();
308 SizeToContents(); 422 SizeToContents();
423 ReportUiAction(translate::CANCEL_BUTTON_CLICKED);
309 break; 424 break;
310 } 425 }
311 case BUTTON_ID_TRY_AGAIN: { 426 case BUTTON_ID_TRY_AGAIN: {
312 model_->Translate(); 427 model_->Translate();
428 ReportUiAction(translate::TRY_AGAIN_BUTTON_CLICKED);
313 break; 429 break;
314 } 430 }
315 case BUTTON_ID_SHOW_ORIGINAL: { 431 case BUTTON_ID_SHOW_ORIGINAL: {
316 model_->RevertTranslation(); 432 model_->RevertTranslation();
317 GetWidget()->Close(); 433 GetWidget()->Close();
434 ReportUiAction(translate::SHOW_ORIGINAL_BUTTON_CLICKED);
318 break; 435 break;
319 } 436 }
320 case BUTTON_ID_ALWAYS_TRANSLATE: { 437 case BUTTON_ID_ALWAYS_TRANSLATE: {
321 // Do nothing. The state of the checkbox affects only when the 'Done' 438 // Do nothing. The state of the checkbox affects only when the 'Done'
322 // button is pressed. 439 // button is pressed.
440 ReportUiAction((always_translate_checkbox_->checked()
441 ? translate::ALWAYS_TRANSLATE_CHECKED
442 : translate::ALWAYS_TRANSLATE_UNCHECKED));
323 break; 443 break;
324 } 444 }
325 } 445 }
326 } 446 }
327 447
328 void TranslateBubbleView::HandleLinkClicked( 448 void TranslateBubbleView::HandleLinkClicked(
329 TranslateBubbleView::LinkID sender_id) { 449 TranslateBubbleView::LinkID sender_id) {
330 switch (sender_id) { 450 switch (sender_id) {
331 case LINK_ID_ADVANCED: { 451 case LINK_ID_ADVANCED: {
332 SwitchView(TranslateBubbleModel::VIEW_STATE_ADVANCED); 452 SwitchView(TranslateBubbleModel::VIEW_STATE_ADVANCED);
453 ReportUiAction(translate::ADVANCED_LINK_CLICKED);
333 break; 454 break;
334 } 455 }
335 case LINK_ID_LANGUAGE_SETTINGS: { 456 case LINK_ID_LANGUAGE_SETTINGS: {
336 GURL url = chrome::GetSettingsUrl(chrome::kLanguageOptionsSubPage); 457 GURL url = chrome::GetSettingsUrl(chrome::kLanguageOptionsSubPage);
337 web_contents()->OpenURL(content::OpenURLParams( 458 web_contents()->OpenURL(
338 url, 459 content::OpenURLParams(url, content::Referrer(), NEW_FOREGROUND_TAB,
339 content::Referrer(), 460 ui::PAGE_TRANSITION_LINK, false));
340 NEW_FOREGROUND_TAB, 461 ReportUiAction(translate::SETTINGS_LINK_CLICKED);
341 ui::PAGE_TRANSITION_LINK,
342 false));
343 break; 462 break;
344 } 463 }
345 } 464 }
346 } 465 }
347 466
348 void TranslateBubbleView::HandleComboboxPerformAction( 467 void TranslateBubbleView::HandleComboboxPerformAction(
349 TranslateBubbleView::ComboboxID sender_id) { 468 TranslateBubbleView::ComboboxID sender_id) {
350 switch (sender_id) { 469 switch (sender_id) {
351 case COMBOBOX_ID_DENIAL: { 470 case COMBOBOX_ID_DENIAL: {
352 model_->DeclineTranslation();
353 DenialComboboxIndex index = 471 DenialComboboxIndex index =
354 static_cast<DenialComboboxIndex>(denial_combobox_->selected_index()); 472 static_cast<DenialComboboxIndex>(denial_combobox_->selected_index());
473 model_->DeclineTranslation();
355 switch (index) { 474 switch (index) {
356 case DenialComboboxIndex::DONT_TRANSLATE: 475 case DenialComboboxIndex::DONT_TRANSLATE:
476 ReportUiAction(translate::NOPE_MENU_CLICKED);
357 break; 477 break;
358 case DenialComboboxIndex::NEVER_TRANSLATE_LANGUAGE: 478 case DenialComboboxIndex::NEVER_TRANSLATE_LANGUAGE:
359 model_->SetNeverTranslateLanguage(true); 479 model_->SetNeverTranslateLanguage(true);
480 ReportUiAction(translate::NEVER_TRANSLATE_LANGUAGE_MENU_CLICKED);
360 break; 481 break;
361 case DenialComboboxIndex::NEVER_TRANSLATE_SITE: 482 case DenialComboboxIndex::NEVER_TRANSLATE_SITE:
362 model_->SetNeverTranslateSite(true); 483 model_->SetNeverTranslateSite(true);
484 ReportUiAction(translate::NEVER_TRANSLATE_SITE_MENU_CLICKED);
363 break; 485 break;
364 default: 486 default:
365 NOTREACHED(); 487 NOTREACHED();
366 break; 488 break;
367 } 489 }
368 GetWidget()->Close(); 490 GetWidget()->Close();
369 break; 491 break;
370 } 492 }
371 case COMBOBOX_ID_SOURCE_LANGUAGE: { 493 case COMBOBOX_ID_SOURCE_LANGUAGE: {
372 if (model_->GetOriginalLanguageIndex() == 494 if (model_->GetOriginalLanguageIndex() ==
373 source_language_combobox_->selected_index()) { 495 source_language_combobox_->selected_index()) {
374 break; 496 break;
375 } 497 }
376 model_->UpdateOriginalLanguageIndex( 498 model_->UpdateOriginalLanguageIndex(
377 source_language_combobox_->selected_index()); 499 source_language_combobox_->selected_index());
378 UpdateAdvancedView(); 500 UpdateAdvancedView();
501 ReportUiAction(translate::SOURCE_LANGUAGE_MENU_CLICKED);
379 break; 502 break;
380 } 503 }
381 case COMBOBOX_ID_TARGET_LANGUAGE: { 504 case COMBOBOX_ID_TARGET_LANGUAGE: {
382 if (model_->GetTargetLanguageIndex() == 505 if (model_->GetTargetLanguageIndex() ==
383 target_language_combobox_->selected_index()) { 506 target_language_combobox_->selected_index()) {
384 break; 507 break;
385 } 508 }
386 model_->UpdateTargetLanguageIndex( 509 model_->UpdateTargetLanguageIndex(
387 target_language_combobox_->selected_index()); 510 target_language_combobox_->selected_index());
388 UpdateAdvancedView(); 511 UpdateAdvancedView();
512 ReportUiAction(translate::TARGET_LANGUAGE_MENU_CLICKED);
389 break; 513 break;
390 } 514 }
391 } 515 }
392 } 516 }
393 517
394 void TranslateBubbleView::UpdateChildVisibilities() { 518 void TranslateBubbleView::UpdateChildVisibilities() {
395 for (int i = 0; i < child_count(); i++) { 519 for (int i = 0; i < child_count(); i++) {
396 views::View* view = child_at(i); 520 views::View* view = child_at(i);
397 view->SetVisible(view == GetCurrentView()); 521 view->SetVisible(view == GetCurrentView());
398 } 522 }
399 } 523 }
400 524
401 views::View* TranslateBubbleView::CreateViewBeforeTranslate() { 525 views::View* TranslateBubbleView::CreateViewBeforeTranslate() {
402 views::Label* message_label = new views::Label( 526 const int kQuestionWidth = 200;
403 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_BEFORE_TRANSLATE));
404
405 base::string16 original_language_name = 527 base::string16 original_language_name =
406 model_->GetLanguageNameAt(model_->GetOriginalLanguageIndex()); 528 model_->GetLanguageNameAt(model_->GetOriginalLanguageIndex());
407 529
408 std::vector<base::string16> items(
409 static_cast<size_t>(DenialComboboxIndex::MENU_SIZE));
410 items[static_cast<size_t>(DenialComboboxIndex::DONT_TRANSLATE)] =
411 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_DENY);
412 items[static_cast<size_t>(DenialComboboxIndex::NEVER_TRANSLATE_LANGUAGE)] =
413 l10n_util::GetStringFUTF16(IDS_TRANSLATE_BUBBLE_NEVER_TRANSLATE_LANG,
414 original_language_name);
415 items[static_cast<size_t>(DenialComboboxIndex::NEVER_TRANSLATE_SITE)] =
416 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_NEVER_TRANSLATE_SITE);
417
418 denial_combobox_model_.reset(new ui::SimpleComboboxModel(items));
419 denial_combobox_ = new views::Combobox(denial_combobox_model_.get());
420 denial_combobox_->set_id(COMBOBOX_ID_DENIAL);
421 denial_combobox_->set_listener(this);
422 denial_combobox_->SetStyle(views::Combobox::STYLE_ACTION);
423
424 views::View* view = new views::View(); 530 views::View* view = new views::View();
425 views::GridLayout* layout = new views::GridLayout(view); 531 views::GridLayout* layout = new views::GridLayout(view);
426 view->SetLayoutManager(layout); 532 view->SetLayoutManager(layout);
427 533
428 using views::GridLayout; 534 using views::GridLayout;
429 535
430 enum { 536 enum {
431 COLUMN_SET_ID_MESSAGE, 537 COLUMN_SET_ID_MESSAGE,
432 COLUMN_SET_ID_CONTENT, 538 COLUMN_SET_ID_CONTENT,
433 }; 539 };
434 540
435 views::ColumnSet* cs = layout->AddColumnSet(COLUMN_SET_ID_MESSAGE); 541 views::ColumnSet* cs = layout->AddColumnSet(COLUMN_SET_ID_MESSAGE);
436 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 542 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0,
437 0, GridLayout::USE_PREF, 0, 0); 543 GridLayout::USE_PREF, 0, 0);
438 cs->AddPaddingColumn(0, views::kRelatedButtonHSpacing); 544 cs->AddPaddingColumn(0, views::kRelatedButtonHSpacing);
439 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 545 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0,
440 0, GridLayout::USE_PREF, 0, 0); 546 GridLayout::USE_PREF, 0, 0);
441 cs->AddPaddingColumn(1, 0); 547 cs->AddPaddingColumn(1, 0);
442 548
443 cs = layout->AddColumnSet(COLUMN_SET_ID_CONTENT); 549 cs = layout->AddColumnSet(COLUMN_SET_ID_CONTENT);
444 cs->AddPaddingColumn(1, 0); 550 cs->AddPaddingColumn(1, 0);
445 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 551 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0,
446 0, GridLayout::USE_PREF, 0, 0); 552 GridLayout::USE_PREF, 0, 0);
447 cs->AddPaddingColumn(0, views::kRelatedButtonHSpacing); 553 cs->AddPaddingColumn(0, views::kRelatedButtonHSpacing);
448 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 554 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0,
449 0, GridLayout::USE_PREF, 0, 0); 555 GridLayout::USE_PREF, 0, 0);
450 556
451 layout->StartRow(0, COLUMN_SET_ID_MESSAGE); 557 layout->StartRow(0, COLUMN_SET_ID_MESSAGE);
452 layout->AddView(message_label); 558 if (use_2016_q2_ui_) {
453 layout->AddView(CreateLink(this, 559 AddIconToLayout(layout);
454 IDS_TRANSLATE_BUBBLE_ADVANCED,
455 LINK_ID_ADVANCED));
456 560
561 base::string16 target_language_name =
562 model_->GetLanguageNameAt(model_->GetTargetLanguageIndex());
563 std::vector<size_t> offsets;
564 auto styled_label = new views::StyledLabel(
565 l10n_util::GetStringFUTF16(IDS_TRANSLATE_BUBBLE_BEFORE_TRANSLATE_NEW,
566 original_language_name, target_language_name,
567 &offsets),
568 this);
569 auto style_info = views::StyledLabel::RangeStyleInfo::CreateForLink();
570 styled_label->AddStyleRange(
571 gfx::Range(static_cast<uint32_t>(offsets[0]),
572 static_cast<uint32_t>(offsets[0] +
573 original_language_name.length())),
574 style_info);
575 styled_label->AddStyleRange(
576 gfx::Range(
577 static_cast<uint32_t>(offsets[1]),
578 static_cast<uint32_t>(offsets[1] + target_language_name.length())),
579 style_info);
580 styled_label->SizeToFit(kQuestionWidth);
581 layout->AddView(styled_label);
582 } else {
583 layout->AddView(new views::Label(
584 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_BEFORE_TRANSLATE)));
585 layout->AddView(
586 CreateLink(this, IDS_TRANSLATE_BUBBLE_ADVANCED, LINK_ID_ADVANCED));
587 }
588
589 // In an incognito window, the "Always translate" checkbox shouldn't be shown.
590 if (use_2016_q2_ui_ && !is_in_incognito_window_) {
591 layout->StartRow(0, COLUMN_SET_ID_MESSAGE);
592 layout->SkipColumns(1);
593 always_translate_checkbox_ = new views::Checkbox(
594 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_ALWAYS));
595 always_translate_checkbox_->SetChecked(
596 model_->ShouldAlwaysTranslateBeCheckedByDefault());
597 always_translate_checkbox_->set_id(BUTTON_ID_ALWAYS_TRANSLATE);
598 always_translate_checkbox_->set_listener(this);
599 layout->AddView(always_translate_checkbox_);
600 }
457 layout->AddPaddingRow(0, views::kUnrelatedControlVerticalSpacing); 601 layout->AddPaddingRow(0, views::kUnrelatedControlVerticalSpacing);
458 602
459 layout->StartRow(0, COLUMN_SET_ID_CONTENT); 603 layout->StartRow(0, COLUMN_SET_ID_CONTENT);
460 views::LabelButton* accept_button = CreateLabelButton( 604 views::LabelButton* accept_button =
461 this, 605 use_2016_q2_ui_
462 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_ACCEPT), 606 ? CreateBlueButton(
463 BUTTON_ID_TRANSLATE); 607 this, l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_ACCEPT),
608 BUTTON_ID_TRANSLATE)
609 : CreateLabelButton(
610 this, l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_ACCEPT),
611 BUTTON_ID_TRANSLATE);
464 layout->AddView(accept_button); 612 layout->AddView(accept_button);
465 accept_button->SetIsDefault(true); 613 accept_button->SetIsDefault(true);
466 layout->AddView(denial_combobox_); 614 if (use_2016_q2_ui_) {
615 auto menu_button = new views::MenuButton(
616 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_OPTIONS_MENU_BUTTON),
617 this, true);
618 menu_button->SetStyle(views::Button::STYLE_BUTTON);
619 layout->AddView(menu_button);
620 } else {
621 std::vector<base::string16> items(
622 static_cast<size_t>(DenialComboboxIndex::MENU_SIZE));
623 items[static_cast<size_t>(DenialComboboxIndex::DONT_TRANSLATE)] =
624 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_DENY);
625 items[static_cast<size_t>(DenialComboboxIndex::NEVER_TRANSLATE_LANGUAGE)] =
626 l10n_util::GetStringFUTF16(IDS_TRANSLATE_BUBBLE_NEVER_TRANSLATE_LANG,
627 original_language_name);
628 items[static_cast<size_t>(DenialComboboxIndex::NEVER_TRANSLATE_SITE)] =
629 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_NEVER_TRANSLATE_SITE);
630 denial_combobox_model_.reset(new ui::SimpleComboboxModel(items));
631 denial_combobox_ = new views::Combobox(denial_combobox_model_.get());
632 denial_combobox_->set_id(COMBOBOX_ID_DENIAL);
633 denial_combobox_->set_listener(this);
634 denial_combobox_->SetStyle(views::Combobox::STYLE_ACTION);
635 layout->AddView(denial_combobox_);
636 }
467 637
468 return view; 638 return view;
469 } 639 }
470 640
471 views::View* TranslateBubbleView::CreateViewTranslating() { 641 views::View* TranslateBubbleView::CreateViewTranslating() {
472 base::string16 target_language_name = 642 base::string16 target_language_name =
473 model_->GetLanguageNameAt(model_->GetTargetLanguageIndex()); 643 model_->GetLanguageNameAt(model_->GetTargetLanguageIndex());
474 views::Label* label = new views::Label( 644 views::Label* label = new views::Label(
475 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_TRANSLATING)); 645 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_TRANSLATING));
476 646
477 views::View* view = new views::View(); 647 views::View* view = new views::View();
478 views::GridLayout* layout = new views::GridLayout(view); 648 views::GridLayout* layout = new views::GridLayout(view);
479 view->SetLayoutManager(layout); 649 view->SetLayoutManager(layout);
480 650
481 using views::GridLayout; 651 using views::GridLayout;
482 652
483 enum { 653 enum {
484 COLUMN_SET_ID_MESSAGE, 654 COLUMN_SET_ID_MESSAGE,
485 COLUMN_SET_ID_CONTENT, 655 COLUMN_SET_ID_CONTENT,
486 }; 656 };
487 657
488 views::ColumnSet* cs = layout->AddColumnSet(COLUMN_SET_ID_MESSAGE); 658 views::ColumnSet* cs = layout->AddColumnSet(COLUMN_SET_ID_MESSAGE);
489 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 659 if (use_2016_q2_ui_) {
490 0, views::GridLayout::USE_PREF, 0, 0); 660 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0,
661 views::GridLayout::USE_PREF, 0, 0);
662 cs->AddPaddingColumn(0, views::kRelatedButtonHSpacing);
663 }
664 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0,
665 GridLayout::USE_PREF, 0, 0);
491 cs->AddPaddingColumn(1, 0); 666 cs->AddPaddingColumn(1, 0);
492 667
493 cs = layout->AddColumnSet(COLUMN_SET_ID_CONTENT); 668 cs = layout->AddColumnSet(COLUMN_SET_ID_CONTENT);
494 cs->AddPaddingColumn(1, 0); 669 cs->AddPaddingColumn(1, 0);
495 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 670 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0,
496 0, GridLayout::USE_PREF, 0, 0); 671 GridLayout::USE_PREF, 0, 0);
497 672
498 layout->StartRow(0, COLUMN_SET_ID_MESSAGE); 673 layout->StartRow(0, COLUMN_SET_ID_MESSAGE);
674 if (use_2016_q2_ui_)
675 AddIconToLayout(layout);
499 layout->AddView(label); 676 layout->AddView(label);
500 677
501 layout->AddPaddingRow(0, views::kUnrelatedControlVerticalSpacing); 678 layout->AddPaddingRow(0, views::kUnrelatedControlVerticalSpacing);
502 679
503 layout->StartRow(0, COLUMN_SET_ID_CONTENT); 680 layout->StartRow(0, COLUMN_SET_ID_CONTENT);
504 views::LabelButton* revert_button = CreateLabelButton( 681 views::LabelButton* revert_button = CreateLabelButton(
505 this, 682 this, l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_REVERT),
506 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_REVERT),
507 BUTTON_ID_SHOW_ORIGINAL); 683 BUTTON_ID_SHOW_ORIGINAL);
508 revert_button->SetEnabled(false); 684 revert_button->SetEnabled(false);
509 layout->AddView(revert_button); 685 layout->AddView(revert_button);
510 686
511 return view; 687 return view;
512 } 688 }
513 689
514 views::View* TranslateBubbleView::CreateViewAfterTranslate() { 690 views::View* TranslateBubbleView::CreateViewAfterTranslate() {
515 views::Label* label = new views::Label( 691 views::Label* label = new views::Label(
516 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_TRANSLATED)); 692 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_TRANSLATED));
517 693
518 views::View* view = new views::View(); 694 views::View* view = new views::View();
519 views::GridLayout* layout = new views::GridLayout(view); 695 views::GridLayout* layout = new views::GridLayout(view);
520 view->SetLayoutManager(layout); 696 view->SetLayoutManager(layout);
521 697
522 using views::GridLayout; 698 using views::GridLayout;
523 699
524 enum { 700 enum {
525 COLUMN_SET_ID_MESSAGE, 701 COLUMN_SET_ID_MESSAGE,
526 COLUMN_SET_ID_CONTENT, 702 COLUMN_SET_ID_CONTENT,
527 }; 703 };
528 704
529 views::ColumnSet* cs = layout->AddColumnSet(COLUMN_SET_ID_MESSAGE); 705 views::ColumnSet* cs = layout->AddColumnSet(COLUMN_SET_ID_MESSAGE);
530 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 706 if (use_2016_q2_ui_) {
531 0, views::GridLayout::USE_PREF, 0, 0); 707 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0,
708 GridLayout::USE_PREF, 0, 0);
709 cs->AddPaddingColumn(0, views::kRelatedButtonHSpacing);
710 }
711 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0,
712 GridLayout::USE_PREF, 0, 0);
532 cs->AddPaddingColumn(0, views::kRelatedButtonHSpacing); 713 cs->AddPaddingColumn(0, views::kRelatedButtonHSpacing);
533 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 714 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0,
534 0, views::GridLayout::USE_PREF, 0, 0); 715 GridLayout::USE_PREF, 0, 0);
535 cs->AddPaddingColumn(1, 0); 716 cs->AddPaddingColumn(1, 0);
536 717
537 cs = layout->AddColumnSet(COLUMN_SET_ID_CONTENT); 718 cs = layout->AddColumnSet(COLUMN_SET_ID_CONTENT);
538 cs->AddPaddingColumn(1, 0); 719 cs->AddPaddingColumn(1, 0);
539 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 720 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0,
540 0, GridLayout::USE_PREF, 0, 0); 721 GridLayout::USE_PREF, 0, 0);
541 722
542 layout->StartRow(0, COLUMN_SET_ID_MESSAGE); 723 layout->StartRow(0, COLUMN_SET_ID_MESSAGE);
724 if (use_2016_q2_ui_)
725 AddIconToLayout(layout);
543 layout->AddView(label); 726 layout->AddView(label);
544 layout->AddView(CreateLink(this, 727 layout->AddView(
545 IDS_TRANSLATE_BUBBLE_ADVANCED, 728 CreateLink(this, IDS_TRANSLATE_BUBBLE_ADVANCED, LINK_ID_ADVANCED));
546 LINK_ID_ADVANCED));
547 729
548 layout->AddPaddingRow(0, views::kUnrelatedControlVerticalSpacing); 730 layout->AddPaddingRow(0, views::kUnrelatedControlVerticalSpacing);
549 731
550 layout->StartRow(0, COLUMN_SET_ID_CONTENT); 732 layout->StartRow(0, COLUMN_SET_ID_CONTENT);
551 layout->AddView(CreateLabelButton( 733 layout->AddView(CreateLabelButton(
552 this, 734 this, l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_REVERT),
553 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_REVERT),
554 BUTTON_ID_SHOW_ORIGINAL)); 735 BUTTON_ID_SHOW_ORIGINAL));
555 736
556 return view; 737 return view;
557 } 738 }
558 739
559 views::View* TranslateBubbleView::CreateViewError() { 740 views::View* TranslateBubbleView::CreateViewError() {
560 views::Label* label = new views::Label( 741 views::Label* label = new views::Label(
561 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_COULD_NOT_TRANSLATE)); 742 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_COULD_NOT_TRANSLATE));
562 743
563 views::View* view = new views::View(); 744 views::View* view = new views::View();
564 views::GridLayout* layout = new views::GridLayout(view); 745 views::GridLayout* layout = new views::GridLayout(view);
565 view->SetLayoutManager(layout); 746 view->SetLayoutManager(layout);
566 747
567 using views::GridLayout; 748 using views::GridLayout;
568 749
569 enum { 750 enum {
570 COLUMN_SET_ID_MESSAGE, 751 COLUMN_SET_ID_MESSAGE,
571 COLUMN_SET_ID_CONTENT, 752 COLUMN_SET_ID_CONTENT,
572 }; 753 };
573 754
574 views::ColumnSet* cs = layout->AddColumnSet(COLUMN_SET_ID_MESSAGE); 755 views::ColumnSet* cs = layout->AddColumnSet(COLUMN_SET_ID_MESSAGE);
575 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 756 if (use_2016_q2_ui_) {
576 0, GridLayout::USE_PREF, 0, 0); 757 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0,
758 GridLayout::USE_PREF, 0, 0);
759 cs->AddPaddingColumn(0, views::kRelatedButtonHSpacing);
760 }
761 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0,
762 GridLayout::USE_PREF, 0, 0);
577 cs->AddPaddingColumn(0, views::kRelatedButtonHSpacing); 763 cs->AddPaddingColumn(0, views::kRelatedButtonHSpacing);
578 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 764 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0,
579 0, GridLayout::USE_PREF, 0, 0); 765 GridLayout::USE_PREF, 0, 0);
580 cs->AddPaddingColumn(1, 0); 766 cs->AddPaddingColumn(1, 0);
581 767
582 cs = layout->AddColumnSet(COLUMN_SET_ID_CONTENT); 768 cs = layout->AddColumnSet(COLUMN_SET_ID_CONTENT);
583 cs->AddPaddingColumn(1, 0); 769 cs->AddPaddingColumn(1, 0);
584 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 770 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0,
585 0, GridLayout::USE_PREF, 0, 0); 771 GridLayout::USE_PREF, 0, 0);
586 772
587 layout->StartRow(0, COLUMN_SET_ID_MESSAGE); 773 layout->StartRow(0, COLUMN_SET_ID_MESSAGE);
774 if (use_2016_q2_ui_)
775 AddIconToLayout(layout);
588 layout->AddView(label); 776 layout->AddView(label);
589 layout->AddView(CreateLink(this, 777 layout->AddView(
590 IDS_TRANSLATE_BUBBLE_ADVANCED, 778 CreateLink(this, IDS_TRANSLATE_BUBBLE_ADVANCED, LINK_ID_ADVANCED));
591 LINK_ID_ADVANCED));
592 779
593 layout->AddPaddingRow(0, views::kUnrelatedControlVerticalSpacing); 780 layout->AddPaddingRow(0, views::kUnrelatedControlVerticalSpacing);
594 781
595 layout->StartRow(0, COLUMN_SET_ID_CONTENT); 782 layout->StartRow(0, COLUMN_SET_ID_CONTENT);
596 layout->AddView(CreateLabelButton( 783 layout->AddView(CreateLabelButton(
597 this, 784 this, l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_TRY_AGAIN),
598 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_TRY_AGAIN),
599 BUTTON_ID_TRY_AGAIN)); 785 BUTTON_ID_TRY_AGAIN));
600 786
601 return view; 787 return view;
602 } 788 }
603 789
604 // TODO(hajimehoshi): Revice this later to show a specific message for each 790 // TODO(hajimehoshi): Revice this later to show a specific message for each
605 // error. (crbug/307350) 791 // error. (crbug/307350)
606 views::View* TranslateBubbleView::CreateViewAdvanced() { 792 views::View* TranslateBubbleView::CreateViewAdvanced() {
607 views::Label* source_language_label = new views::Label( 793 views::Label* source_language_label = new views::Label(
608 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_PAGE_LANGUAGE)); 794 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_PAGE_LANGUAGE));
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
640 view->SetLayoutManager(layout); 826 view->SetLayoutManager(layout);
641 827
642 using views::GridLayout; 828 using views::GridLayout;
643 829
644 enum { 830 enum {
645 COLUMN_SET_ID_LANGUAGES, 831 COLUMN_SET_ID_LANGUAGES,
646 COLUMN_SET_ID_BUTTONS, 832 COLUMN_SET_ID_BUTTONS,
647 }; 833 };
648 834
649 views::ColumnSet* cs = layout->AddColumnSet(COLUMN_SET_ID_LANGUAGES); 835 views::ColumnSet* cs = layout->AddColumnSet(COLUMN_SET_ID_LANGUAGES);
650 cs->AddColumn(GridLayout::TRAILING, GridLayout::CENTER, 836 cs->AddColumn(GridLayout::TRAILING, GridLayout::CENTER, 0,
651 0, GridLayout::USE_PREF, 0, 0); 837 GridLayout::USE_PREF, 0, 0);
652 cs->AddPaddingColumn(0, views::kRelatedControlHorizontalSpacing); 838 cs->AddPaddingColumn(0, views::kRelatedControlHorizontalSpacing);
653 cs->AddColumn(GridLayout::FILL, GridLayout::CENTER, 839 cs->AddColumn(GridLayout::FILL, GridLayout::CENTER, 0, GridLayout::USE_PREF,
654 0, GridLayout::USE_PREF, 0, 0); 840 0, 0);
655 cs->AddPaddingColumn(1, 0); 841 cs->AddPaddingColumn(1, 0);
656 842
657 cs = layout->AddColumnSet(COLUMN_SET_ID_BUTTONS); 843 cs = layout->AddColumnSet(COLUMN_SET_ID_BUTTONS);
658 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 844 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0,
659 0, GridLayout::USE_PREF, 0, 0); 845 GridLayout::USE_PREF, 0, 0);
660 cs->AddPaddingColumn(1, views::kUnrelatedControlHorizontalSpacing); 846 cs->AddPaddingColumn(1, views::kUnrelatedControlHorizontalSpacing);
661 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 847 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0,
662 0, GridLayout::USE_PREF, 0, 0); 848 GridLayout::USE_PREF, 0, 0);
663 cs->AddPaddingColumn(0, views::kRelatedButtonHSpacing); 849 cs->AddPaddingColumn(0, views::kRelatedButtonHSpacing);
664 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 850 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0,
665 0, GridLayout::USE_PREF, 0, 0); 851 GridLayout::USE_PREF, 0, 0);
666 852
667 layout->StartRow(0, COLUMN_SET_ID_LANGUAGES); 853 layout->StartRow(0, COLUMN_SET_ID_LANGUAGES);
668 layout->AddView(source_language_label); 854 layout->AddView(source_language_label);
669 layout->AddView(source_language_combobox_); 855 layout->AddView(source_language_combobox_);
670 856
671 layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing); 857 layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing);
672 858
673 layout->StartRow(0, COLUMN_SET_ID_LANGUAGES); 859 layout->StartRow(0, COLUMN_SET_ID_LANGUAGES);
674 layout->AddView(target_language_label); 860 layout->AddView(target_language_label);
675 layout->AddView(target_language_combobox_); 861 layout->AddView(target_language_combobox_);
676 862
677 if (!is_in_incognito_window_) { 863 if (!is_in_incognito_window_) {
678 layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing); 864 layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing);
679 layout->StartRow(0, COLUMN_SET_ID_LANGUAGES); 865 layout->StartRow(0, COLUMN_SET_ID_LANGUAGES);
680 layout->SkipColumns(1); 866 layout->SkipColumns(1);
681 layout->AddView(always_translate_checkbox_); 867 layout->AddView(always_translate_checkbox_);
682 } 868 }
683 869
684 layout->AddPaddingRow(0, views::kUnrelatedControlVerticalSpacing); 870 layout->AddPaddingRow(0, views::kUnrelatedControlVerticalSpacing);
685 871
686 layout->StartRow(0, COLUMN_SET_ID_BUTTONS); 872 layout->StartRow(0, COLUMN_SET_ID_BUTTONS);
687 layout->AddView(CreateLink(this, 873 layout->AddView(CreateLink(this, IDS_TRANSLATE_BUBBLE_LANGUAGE_SETTINGS,
688 IDS_TRANSLATE_BUBBLE_LANGUAGE_SETTINGS,
689 LINK_ID_LANGUAGE_SETTINGS)); 874 LINK_ID_LANGUAGE_SETTINGS));
690 advanced_done_button_ = CreateLabelButton( 875 advanced_done_button_ =
691 this, l10n_util::GetStringUTF16(IDS_DONE), BUTTON_ID_DONE); 876 use_2016_q2_ui_
877 ? CreateBlueButton(this, l10n_util::GetStringUTF16(IDS_DONE),
878 BUTTON_ID_DONE)
879 : CreateLabelButton(this, l10n_util::GetStringUTF16(IDS_DONE),
880 BUTTON_ID_DONE);
692 advanced_done_button_->SetIsDefault(true); 881 advanced_done_button_->SetIsDefault(true);
693 advanced_cancel_button_ = CreateLabelButton( 882 advanced_cancel_button_ = CreateLabelButton(
694 this, l10n_util::GetStringUTF16(IDS_CANCEL), BUTTON_ID_CANCEL); 883 this, l10n_util::GetStringUTF16(IDS_CANCEL), BUTTON_ID_CANCEL);
695 layout->AddView(advanced_done_button_); 884 layout->AddView(advanced_done_button_);
696 layout->AddView(advanced_cancel_button_); 885 layout->AddView(advanced_cancel_button_);
697 886
698 UpdateAdvancedView(); 887 UpdateAdvancedView();
699 888
700 return view; 889 return view;
701 } 890 }
(...skipping 25 matching lines...) Expand all
727 base::string16 source_language_name = 916 base::string16 source_language_name =
728 model_->GetLanguageNameAt(model_->GetOriginalLanguageIndex()); 917 model_->GetLanguageNameAt(model_->GetOriginalLanguageIndex());
729 base::string16 target_language_name = 918 base::string16 target_language_name =
730 model_->GetLanguageNameAt(model_->GetTargetLanguageIndex()); 919 model_->GetLanguageNameAt(model_->GetTargetLanguageIndex());
731 920
732 // "Always translate" checkbox doesn't exist in an incognito window. 921 // "Always translate" checkbox doesn't exist in an incognito window.
733 if (always_translate_checkbox_) { 922 if (always_translate_checkbox_) {
734 always_translate_checkbox_->SetText( 923 always_translate_checkbox_->SetText(
735 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_ALWAYS)); 924 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_ALWAYS));
736 always_translate_checkbox_->SetChecked( 925 always_translate_checkbox_->SetChecked(
737 model_->ShouldAlwaysTranslate()); 926 use_2016_q2_ui_ ? model_->ShouldAlwaysTranslateBeCheckedByDefault()
927 : model_->ShouldAlwaysTranslate());
738 } 928 }
739 929
740 base::string16 label; 930 base::string16 label;
741 if (model_->IsPageTranslatedInCurrentLanguages()) 931 if (model_->IsPageTranslatedInCurrentLanguages())
742 label = l10n_util::GetStringUTF16(IDS_DONE); 932 label = l10n_util::GetStringUTF16(IDS_DONE);
743 else 933 else
744 label = l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_ACCEPT); 934 label = l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_ACCEPT);
745 advanced_done_button_->SetText(label); 935 advanced_done_button_->SetText(label);
746 advanced_done_button_->SizeToPreferredSize(); 936 advanced_done_button_->SizeToPreferredSize();
747 if (advanced_view_) 937 if (advanced_view_)
748 advanced_view_->Layout(); 938 advanced_view_->Layout();
749 } 939 }
940
941 void TranslateBubbleView::ReportUiAction(int action) {
942 UMA_HISTOGRAM_ENUMERATION(kTranslateBubbleUIEvent, action,
943 translate::TRANSLATE_BUBBLE_UI_EVENT_MAX);
944 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698