Index: chrome/browser/ui/views/translate/translate_bubble_view.cc |
diff --git a/chrome/browser/ui/views/translate/translate_bubble_view.cc b/chrome/browser/ui/views/translate/translate_bubble_view.cc |
index ac73e84856117e3cac5338621243c09ef7c75dbc..3dfdac1c70d99684ab810f23b1348d1414c37ad5 100644 |
--- a/chrome/browser/ui/views/translate/translate_bubble_view.cc |
+++ b/chrome/browser/ui/views/translate/translate_bubble_view.cc |
@@ -20,6 +20,7 @@ |
#include "chrome/browser/translate/translate_ui_delegate.h" |
#include "chrome/browser/ui/browser.h" |
#include "chrome/browser/ui/translate/translate_bubble_model_impl.h" |
+#include "chrome/browser/ui/translate/translate_denial_menu_model.h" |
#include "chrome/common/url_constants.h" |
#include "content/public/browser/web_contents.h" |
#include "grit/generated_resources.h" |
@@ -28,6 +29,7 @@ |
#include "ui/base/resource/resource_bundle.h" |
#include "ui/views/controls/button/checkbox.h" |
#include "ui/views/controls/button/label_button.h" |
+#include "ui/views/controls/button/multi_target_button.h" |
#include "ui/views/controls/combobox/combobox.h" |
#include "ui/views/controls/label.h" |
#include "ui/views/controls/link.h" |
@@ -69,49 +71,6 @@ void GetTranslateLanguages(content::WebContents* web_contents, |
g_browser_process->GetApplicationLocale()); |
} |
-// TODO(hajimehoshi): The interface to offer denial choices should be another |
-// control instead of Combobox. See crbug/305494. |
-class TranslateDenialComboboxModel : public ui::ComboboxModel { |
- public: |
- enum { |
- INDEX_NOPE = 0, |
- INDEX_NEVER_TRANSLATE_LANGUAGE = 2, |
- INDEX_NEVER_TRANSLATE_SITE = 4, |
- }; |
- |
- explicit TranslateDenialComboboxModel( |
- const string16& original_language_name) { |
- items_.push_back(l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_DENY)); |
- items_.push_back(string16()); |
- items_.push_back(l10n_util::GetStringFUTF16( |
- IDS_TRANSLATE_BUBBLE_NEVER_TRANSLATE_LANG, |
- original_language_name)); |
- items_.push_back(string16()); |
- items_.push_back(l10n_util::GetStringUTF16( |
- IDS_TRANSLATE_BUBBLE_NEVER_TRANSLATE_SITE)); |
- } |
- virtual ~TranslateDenialComboboxModel() {} |
- |
- private: |
- // Overridden from ui::ComboboxModel: |
- virtual int GetItemCount() const OVERRIDE { |
- return items_.size(); |
- } |
- virtual string16 GetItemAt(int index) OVERRIDE { |
- return items_[index]; |
- } |
- virtual bool IsItemSeparatorAt(int index) OVERRIDE { |
- return items_[index].empty(); |
- } |
- virtual int GetDefaultIndex() const OVERRIDE { |
- return 0; |
- } |
- |
- std::vector<string16> items_; |
- |
- DISALLOW_COPY_AND_ASSIGN(TranslateDenialComboboxModel); |
-}; |
- |
} // namespace |
// static |
@@ -251,6 +210,25 @@ void TranslateBubbleView::LinkClicked(views::Link* source, int event_flags) { |
HandleLinkClicked(static_cast<LinkID>(source->id())); |
} |
+void TranslateBubbleView::OnExecutingDenialCommand( |
+ TranslateDenialMenuModelObserver::Command command) { |
+ switch (command) { |
+ case TranslateDenialMenuModelObserver::COMMAND_DENY: |
+ if (!translate_executed_) |
+ model_->TranslationDeclined(); |
+ StartFade(false); |
+ break; |
+ case TranslateDenialMenuModelObserver::COMMAND_NEVER_TRANSLATE_LANG: |
+ model_->SetNeverTranslateLanguage(true); |
+ StartFade(false); |
+ break; |
+ case TranslateDenialMenuModelObserver::COMMAND_NEVER_TRANSLATE_SITE: |
+ model_->SetNeverTranslateSite(true); |
+ StartFade(false); |
+ break; |
+ } |
+} |
+ |
TranslateBubbleModel::ViewState TranslateBubbleView::GetViewState() const { |
return model_->GetViewState(); |
} |
@@ -266,7 +244,7 @@ TranslateBubbleView::TranslateBubbleView( |
after_translate_view_(NULL), |
error_view_(NULL), |
advanced_view_(NULL), |
- denial_combobox_(NULL), |
+ denial_button_(NULL), |
source_language_combobox_(NULL), |
target_language_combobox_(NULL), |
always_translate_checkbox_(NULL), |
@@ -362,28 +340,6 @@ void TranslateBubbleView::HandleLinkClicked( |
void TranslateBubbleView::HandleComboboxSelectedIndexChanged( |
TranslateBubbleView::ComboboxID sender_id) { |
switch (sender_id) { |
- case COMBOBOX_ID_DENIAL: { |
- int index = denial_combobox_->selected_index(); |
- switch (index) { |
- case TranslateDenialComboboxModel::INDEX_NOPE: |
- if (!translate_executed_) |
- model_->TranslationDeclined(); |
- StartFade(false); |
- break; |
- case TranslateDenialComboboxModel::INDEX_NEVER_TRANSLATE_LANGUAGE: |
- model_->SetNeverTranslateLanguage(true); |
- StartFade(false); |
- break; |
- case TranslateDenialComboboxModel::INDEX_NEVER_TRANSLATE_SITE: |
- model_->SetNeverTranslateSite(true); |
- StartFade(false); |
- break; |
- default: |
- NOTREACHED(); |
- break; |
- } |
- break; |
- } |
case COMBOBOX_ID_SOURCE_LANGUAGE: { |
model_->UpdateOriginalLanguageIndex( |
source_language_combobox_->selected_index()); |
@@ -412,10 +368,9 @@ views::View* TranslateBubbleView::CreateViewBeforeTranslate() { |
string16 original_language_name = |
model_->GetLanguageNameAt(model_->GetOriginalLanguageIndex()); |
- denial_combobox_ = new views::Combobox( |
- new TranslateDenialComboboxModel(original_language_name)); |
- denial_combobox_->set_id(COMBOBOX_ID_DENIAL); |
- denial_combobox_->set_listener(this); |
+ denial_button_model_.reset( |
+ new TranslateDenialMenuModel(original_language_name, this)); |
+ denial_button_ = new views::MultiTargetButton(denial_button_model_.get()); |
views::View* view = new views::View(); |
views::GridLayout* layout = new views::GridLayout(view); |
@@ -445,6 +400,9 @@ views::View* TranslateBubbleView::CreateViewBeforeTranslate() { |
cs->AddPaddingColumn(0, views::kRelatedButtonHSpacing); |
cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, |
0, GridLayout::USE_PREF, 0, 0); |
+ cs->AddPaddingColumn(0, views::kRelatedButtonHSpacing); |
+ cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, |
+ 0, GridLayout::USE_PREF, 0, 0); |
layout->StartRow(0, COLUMN_SET_ID_MESSAGE); |
layout->AddView(message_label); |
@@ -458,7 +416,7 @@ views::View* TranslateBubbleView::CreateViewBeforeTranslate() { |
layout->AddView(CreateLink(this, |
IDS_TRANSLATE_BUBBLE_LEARN_MORE, |
LINK_ID_LEARN_MORE)); |
- layout->AddView(denial_combobox_); |
+ layout->AddView(denial_button_); |
layout->AddView(CreateLabelButton( |
this, |
l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_ACCEPT), |