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

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: fix test breakage 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/common/url_constants.h" 23 #include "chrome/common/url_constants.h"
24 #include "chrome/grit/generated_resources.h" 24 #include "chrome/grit/generated_resources.h"
25 #include "components/prefs/pref_service.h" 25 #include "components/prefs/pref_service.h"
26 #include "components/translate/core/browser/translate_download_manager.h" 26 #include "components/translate/core/browser/translate_download_manager.h"
27 #include "components/translate/core/browser/translate_manager.h" 27 #include "components/translate/core/browser/translate_manager.h"
28 #include "components/translate/core/browser/translate_prefs.h"
28 #include "components/translate/core/browser/translate_ui_delegate.h" 29 #include "components/translate/core/browser/translate_ui_delegate.h"
29 #include "content/public/browser/web_contents.h" 30 #include "content/public/browser/web_contents.h"
30 #include "grit/components_strings.h" 31 #include "grit/components_strings.h"
32 #include "grit/ui_resources.h"
31 #include "ui/base/l10n/l10n_util.h" 33 #include "ui/base/l10n/l10n_util.h"
32 #include "ui/base/models/combobox_model.h" 34 #include "ui/base/models/combobox_model.h"
33 #include "ui/base/models/simple_combobox_model.h" 35 #include "ui/base/models/simple_combobox_model.h"
36 #include "ui/base/resource/resource_bundle.h"
37 #include "ui/views/bubble/bubble_frame_view.h"
38 #include "ui/views/controls/button/blue_button.h"
34 #include "ui/views/controls/button/checkbox.h" 39 #include "ui/views/controls/button/checkbox.h"
35 #include "ui/views/controls/button/label_button.h" 40 #include "ui/views/controls/button/label_button.h"
36 #include "ui/views/controls/combobox/combobox.h" 41 #include "ui/views/controls/combobox/combobox.h"
37 #include "ui/views/controls/label.h" 42 #include "ui/views/controls/label.h"
38 #include "ui/views/controls/link.h" 43 #include "ui/views/controls/link.h"
44 #include "ui/views/controls/styled_label.h"
39 #include "ui/views/layout/box_layout.h" 45 #include "ui/views/layout/box_layout.h"
40 #include "ui/views/layout/grid_layout.h" 46 #include "ui/views/layout/grid_layout.h"
41 #include "ui/views/layout/layout_constants.h" 47 #include "ui/views/layout/layout_constants.h"
42 #include "ui/views/widget/widget.h" 48 #include "ui/views/widget/widget.h"
43 49
44 namespace { 50 namespace {
45 51
52 const int kQuestionWidth = 200;
53 const char kTranslateUIAction[] = "Translate.UIAction";
54 enum UIActionType {
groby-ooo-7-16 2016/04/27 19:08:24 Please use TranslateBubbleUiEvent and expand that.
ftang 2016/04/27 21:43:15 ok.
55 UI_ACTION_ADVANCED_LINK_CLICKED,
56 UI_ACTION_ALWAYS_TRANSLATE_CHECKED,
57 UI_ACTION_ALWAYS_TRANSLATE_UNCHECKED,
58 UI_ACTION_NOPE_MENU_CLICKED,
59 UI_ACTION_NEVER_TRANSLATE_LANGUAGE_MENU_CLICKED,
60 UI_ACTION_NEVER_TRANSLATE_SITE_MENU_CLICKED,
61 UI_ACTION_TRANSLATE_BUTTON_CLICKED,
62 UI_ACTION_DONE_BUTTON_CLICKED,
63 UI_ACTION_CANCEL_BUTTON_CLICKED,
64 UI_ACTION_TRY_AGAIN_BUTTON_CLICKED,
65 UI_ACTION_SHOW_ORIGINAL_BUTTON_CLICKED,
66 UI_ACTION_SETTING_LINK_CLICKED,
67 UI_ACTION_SOURCE_LANGUAGE_MENU_CLICKED,
68 UI_ACTION_TARGET_LANGUAGE_MENU_CLICKED,
69
70 // Insert new items here.
71 UI_ACTION_MAX,
72 };
73
74 views::LabelButton* CreateBlueButton(views::ButtonListener* listener,
75 const base::string16& label,
76 int id) {
77 views::LabelButton* button = new views::BlueButton(listener, label);
78 button->set_id(id);
79 return button;
80 }
81
46 views::LabelButton* CreateLabelButton(views::ButtonListener* listener, 82 views::LabelButton* CreateLabelButton(views::ButtonListener* listener,
47 const base::string16& label, 83 const base::string16& label,
48 int id) { 84 int id) {
49 views::LabelButton* button = new views::LabelButton(listener, label); 85 views::LabelButton* button = new views::LabelButton(listener, label);
50 button->set_id(id); 86 button->set_id(id);
51 button->SetStyle(views::Button::STYLE_BUTTON); 87 button->SetStyle(views::Button::STYLE_BUTTON);
52 return button; 88 return button;
53 } 89 }
54 90
55 views::Link* CreateLink(views::LinkListener* listener, 91 views::Link* CreateLink(views::LinkListener* listener,
56 int resource_id, 92 base::string16 text,
57 int id) { 93 int id) {
58 views::Link* link = new views::Link( 94 views::Link* link = new views::Link(text);
59 l10n_util::GetStringUTF16(resource_id));
60 link->set_listener(listener); 95 link->set_listener(listener);
61 link->set_id(id); 96 link->set_id(id);
62 return link; 97 return link;
63 } 98 }
99 views::Link* CreateLink(views::LinkListener* listener,
100 int resource_id,
101 int id) {
102 return CreateLink(listener,
103 l10n_util::GetStringUTF16(resource_id),
104 id);
105 }
64 106
65 } // namespace 107 } // namespace
66 108
67 // static 109 // static
68 TranslateBubbleView* TranslateBubbleView::translate_bubble_view_ = NULL; 110 TranslateBubbleView* TranslateBubbleView::translate_bubble_view_ = NULL;
69 111
70 TranslateBubbleView::~TranslateBubbleView() { 112 TranslateBubbleView::~TranslateBubbleView() {
71 // A child view could refer to a model which is owned by this class when 113 // 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_| 114 // the child view is destructed. For example, |source_language_combobx_model_|
73 // is referred by Combobox's destructor. Before destroying the models, 115 // is referred by Combobox's destructor. Before destroying the models,
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
153 AddChildView(advanced_view_); 195 AddChildView(advanced_view_);
154 196
155 AddAccelerator(ui::Accelerator(ui::VKEY_RETURN, ui::EF_NONE)); 197 AddAccelerator(ui::Accelerator(ui::VKEY_RETURN, ui::EF_NONE));
156 198
157 UpdateChildVisibilities(); 199 UpdateChildVisibilities();
158 200
159 if (model_->GetViewState() == TranslateBubbleModel::VIEW_STATE_ERROR) 201 if (model_->GetViewState() == TranslateBubbleModel::VIEW_STATE_ERROR)
160 model_->ShowError(error_type_); 202 model_->ShowError(error_type_);
161 } 203 }
162 204
205 bool TranslateBubbleView::ShouldShowCloseButton() const {
206 return use_2016_q2_ui_;
207 }
208
groby-ooo-7-16 2016/04/27 19:08:24 I don't understand why you chose to encapsulate th
ftang 2016/04/27 21:43:15 Done.
163 void TranslateBubbleView::ButtonPressed(views::Button* sender, 209 void TranslateBubbleView::ButtonPressed(views::Button* sender,
164 const ui::Event& event) { 210 const ui::Event& event) {
165 HandleButtonPressed(static_cast<ButtonID>(sender->id())); 211 HandleButtonPressed(static_cast<ButtonID>(sender->id()));
166 } 212 }
167 213
168 void TranslateBubbleView::WindowClosing() { 214 void TranslateBubbleView::WindowClosing() {
215 if (GetBubbleFrameView()->close_button_clicked()) {
216 model_->DeclineTranslation();
groby-ooo-7-16 2016/04/27 19:08:25 This is invoked when the widget is closed for _any
ftang 2016/04/27 21:43:15 Notice this is wrap inside "if (GetBubbleFrameView
groby-ooo-7-16 2016/04/29 05:26:14 I suppose so. I'd rather call DeclineTranslation i
217 }
169 // The operations for |model_| are valid only when a WebContents is alive. 218 // The operations for |model_| are valid only when a WebContents is alive.
170 // TODO(hajimehoshi): TranslateBubbleViewModel(Impl) should not hold a 219 // TODO(hajimehoshi): TranslateBubbleViewModel(Impl) should not hold a
171 // WebContents as a member variable because the WebContents might be destroyed 220 // WebContents as a member variable because the WebContents might be destroyed
172 // while the TranslateBubbleViewModel(Impl) is still alive. Instead, 221 // while the TranslateBubbleViewModel(Impl) is still alive. Instead,
173 // TranslateBubbleViewModel should take a reference of a WebContents at each 222 // TranslateBubbleViewModel should take a reference of a WebContents at each
174 // method. (crbug/320497) 223 // method. (crbug/320497)
175 if (web_contents()) 224 if (web_contents())
176 model_->OnBubbleClosing(); 225 model_->OnBubbleClosing();
177 226
178 // We have to reset |translate_bubble_view_| here, not in our destructor, 227 // We have to reset |translate_bubble_view_| here, not in our destructor,
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
225 } 274 }
226 275
227 void TranslateBubbleView::OnPerformAction(views::Combobox* combobox) { 276 void TranslateBubbleView::OnPerformAction(views::Combobox* combobox) {
228 HandleComboboxPerformAction(static_cast<ComboboxID>(combobox->id())); 277 HandleComboboxPerformAction(static_cast<ComboboxID>(combobox->id()));
229 } 278 }
230 279
231 void TranslateBubbleView::LinkClicked(views::Link* source, int event_flags) { 280 void TranslateBubbleView::LinkClicked(views::Link* source, int event_flags) {
232 HandleLinkClicked(static_cast<LinkID>(source->id())); 281 HandleLinkClicked(static_cast<LinkID>(source->id()));
233 } 282 }
234 283
284 void TranslateBubbleView::StyledLabelLinkClicked(views::StyledLabel* label,
285 const gfx::Range& range,
286 int event_flags) {
287 SwitchView(TranslateBubbleModel::VIEW_STATE_ADVANCED);
288 UMA_HISTOGRAM_ENUMERATION(kTranslateUIAction,
289 UI_ACTION_ADVANCED_LINK_CLICKED,
290 UI_ACTION_MAX);
291 }
292
235 void TranslateBubbleView::WebContentsDestroyed() { 293 void TranslateBubbleView::WebContentsDestroyed() {
236 GetWidget()->CloseNow(); 294 GetWidget()->CloseNow();
237 } 295 }
238 296
239 TranslateBubbleModel::ViewState TranslateBubbleView::GetViewState() const { 297 TranslateBubbleModel::ViewState TranslateBubbleView::GetViewState() const {
240 return model_->GetViewState(); 298 return model_->GetViewState();
241 } 299 }
242 300
243 TranslateBubbleView::TranslateBubbleView( 301 TranslateBubbleView::TranslateBubbleView(
244 views::View* anchor_view, 302 views::View* anchor_view,
245 std::unique_ptr<TranslateBubbleModel> model, 303 std::unique_ptr<TranslateBubbleModel> model,
246 translate::TranslateErrors::Type error_type, 304 translate::TranslateErrors::Type error_type,
247 content::WebContents* web_contents) 305 content::WebContents* web_contents)
248 : LocationBarBubbleDelegateView(anchor_view, web_contents), 306 : LocationBarBubbleDelegateView(anchor_view, web_contents),
249 WebContentsObserver(web_contents), 307 WebContentsObserver(web_contents),
250 before_translate_view_(NULL), 308 before_translate_view_(NULL),
251 translating_view_(NULL), 309 translating_view_(NULL),
252 after_translate_view_(NULL), 310 after_translate_view_(NULL),
253 error_view_(NULL), 311 error_view_(NULL),
254 advanced_view_(NULL), 312 advanced_view_(NULL),
255 denial_combobox_(NULL), 313 denial_combobox_(NULL),
256 source_language_combobox_(NULL), 314 source_language_combobox_(NULL),
257 target_language_combobox_(NULL), 315 target_language_combobox_(NULL),
258 always_translate_checkbox_(NULL), 316 always_translate_checkbox_(NULL),
259 advanced_cancel_button_(NULL), 317 advanced_cancel_button_(NULL),
260 advanced_done_button_(NULL), 318 advanced_done_button_(NULL),
261 model_(std::move(model)), 319 model_(std::move(model)),
262 error_type_(error_type), 320 error_type_(error_type),
263 is_in_incognito_window_( 321 is_in_incognito_window_(
264 web_contents && web_contents->GetBrowserContext()->IsOffTheRecord()) { 322 web_contents && web_contents->GetBrowserContext()->IsOffTheRecord()),
323 use_2016_q2_ui_(base::FeatureList::IsEnabled(
324 translate::kTranslateUI2016Q2)),
325 show_icon_(use_2016_q2_ui_),
326 show_always_checkbox_(use_2016_q2_ui_),
327 use_blue_button_(use_2016_q2_ui_) {
265 translate_bubble_view_ = this; 328 translate_bubble_view_ = this;
266 } 329 }
267 330
268 views::View* TranslateBubbleView::GetCurrentView() const { 331 views::View* TranslateBubbleView::GetCurrentView() const {
269 switch (model_->GetViewState()) { 332 switch (model_->GetViewState()) {
270 case TranslateBubbleModel::VIEW_STATE_BEFORE_TRANSLATE: 333 case TranslateBubbleModel::VIEW_STATE_BEFORE_TRANSLATE:
271 return before_translate_view_; 334 return before_translate_view_;
272 case TranslateBubbleModel::VIEW_STATE_TRANSLATING: 335 case TranslateBubbleModel::VIEW_STATE_TRANSLATING:
273 return translating_view_; 336 return translating_view_;
274 case TranslateBubbleModel::VIEW_STATE_AFTER_TRANSLATE: 337 case TranslateBubbleModel::VIEW_STATE_AFTER_TRANSLATE:
275 return after_translate_view_; 338 return after_translate_view_;
276 case TranslateBubbleModel::VIEW_STATE_ERROR: 339 case TranslateBubbleModel::VIEW_STATE_ERROR:
277 return error_view_; 340 return error_view_;
278 case TranslateBubbleModel::VIEW_STATE_ADVANCED: 341 case TranslateBubbleModel::VIEW_STATE_ADVANCED:
279 return advanced_view_; 342 return advanced_view_;
280 } 343 }
281 NOTREACHED(); 344 NOTREACHED();
282 return NULL; 345 return NULL;
283 } 346 }
284 347
285 void TranslateBubbleView::HandleButtonPressed( 348 void TranslateBubbleView::HandleButtonPressed(
286 TranslateBubbleView::ButtonID sender_id) { 349 TranslateBubbleView::ButtonID sender_id) {
287 switch (sender_id) { 350 switch (sender_id) {
288 case BUTTON_ID_TRANSLATE: { 351 case BUTTON_ID_TRANSLATE: {
289 model_->Translate(); 352 model_->Translate();
353 UMA_HISTOGRAM_ENUMERATION(kTranslateUIAction,
groby-ooo-7-16 2016/04/27 19:08:25 I'd suggest factoring this out into a ReportUiActi
ftang 2016/04/27 21:43:15 Done.
354 UI_ACTION_TRANSLATE_BUTTON_CLICKED,
355 UI_ACTION_MAX);
290 break; 356 break;
291 } 357 }
292 case BUTTON_ID_DONE: { 358 case BUTTON_ID_DONE: {
293 if (always_translate_checkbox_) 359 if (always_translate_checkbox_)
294 model_->SetAlwaysTranslate(always_translate_checkbox_->checked()); 360 model_->SetAlwaysTranslate(always_translate_checkbox_->checked());
295 if (model_->IsPageTranslatedInCurrentLanguages()) { 361 if (model_->IsPageTranslatedInCurrentLanguages()) {
296 model_->GoBackFromAdvanced(); 362 model_->GoBackFromAdvanced();
297 UpdateChildVisibilities(); 363 UpdateChildVisibilities();
298 SizeToContents(); 364 SizeToContents();
299 } else { 365 } else {
300 model_->Translate(); 366 model_->Translate();
301 SwitchView(TranslateBubbleModel::VIEW_STATE_TRANSLATING); 367 SwitchView(TranslateBubbleModel::VIEW_STATE_TRANSLATING);
302 } 368 }
369 UMA_HISTOGRAM_ENUMERATION(kTranslateUIAction,
370 UI_ACTION_DONE_BUTTON_CLICKED,
371 UI_ACTION_MAX);
303 break; 372 break;
304 } 373 }
305 case BUTTON_ID_CANCEL: { 374 case BUTTON_ID_CANCEL: {
306 model_->GoBackFromAdvanced(); 375 model_->GoBackFromAdvanced();
307 UpdateChildVisibilities(); 376 UpdateChildVisibilities();
308 SizeToContents(); 377 SizeToContents();
378 UMA_HISTOGRAM_ENUMERATION(kTranslateUIAction,
379 UI_ACTION_CANCEL_BUTTON_CLICKED,
380 UI_ACTION_MAX);
309 break; 381 break;
310 } 382 }
311 case BUTTON_ID_TRY_AGAIN: { 383 case BUTTON_ID_TRY_AGAIN: {
312 model_->Translate(); 384 model_->Translate();
385 UMA_HISTOGRAM_ENUMERATION(kTranslateUIAction,
386 UI_ACTION_TRY_AGAIN_BUTTON_CLICKED,
387 UI_ACTION_MAX);
313 break; 388 break;
314 } 389 }
315 case BUTTON_ID_SHOW_ORIGINAL: { 390 case BUTTON_ID_SHOW_ORIGINAL: {
316 model_->RevertTranslation(); 391 model_->RevertTranslation();
317 GetWidget()->Close(); 392 GetWidget()->Close();
393 UMA_HISTOGRAM_ENUMERATION(kTranslateUIAction,
394 UI_ACTION_SHOW_ORIGINAL_BUTTON_CLICKED,
395 UI_ACTION_MAX);
318 break; 396 break;
319 } 397 }
320 case BUTTON_ID_ALWAYS_TRANSLATE: { 398 case BUTTON_ID_ALWAYS_TRANSLATE: {
321 // Do nothing. The state of the checkbox affects only when the 'Done' 399 // Do nothing. The state of the checkbox affects only when the 'Done'
322 // button is pressed. 400 // button is pressed.
401 UMA_HISTOGRAM_ENUMERATION(kTranslateUIAction,
402 (always_translate_checkbox_->checked() ?
403 UI_ACTION_ALWAYS_TRANSLATE_CHECKED :
404 UI_ACTION_ALWAYS_TRANSLATE_UNCHECKED),
405 UI_ACTION_MAX);
323 break; 406 break;
324 } 407 }
325 } 408 }
326 } 409 }
327 410
328 void TranslateBubbleView::HandleLinkClicked( 411 void TranslateBubbleView::HandleLinkClicked(
329 TranslateBubbleView::LinkID sender_id) { 412 TranslateBubbleView::LinkID sender_id) {
330 switch (sender_id) { 413 switch (sender_id) {
331 case LINK_ID_ADVANCED: { 414 case LINK_ID_ADVANCED: {
332 SwitchView(TranslateBubbleModel::VIEW_STATE_ADVANCED); 415 SwitchView(TranslateBubbleModel::VIEW_STATE_ADVANCED);
416 UMA_HISTOGRAM_ENUMERATION(kTranslateUIAction,
417 UI_ACTION_ADVANCED_LINK_CLICKED,
418 UI_ACTION_MAX);
333 break; 419 break;
334 } 420 }
335 case LINK_ID_LANGUAGE_SETTINGS: { 421 case LINK_ID_LANGUAGE_SETTINGS: {
336 GURL url = chrome::GetSettingsUrl(chrome::kLanguageOptionsSubPage); 422 GURL url = chrome::GetSettingsUrl(chrome::kLanguageOptionsSubPage);
337 web_contents()->OpenURL(content::OpenURLParams( 423 web_contents()->OpenURL(content::OpenURLParams(
338 url, 424 url,
339 content::Referrer(), 425 content::Referrer(),
340 NEW_FOREGROUND_TAB, 426 NEW_FOREGROUND_TAB,
341 ui::PAGE_TRANSITION_LINK, 427 ui::PAGE_TRANSITION_LINK,
342 false)); 428 false));
429 UMA_HISTOGRAM_ENUMERATION(kTranslateUIAction,
430 UI_ACTION_SETTING_LINK_CLICKED,
431 UI_ACTION_MAX);
343 break; 432 break;
344 } 433 }
345 } 434 }
346 } 435 }
347 436
348 void TranslateBubbleView::HandleComboboxPerformAction( 437 void TranslateBubbleView::HandleComboboxPerformAction(
349 TranslateBubbleView::ComboboxID sender_id) { 438 TranslateBubbleView::ComboboxID sender_id) {
350 switch (sender_id) { 439 switch (sender_id) {
351 case COMBOBOX_ID_DENIAL: { 440 case COMBOBOX_ID_DENIAL: {
352 model_->DeclineTranslation(); 441 DenialComboboxIndex index = static_cast<DenialComboboxIndex>(
353 DenialComboboxIndex index = 442 denial_combobox_->selected_index());
354 static_cast<DenialComboboxIndex>(denial_combobox_->selected_index());
355 switch (index) { 443 switch (index) {
356 case DenialComboboxIndex::DONT_TRANSLATE: 444 case DenialComboboxIndex::DONT_TRANSLATE:
445 if (use_2016_q2_ui_) {
446 // TODO(ftang) find someway to drop down the menu.
447 } else {
448 model_->DeclineTranslation();
groby-ooo-7-16 2016/04/27 19:08:24 Why is this common code factored out into every si
ftang 2016/04/27 21:43:15 Done.
449 GetWidget()->Close();
450 UMA_HISTOGRAM_ENUMERATION(kTranslateUIAction,
451 UI_ACTION_NOPE_MENU_CLICKED,
452 UI_ACTION_MAX);
453 }
357 break; 454 break;
358 case DenialComboboxIndex::NEVER_TRANSLATE_LANGUAGE: 455 case DenialComboboxIndex::NEVER_TRANSLATE_LANGUAGE:
456 model_->DeclineTranslation();
359 model_->SetNeverTranslateLanguage(true); 457 model_->SetNeverTranslateLanguage(true);
458 GetWidget()->Close();
459 UMA_HISTOGRAM_ENUMERATION(
460 kTranslateUIAction,
461 UI_ACTION_NEVER_TRANSLATE_LANGUAGE_MENU_CLICKED,
462 UI_ACTION_MAX);
360 break; 463 break;
361 case DenialComboboxIndex::NEVER_TRANSLATE_SITE: 464 case DenialComboboxIndex::NEVER_TRANSLATE_SITE:
465 model_->DeclineTranslation();
362 model_->SetNeverTranslateSite(true); 466 model_->SetNeverTranslateSite(true);
467 GetWidget()->Close();
468 UMA_HISTOGRAM_ENUMERATION(
469 kTranslateUIAction,
470 UI_ACTION_NEVER_TRANSLATE_SITE_MENU_CLICKED,
471 UI_ACTION_MAX);
363 break; 472 break;
364 default: 473 default:
365 NOTREACHED(); 474 NOTREACHED();
366 break; 475 break;
367 } 476 }
368 GetWidget()->Close();
369 break; 477 break;
370 } 478 }
371 case COMBOBOX_ID_SOURCE_LANGUAGE: { 479 case COMBOBOX_ID_SOURCE_LANGUAGE: {
372 if (model_->GetOriginalLanguageIndex() == 480 if (model_->GetOriginalLanguageIndex() ==
373 source_language_combobox_->selected_index()) { 481 source_language_combobox_->selected_index()) {
374 break; 482 break;
375 } 483 }
376 model_->UpdateOriginalLanguageIndex( 484 model_->UpdateOriginalLanguageIndex(
377 source_language_combobox_->selected_index()); 485 source_language_combobox_->selected_index());
378 UpdateAdvancedView(); 486 UpdateAdvancedView();
487 UMA_HISTOGRAM_ENUMERATION(kTranslateUIAction,
488 UI_ACTION_SOURCE_LANGUAGE_MENU_CLICKED,
489 UI_ACTION_MAX);
379 break; 490 break;
380 } 491 }
381 case COMBOBOX_ID_TARGET_LANGUAGE: { 492 case COMBOBOX_ID_TARGET_LANGUAGE: {
382 if (model_->GetTargetLanguageIndex() == 493 if (model_->GetTargetLanguageIndex() ==
383 target_language_combobox_->selected_index()) { 494 target_language_combobox_->selected_index()) {
384 break; 495 break;
385 } 496 }
386 model_->UpdateTargetLanguageIndex( 497 model_->UpdateTargetLanguageIndex(
387 target_language_combobox_->selected_index()); 498 target_language_combobox_->selected_index());
388 UpdateAdvancedView(); 499 UpdateAdvancedView();
500 UMA_HISTOGRAM_ENUMERATION(kTranslateUIAction,
501 UI_ACTION_TARGET_LANGUAGE_MENU_CLICKED,
502 UI_ACTION_MAX);
389 break; 503 break;
390 } 504 }
391 } 505 }
392 } 506 }
393 507
394 void TranslateBubbleView::UpdateChildVisibilities() { 508 void TranslateBubbleView::UpdateChildVisibilities() {
395 for (int i = 0; i < child_count(); i++) { 509 for (int i = 0; i < child_count(); i++) {
396 views::View* view = child_at(i); 510 views::View* view = child_at(i);
397 view->SetVisible(view == GetCurrentView()); 511 view->SetVisible(view == GetCurrentView());
398 } 512 }
399 } 513 }
400 514
401 views::View* TranslateBubbleView::CreateViewBeforeTranslate() { 515 views::View* TranslateBubbleView::CreateViewBeforeTranslate() {
516 base::string16 original_language_name =
517 model_->GetLanguageNameAt(model_->GetOriginalLanguageIndex());
518 base::string16 target_language_name =
519 model_->GetLanguageNameAt(model_->GetTargetLanguageIndex());
520
402 views::Label* message_label = new views::Label( 521 views::Label* message_label = new views::Label(
403 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_BEFORE_TRANSLATE)); 522 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_BEFORE_TRANSLATE));
404 523
405 base::string16 original_language_name = 524 std::vector<size_t> offsets;
406 model_->GetLanguageNameAt(model_->GetOriginalLanguageIndex()); 525 views::StyledLabel* styled_label = new views::StyledLabel(
526 l10n_util::GetStringFUTF16(IDS_TRANSLATE_BUBBLE_BEFORE_TRANSLATE2,
527 original_language_name,
528 target_language_name,
529 &offsets),
530 this);
531
532 auto style_info = views::StyledLabel::RangeStyleInfo::CreateForLink();
533
534 styled_label->AddStyleRange(
535 gfx::Range(static_cast<uint32_t>(offsets[0]),
groby-ooo-7-16 2016/04/27 19:08:24 Can we amend gfx::Range to take a size_t? Because
ftang 2016/04/27 21:43:15 I agree this is ugly but I think that is out of th
536 static_cast<uint32_t>(offsets[0] +
537 original_language_name.length())),
538 style_info);
539
540 styled_label->AddStyleRange(
541 gfx::Range(static_cast<uint32_t>(offsets[1]),
542 static_cast<uint32_t>(offsets[1] +
543 target_language_name.length())),
544 style_info);
545
546 styled_label->SetBounds(styled_label->x(),
547 styled_label->y(),
548 kQuestionWidth,
549 styled_label->GetHeightForWidth(kQuestionWidth));
407 550
408 std::vector<base::string16> items( 551 std::vector<base::string16> items(
409 static_cast<size_t>(DenialComboboxIndex::MENU_SIZE)); 552 static_cast<size_t>(DenialComboboxIndex::MENU_SIZE));
410 items[static_cast<size_t>(DenialComboboxIndex::DONT_TRANSLATE)] = 553 if (use_2016_q2_ui_) {
411 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_DENY); 554 items[static_cast<size_t>(DenialComboboxIndex::DONT_TRANSLATE)] =
555 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_ADVANCED);
556 } else {
557 items[static_cast<size_t>(DenialComboboxIndex::DONT_TRANSLATE)] =
558 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_DENY);
559 }
412 items[static_cast<size_t>(DenialComboboxIndex::NEVER_TRANSLATE_LANGUAGE)] = 560 items[static_cast<size_t>(DenialComboboxIndex::NEVER_TRANSLATE_LANGUAGE)] =
413 l10n_util::GetStringFUTF16(IDS_TRANSLATE_BUBBLE_NEVER_TRANSLATE_LANG, 561 l10n_util::GetStringFUTF16(IDS_TRANSLATE_BUBBLE_NEVER_TRANSLATE_LANG,
414 original_language_name); 562 original_language_name);
415 items[static_cast<size_t>(DenialComboboxIndex::NEVER_TRANSLATE_SITE)] = 563 items[static_cast<size_t>(DenialComboboxIndex::NEVER_TRANSLATE_SITE)] =
416 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_NEVER_TRANSLATE_SITE); 564 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_NEVER_TRANSLATE_SITE);
417 565
566
418 denial_combobox_model_.reset(new ui::SimpleComboboxModel(items)); 567 denial_combobox_model_.reset(new ui::SimpleComboboxModel(items));
419 denial_combobox_ = new views::Combobox(denial_combobox_model_.get()); 568 denial_combobox_ = new views::Combobox(denial_combobox_model_.get());
569
420 denial_combobox_->set_id(COMBOBOX_ID_DENIAL); 570 denial_combobox_->set_id(COMBOBOX_ID_DENIAL);
421 denial_combobox_->set_listener(this); 571 denial_combobox_->set_listener(this);
422 denial_combobox_->SetStyle(views::Combobox::STYLE_ACTION); 572 denial_combobox_->SetStyle(views::Combobox::STYLE_ACTION);
423 573
574 // In an incognito window, "Always translate" checkbox shouldn't be shown.
575 if (show_always_checkbox_ && !is_in_incognito_window_) {
576 always_translate_checkbox_ = new views::Checkbox(base::string16());
577 always_translate_checkbox_->SetChecked(model_->GetAlwaysTranslateChecked());
578 always_translate_checkbox_->set_id(BUTTON_ID_ALWAYS_TRANSLATE);
579 always_translate_checkbox_->SetText(
580 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_ALWAYS));
581 always_translate_checkbox_->set_listener(this);
582 }
583
424 views::View* view = new views::View(); 584 views::View* view = new views::View();
425 views::GridLayout* layout = new views::GridLayout(view); 585 views::GridLayout* layout = new views::GridLayout(view);
426 view->SetLayoutManager(layout); 586 view->SetLayoutManager(layout);
427 587
428 using views::GridLayout; 588 using views::GridLayout;
429 589
430 enum { 590 enum {
431 COLUMN_SET_ID_MESSAGE, 591 COLUMN_SET_ID_MESSAGE,
432 COLUMN_SET_ID_CONTENT, 592 COLUMN_SET_ID_CONTENT,
433 }; 593 };
434 594
435 views::ColumnSet* cs = layout->AddColumnSet(COLUMN_SET_ID_MESSAGE); 595 views::ColumnSet* cs = layout->AddColumnSet(COLUMN_SET_ID_MESSAGE);
436 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 596 if (show_icon_) {
437 0, GridLayout::USE_PREF, 0, 0); 597 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER,
438 cs->AddPaddingColumn(0, views::kRelatedButtonHSpacing); 598 0, GridLayout::USE_PREF, 0, 0);
599 cs->AddPaddingColumn(0, views::kRelatedButtonHSpacing);
600 }
601 if (!use_2016_q2_ui_) {
602 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER,
603 0, GridLayout::USE_PREF, 0, 0);
604 cs->AddPaddingColumn(0, views::kRelatedButtonHSpacing);
605 }
439 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 606 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER,
440 0, GridLayout::USE_PREF, 0, 0); 607 0, GridLayout::USE_PREF, 0, 0);
441 cs->AddPaddingColumn(1, 0); 608 cs->AddPaddingColumn(1, 0);
442 609
443 cs = layout->AddColumnSet(COLUMN_SET_ID_CONTENT); 610 cs = layout->AddColumnSet(COLUMN_SET_ID_CONTENT);
444 cs->AddPaddingColumn(1, 0); 611 cs->AddPaddingColumn(1, 0);
445 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 612 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER,
446 0, GridLayout::USE_PREF, 0, 0); 613 0, GridLayout::USE_PREF, 0, 0);
447 cs->AddPaddingColumn(0, views::kRelatedButtonHSpacing); 614 cs->AddPaddingColumn(0, views::kRelatedButtonHSpacing);
448 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 615 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER,
449 0, GridLayout::USE_PREF, 0, 0); 616 0, GridLayout::USE_PREF, 0, 0);
450 617
451 layout->StartRow(0, COLUMN_SET_ID_MESSAGE); 618 layout->StartRow(0, COLUMN_SET_ID_MESSAGE);
452 layout->AddView(message_label); 619 if (show_icon_) {
453 layout->AddView(CreateLink(this, 620 views::ImageView* icon = new views::ImageView();
454 IDS_TRANSLATE_BUBBLE_ADVANCED, 621 ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance();
455 LINK_ID_ADVANCED)); 622 icon->SetImage(
623 bundle.GetImageNamed(IDR_TRANSLATE_ICON_V2).ToImageSkia());
624 layout->AddView(icon);
625 }
626 if (use_2016_q2_ui_) {
627 layout->AddView(styled_label);
groby-ooo-7-16 2016/04/27 19:08:24 styled_label leaks if we're not using the new UI.
ftang 2016/04/27 21:43:15 Done.
628 } else {
629 layout->AddView(message_label);
630 auto link = CreateLink(this,
631 IDS_TRANSLATE_BUBBLE_ADVANCED,
632 LINK_ID_ADVANCED);
633 layout->AddView(link);
634 }
456 635
636
637 if (show_always_checkbox_ && !is_in_incognito_window_) {
638 layout->StartRow(0, COLUMN_SET_ID_MESSAGE);
639 layout->SkipColumns(1);
640 layout->AddView(always_translate_checkbox_);
641 }
457 layout->AddPaddingRow(0, views::kUnrelatedControlVerticalSpacing); 642 layout->AddPaddingRow(0, views::kUnrelatedControlVerticalSpacing);
458 643
459 layout->StartRow(0, COLUMN_SET_ID_CONTENT); 644 layout->StartRow(0, COLUMN_SET_ID_CONTENT);
460 views::LabelButton* accept_button = CreateLabelButton( 645 views::LabelButton* accept_button = use_blue_button_ ?
461 this, 646 CreateBlueButton(
462 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_ACCEPT), 647 this,
463 BUTTON_ID_TRANSLATE); 648 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_ACCEPT),
649 BUTTON_ID_TRANSLATE) :
650 CreateLabelButton(
651 this,
652 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_ACCEPT),
653 BUTTON_ID_TRANSLATE);
464 layout->AddView(accept_button); 654 layout->AddView(accept_button);
465 accept_button->SetIsDefault(true); 655 accept_button->SetIsDefault(true);
466 layout->AddView(denial_combobox_); 656 layout->AddView(denial_combobox_);
467 657
468 return view; 658 return view;
469 } 659 }
470 660
471 views::View* TranslateBubbleView::CreateViewTranslating() { 661 views::View* TranslateBubbleView::CreateViewTranslating() {
472 base::string16 target_language_name = 662 base::string16 target_language_name =
473 model_->GetLanguageNameAt(model_->GetTargetLanguageIndex()); 663 model_->GetLanguageNameAt(model_->GetTargetLanguageIndex());
474 views::Label* label = new views::Label( 664 views::Label* label = new views::Label(
475 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_TRANSLATING)); 665 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_TRANSLATING));
476 666
477 views::View* view = new views::View(); 667 views::View* view = new views::View();
478 views::GridLayout* layout = new views::GridLayout(view); 668 views::GridLayout* layout = new views::GridLayout(view);
479 view->SetLayoutManager(layout); 669 view->SetLayoutManager(layout);
480 670
481 using views::GridLayout; 671 using views::GridLayout;
482 672
483 enum { 673 enum {
484 COLUMN_SET_ID_MESSAGE, 674 COLUMN_SET_ID_MESSAGE,
485 COLUMN_SET_ID_CONTENT, 675 COLUMN_SET_ID_CONTENT,
486 }; 676 };
487 677
488 views::ColumnSet* cs = layout->AddColumnSet(COLUMN_SET_ID_MESSAGE); 678 views::ColumnSet* cs = layout->AddColumnSet(COLUMN_SET_ID_MESSAGE);
679 if (show_icon_) {
680 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER,
681 0, views::GridLayout::USE_PREF, 0, 0);
682 cs->AddPaddingColumn(0, views::kRelatedButtonHSpacing);
683 }
489 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 684 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER,
490 0, views::GridLayout::USE_PREF, 0, 0); 685 0, GridLayout::USE_PREF, 0, 0);
491 cs->AddPaddingColumn(1, 0); 686 cs->AddPaddingColumn(1, 0);
492 687
493 cs = layout->AddColumnSet(COLUMN_SET_ID_CONTENT); 688 cs = layout->AddColumnSet(COLUMN_SET_ID_CONTENT);
494 cs->AddPaddingColumn(1, 0); 689 cs->AddPaddingColumn(1, 0);
495 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 690 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER,
496 0, GridLayout::USE_PREF, 0, 0); 691 0, GridLayout::USE_PREF, 0, 0);
497 692
498 layout->StartRow(0, COLUMN_SET_ID_MESSAGE); 693 layout->StartRow(0, COLUMN_SET_ID_MESSAGE);
694 if (show_icon_) {
695 views::ImageView* icon = new views::ImageView();
696 ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance();
697 icon->SetImage(
698 bundle.GetImageNamed(IDR_TRANSLATE_ICON_V2).ToImageSkia());
699 layout->AddView(icon);
700 }
499 layout->AddView(label); 701 layout->AddView(label);
500 702
501 layout->AddPaddingRow(0, views::kUnrelatedControlVerticalSpacing); 703 layout->AddPaddingRow(0, views::kUnrelatedControlVerticalSpacing);
502 704
503 layout->StartRow(0, COLUMN_SET_ID_CONTENT); 705 layout->StartRow(0, COLUMN_SET_ID_CONTENT);
504 views::LabelButton* revert_button = CreateLabelButton( 706 views::LabelButton* revert_button = CreateLabelButton(
505 this, 707 this,
506 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_REVERT), 708 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_REVERT),
507 BUTTON_ID_SHOW_ORIGINAL); 709 BUTTON_ID_SHOW_ORIGINAL);
508 revert_button->SetEnabled(false); 710 revert_button->SetEnabled(false);
(...skipping 11 matching lines...) Expand all
520 view->SetLayoutManager(layout); 722 view->SetLayoutManager(layout);
521 723
522 using views::GridLayout; 724 using views::GridLayout;
523 725
524 enum { 726 enum {
525 COLUMN_SET_ID_MESSAGE, 727 COLUMN_SET_ID_MESSAGE,
526 COLUMN_SET_ID_CONTENT, 728 COLUMN_SET_ID_CONTENT,
527 }; 729 };
528 730
529 views::ColumnSet* cs = layout->AddColumnSet(COLUMN_SET_ID_MESSAGE); 731 views::ColumnSet* cs = layout->AddColumnSet(COLUMN_SET_ID_MESSAGE);
732 if (show_icon_) {
733 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER,
734 0, views::GridLayout::USE_PREF, 0, 0);
735 cs->AddPaddingColumn(0, views::kRelatedButtonHSpacing);
736 }
530 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 737 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER,
531 0, views::GridLayout::USE_PREF, 0, 0); 738 0, views::GridLayout::USE_PREF, 0, 0);
532 cs->AddPaddingColumn(0, views::kRelatedButtonHSpacing); 739 cs->AddPaddingColumn(0, views::kRelatedButtonHSpacing);
533 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 740 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER,
534 0, views::GridLayout::USE_PREF, 0, 0); 741 0, GridLayout::USE_PREF, 0, 0);
535 cs->AddPaddingColumn(1, 0); 742 cs->AddPaddingColumn(1, 0);
536 743
537 cs = layout->AddColumnSet(COLUMN_SET_ID_CONTENT); 744 cs = layout->AddColumnSet(COLUMN_SET_ID_CONTENT);
538 cs->AddPaddingColumn(1, 0); 745 cs->AddPaddingColumn(1, 0);
539 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 746 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER,
540 0, GridLayout::USE_PREF, 0, 0); 747 0, GridLayout::USE_PREF, 0, 0);
541 748
542 layout->StartRow(0, COLUMN_SET_ID_MESSAGE); 749 layout->StartRow(0, COLUMN_SET_ID_MESSAGE);
750 if (show_icon_) {
751 views::ImageView* icon = new views::ImageView();
752 ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance();
753 icon->SetImage(
754 bundle.GetImageNamed(IDR_TRANSLATE_ICON_V2).ToImageSkia());
755 layout->AddView(icon);
756 }
543 layout->AddView(label); 757 layout->AddView(label);
544 layout->AddView(CreateLink(this, 758 layout->AddView(CreateLink(this,
545 IDS_TRANSLATE_BUBBLE_ADVANCED, 759 IDS_TRANSLATE_BUBBLE_ADVANCED,
546 LINK_ID_ADVANCED)); 760 LINK_ID_ADVANCED));
547 761
548 layout->AddPaddingRow(0, views::kUnrelatedControlVerticalSpacing); 762 layout->AddPaddingRow(0, views::kUnrelatedControlVerticalSpacing);
549 763
550 layout->StartRow(0, COLUMN_SET_ID_CONTENT); 764 layout->StartRow(0, COLUMN_SET_ID_CONTENT);
551 layout->AddView(CreateLabelButton( 765 layout->AddView(CreateLabelButton(
552 this, 766 this,
(...skipping 12 matching lines...) Expand all
565 view->SetLayoutManager(layout); 779 view->SetLayoutManager(layout);
566 780
567 using views::GridLayout; 781 using views::GridLayout;
568 782
569 enum { 783 enum {
570 COLUMN_SET_ID_MESSAGE, 784 COLUMN_SET_ID_MESSAGE,
571 COLUMN_SET_ID_CONTENT, 785 COLUMN_SET_ID_CONTENT,
572 }; 786 };
573 787
574 views::ColumnSet* cs = layout->AddColumnSet(COLUMN_SET_ID_MESSAGE); 788 views::ColumnSet* cs = layout->AddColumnSet(COLUMN_SET_ID_MESSAGE);
789 if (show_icon_) {
790 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER,
791 0, GridLayout::USE_PREF, 0, 0);
792 cs->AddPaddingColumn(0, views::kRelatedButtonHSpacing);
793 }
575 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 794 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER,
576 0, GridLayout::USE_PREF, 0, 0); 795 0, GridLayout::USE_PREF, 0, 0);
577 cs->AddPaddingColumn(0, views::kRelatedButtonHSpacing); 796 cs->AddPaddingColumn(0, views::kRelatedButtonHSpacing);
578 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 797 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER,
579 0, GridLayout::USE_PREF, 0, 0); 798 0, GridLayout::USE_PREF, 0, 0);
580 cs->AddPaddingColumn(1, 0); 799 cs->AddPaddingColumn(1, 0);
581 800
582 cs = layout->AddColumnSet(COLUMN_SET_ID_CONTENT); 801 cs = layout->AddColumnSet(COLUMN_SET_ID_CONTENT);
583 cs->AddPaddingColumn(1, 0); 802 cs->AddPaddingColumn(1, 0);
584 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 803 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER,
585 0, GridLayout::USE_PREF, 0, 0); 804 0, GridLayout::USE_PREF, 0, 0);
586 805
587 layout->StartRow(0, COLUMN_SET_ID_MESSAGE); 806 layout->StartRow(0, COLUMN_SET_ID_MESSAGE);
807 if (show_icon_) {
groby-ooo-7-16 2016/04/27 19:08:25 Given that this is common code, I'm inclined to su
ftang 2016/04/27 21:43:15 Done.
808 views::ImageView* icon = new views::ImageView();
809 ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance();
810 icon->SetImage(
811 bundle.GetImageNamed(IDR_TRANSLATE_ICON_V2).ToImageSkia());
812 layout->AddView(icon);
813 }
588 layout->AddView(label); 814 layout->AddView(label);
589 layout->AddView(CreateLink(this, 815 layout->AddView(CreateLink(this,
590 IDS_TRANSLATE_BUBBLE_ADVANCED, 816 IDS_TRANSLATE_BUBBLE_ADVANCED,
591 LINK_ID_ADVANCED)); 817 LINK_ID_ADVANCED));
592 818
593 layout->AddPaddingRow(0, views::kUnrelatedControlVerticalSpacing); 819 layout->AddPaddingRow(0, views::kUnrelatedControlVerticalSpacing);
594 820
595 layout->StartRow(0, COLUMN_SET_ID_CONTENT); 821 layout->StartRow(0, COLUMN_SET_ID_CONTENT);
596 layout->AddView(CreateLabelButton( 822 layout->AddView(CreateLabelButton(
597 this, 823 this,
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
680 layout->SkipColumns(1); 906 layout->SkipColumns(1);
681 layout->AddView(always_translate_checkbox_); 907 layout->AddView(always_translate_checkbox_);
682 } 908 }
683 909
684 layout->AddPaddingRow(0, views::kUnrelatedControlVerticalSpacing); 910 layout->AddPaddingRow(0, views::kUnrelatedControlVerticalSpacing);
685 911
686 layout->StartRow(0, COLUMN_SET_ID_BUTTONS); 912 layout->StartRow(0, COLUMN_SET_ID_BUTTONS);
687 layout->AddView(CreateLink(this, 913 layout->AddView(CreateLink(this,
688 IDS_TRANSLATE_BUBBLE_LANGUAGE_SETTINGS, 914 IDS_TRANSLATE_BUBBLE_LANGUAGE_SETTINGS,
689 LINK_ID_LANGUAGE_SETTINGS)); 915 LINK_ID_LANGUAGE_SETTINGS));
690 advanced_done_button_ = CreateLabelButton( 916 advanced_done_button_ = use_blue_button_ ?
691 this, l10n_util::GetStringUTF16(IDS_DONE), BUTTON_ID_DONE); 917 CreateBlueButton(
918 this, l10n_util::GetStringUTF16(IDS_DONE), BUTTON_ID_DONE) :
919 CreateLabelButton(
920 this, l10n_util::GetStringUTF16(IDS_DONE), BUTTON_ID_DONE);
692 advanced_done_button_->SetIsDefault(true); 921 advanced_done_button_->SetIsDefault(true);
693 advanced_cancel_button_ = CreateLabelButton( 922 advanced_cancel_button_ = CreateLabelButton(
694 this, l10n_util::GetStringUTF16(IDS_CANCEL), BUTTON_ID_CANCEL); 923 this, l10n_util::GetStringUTF16(IDS_CANCEL), BUTTON_ID_CANCEL);
695 layout->AddView(advanced_done_button_); 924 layout->AddView(advanced_done_button_);
696 layout->AddView(advanced_cancel_button_); 925 layout->AddView(advanced_cancel_button_);
697 926
698 UpdateAdvancedView(); 927 UpdateAdvancedView();
699 928
700 return view; 929 return view;
701 } 930 }
(...skipping 25 matching lines...) Expand all
727 base::string16 source_language_name = 956 base::string16 source_language_name =
728 model_->GetLanguageNameAt(model_->GetOriginalLanguageIndex()); 957 model_->GetLanguageNameAt(model_->GetOriginalLanguageIndex());
729 base::string16 target_language_name = 958 base::string16 target_language_name =
730 model_->GetLanguageNameAt(model_->GetTargetLanguageIndex()); 959 model_->GetLanguageNameAt(model_->GetTargetLanguageIndex());
731 960
732 // "Always translate" checkbox doesn't exist in an incognito window. 961 // "Always translate" checkbox doesn't exist in an incognito window.
733 if (always_translate_checkbox_) { 962 if (always_translate_checkbox_) {
734 always_translate_checkbox_->SetText( 963 always_translate_checkbox_->SetText(
735 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_ALWAYS)); 964 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_ALWAYS));
736 always_translate_checkbox_->SetChecked( 965 always_translate_checkbox_->SetChecked(
966 use_2016_q2_ui_ ?
967 model_->GetAlwaysTranslateChecked() :
737 model_->ShouldAlwaysTranslate()); 968 model_->ShouldAlwaysTranslate());
738 } 969 }
739 970
740 base::string16 label; 971 base::string16 label;
741 if (model_->IsPageTranslatedInCurrentLanguages()) 972 if (model_->IsPageTranslatedInCurrentLanguages())
742 label = l10n_util::GetStringUTF16(IDS_DONE); 973 label = l10n_util::GetStringUTF16(IDS_DONE);
743 else 974 else
744 label = l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_ACCEPT); 975 label = l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_ACCEPT);
745 advanced_done_button_->SetText(label); 976 advanced_done_button_->SetText(label);
746 advanced_done_button_->SizeToPreferredSize(); 977 advanced_done_button_->SizeToPreferredSize();
747 if (advanced_view_) 978 if (advanced_view_)
748 advanced_view_->Layout(); 979 advanced_view_->Layout();
749 } 980 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698