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

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

Powered by Google App Engine
This is Rietveld 408576698