Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 } |
| OLD | NEW |