| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/infobars/before_translate_infobar.h" | 5 #include "chrome/browser/ui/views/infobars/before_translate_infobar.h" |
| 6 | 6 |
| 7 #include "base/utf_string_conversions.h" | 7 #include "base/utf_string_conversions.h" |
| 8 #include "chrome/browser/translate/translate_infobar_delegate.h" | 8 #include "chrome/browser/translate/translate_infobar_delegate.h" |
| 9 #include "grit/generated_resources.h" | 9 #include "grit/generated_resources.h" |
| 10 #include "ui/base/l10n/l10n_util.h" | 10 #include "ui/base/l10n/l10n_util.h" |
| 11 #include "ui/views/controls/button/menu_button.h" | 11 #include "ui/views/controls/button/menu_button.h" |
| 12 #include "ui/views/controls/label.h" | 12 #include "ui/views/controls/label.h" |
| 13 #include "ui/views/controls/menu/menu_item_view.h" | 13 #include "ui/views/controls/menu/menu_item_view.h" |
| 14 | 14 |
| 15 BeforeTranslateInfoBar::BeforeTranslateInfoBar( | 15 BeforeTranslateInfoBar::BeforeTranslateInfoBar( |
| 16 InfoBarTabHelper* owner, | 16 InfoBarTabHelper* owner, |
| 17 TranslateInfoBarDelegate* delegate) | 17 TranslateInfoBarDelegate* delegate) |
| 18 : TranslateInfoBarBase(owner, delegate), | 18 : TranslateInfoBarBase(owner, delegate), |
| 19 label_1_(NULL), | 19 label_1_(NULL), |
| 20 label_2_(NULL), | 20 label_2_(NULL), |
| 21 language_menu_button_(NULL), | 21 language_menu_button_(NULL), |
| 22 accept_button_(NULL), | 22 accept_button_(NULL), |
| 23 deny_button_(NULL), | 23 deny_button_(NULL), |
| 24 never_translate_button_(NULL), | 24 never_translate_button_(NULL), |
| 25 always_translate_button_(NULL), | 25 always_translate_button_(NULL), |
| 26 options_menu_button_(NULL), | 26 options_menu_button_(NULL), |
| 27 languages_menu_model_(delegate, LanguagesMenuModel::ORIGINAL), | |
| 28 options_menu_model_(delegate) { | 27 options_menu_model_(delegate) { |
| 29 } | 28 } |
| 30 | 29 |
| 31 BeforeTranslateInfoBar::~BeforeTranslateInfoBar() { | 30 BeforeTranslateInfoBar::~BeforeTranslateInfoBar() { |
| 32 } | 31 } |
| 33 | 32 |
| 34 void BeforeTranslateInfoBar::Layout() { | 33 void BeforeTranslateInfoBar::Layout() { |
| 35 TranslateInfoBarBase::Layout(); | 34 TranslateInfoBarBase::Layout(); |
| 36 | 35 |
| 37 int available_width = std::max(0, EndX() - StartX() - ContentMinimumWidth()); | 36 int available_width = std::max(0, EndX() - StartX() - ContentMinimumWidth()); |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 93 } | 92 } |
| 94 | 93 |
| 95 size_t offset = 0; | 94 size_t offset = 0; |
| 96 string16 text(l10n_util::GetStringFUTF16(IDS_TRANSLATE_INFOBAR_BEFORE_MESSAGE, | 95 string16 text(l10n_util::GetStringFUTF16(IDS_TRANSLATE_INFOBAR_BEFORE_MESSAGE, |
| 97 string16(), &offset)); | 96 string16(), &offset)); |
| 98 | 97 |
| 99 label_1_ = CreateLabel(text.substr(0, offset)); | 98 label_1_ = CreateLabel(text.substr(0, offset)); |
| 100 AddChildView(label_1_); | 99 AddChildView(label_1_); |
| 101 | 100 |
| 102 language_menu_button_ = CreateMenuButton(string16(), this); | 101 language_menu_button_ = CreateMenuButton(string16(), this); |
| 102 TranslateInfoBarDelegate* delegate = GetDelegate(); |
| 103 language_menu_model_.reset(new TranslateLanguageMenuModel( |
| 104 TranslateLanguageMenuModel::ORIGINAL, delegate, this, |
| 105 language_menu_button_, false)); |
| 103 AddChildView(language_menu_button_); | 106 AddChildView(language_menu_button_); |
| 104 | 107 |
| 105 label_2_ = CreateLabel(text.substr(offset)); | 108 label_2_ = CreateLabel(text.substr(offset)); |
| 106 AddChildView(label_2_); | 109 AddChildView(label_2_); |
| 107 | 110 |
| 108 accept_button_ = CreateTextButton(this, | 111 accept_button_ = CreateTextButton(this, |
| 109 l10n_util::GetStringUTF16(IDS_TRANSLATE_INFOBAR_ACCEPT), false); | 112 l10n_util::GetStringUTF16(IDS_TRANSLATE_INFOBAR_ACCEPT), false); |
| 110 AddChildView(accept_button_); | 113 AddChildView(accept_button_); |
| 111 | 114 |
| 112 deny_button_ = CreateTextButton(this, | 115 deny_button_ = CreateTextButton(this, |
| 113 l10n_util::GetStringUTF16(IDS_TRANSLATE_INFOBAR_DENY), false); | 116 l10n_util::GetStringUTF16(IDS_TRANSLATE_INFOBAR_DENY), false); |
| 114 AddChildView(deny_button_); | 117 AddChildView(deny_button_); |
| 115 | 118 |
| 116 TranslateInfoBarDelegate* delegate = GetDelegate(); | 119 const string16& language( |
| 117 const string16& language(delegate->GetLanguageDisplayableNameAt( | 120 delegate->language_name_at(delegate->original_language_index())); |
| 118 delegate->original_language_index())); | |
| 119 if (delegate->ShouldShowNeverTranslateButton()) { | 121 if (delegate->ShouldShowNeverTranslateButton()) { |
| 120 DCHECK(!delegate->ShouldShowAlwaysTranslateButton()); | 122 DCHECK(!delegate->ShouldShowAlwaysTranslateButton()); |
| 121 never_translate_button_ = CreateTextButton(this, | 123 never_translate_button_ = CreateTextButton(this, |
| 122 l10n_util::GetStringFUTF16(IDS_TRANSLATE_INFOBAR_NEVER_TRANSLATE, | 124 l10n_util::GetStringFUTF16(IDS_TRANSLATE_INFOBAR_NEVER_TRANSLATE, |
| 123 language), false); | 125 language), false); |
| 124 AddChildView(never_translate_button_); | 126 AddChildView(never_translate_button_); |
| 125 } else if (delegate->ShouldShowAlwaysTranslateButton()) { | 127 } else if (delegate->ShouldShowAlwaysTranslateButton()) { |
| 126 always_translate_button_ = CreateTextButton(this, | 128 always_translate_button_ = CreateTextButton(this, |
| 127 l10n_util::GetStringFUTF16(IDS_TRANSLATE_INFOBAR_ALWAYS_TRANSLATE, | 129 l10n_util::GetStringFUTF16(IDS_TRANSLATE_INFOBAR_ALWAYS_TRANSLATE, |
| 128 language), false); | 130 language), false); |
| 129 AddChildView(always_translate_button_); | 131 AddChildView(always_translate_button_); |
| 130 } | 132 } |
| 131 | 133 |
| 132 options_menu_button_ = CreateMenuButton( | 134 options_menu_button_ = CreateMenuButton( |
| 133 l10n_util::GetStringUTF16(IDS_TRANSLATE_INFOBAR_OPTIONS), this); | 135 l10n_util::GetStringUTF16(IDS_TRANSLATE_INFOBAR_OPTIONS), this); |
| 134 AddChildView(options_menu_button_); | 136 AddChildView(options_menu_button_); |
| 135 | 137 |
| 136 // This must happen after adding all other children so InfoBarView can ensure | 138 // This must happen after adding all other children so InfoBarView can ensure |
| 137 // the close button is the last child. | 139 // the close button is the last child. |
| 138 TranslateInfoBarBase::ViewHierarchyChanged(is_add, parent, child); | 140 TranslateInfoBarBase::ViewHierarchyChanged(is_add, parent, child); |
| 139 | 141 |
| 140 // This must happen after adding all children because it triggers layout, | 142 // This must happen after adding all children because it triggers layout, |
| 141 // which assumes that particular children (e.g. the close button) have already | 143 // which assumes that particular children (e.g. the close button) have already |
| 142 // been added. | 144 // been added. |
| 143 OriginalLanguageChanged(); | 145 UpdateLanguageButtonText(language_menu_button_, |
| 146 delegate->language_name_at(delegate->original_language_index())); |
| 144 } | 147 } |
| 145 | 148 |
| 146 int BeforeTranslateInfoBar::ContentMinimumWidth() const { | 149 int BeforeTranslateInfoBar::ContentMinimumWidth() const { |
| 147 return | 150 return |
| 148 (kButtonInLabelSpacing + | 151 (kButtonInLabelSpacing + |
| 149 language_menu_button_->GetPreferredSize().width() + | 152 language_menu_button_->GetPreferredSize().width() + |
| 150 kButtonInLabelSpacing) + | 153 kButtonInLabelSpacing) + |
| 151 (kEndOfLabelSpacing + accept_button_->GetPreferredSize().width()) + | 154 (kEndOfLabelSpacing + accept_button_->GetPreferredSize().width()) + |
| 152 (kButtonButtonSpacing + deny_button_->GetPreferredSize().width()) + | 155 (kButtonButtonSpacing + deny_button_->GetPreferredSize().width()) + |
| 153 ((never_translate_button_ == NULL) ? 0 : | 156 ((never_translate_button_ == NULL) ? 0 : |
| (...skipping 17 matching lines...) Expand all Loading... |
| 171 RemoveSelf(); | 174 RemoveSelf(); |
| 172 } else if (sender == never_translate_button_) { | 175 } else if (sender == never_translate_button_) { |
| 173 delegate->NeverTranslatePageLanguage(); | 176 delegate->NeverTranslatePageLanguage(); |
| 174 } else if (sender == always_translate_button_) { | 177 } else if (sender == always_translate_button_) { |
| 175 delegate->AlwaysTranslatePageLanguage(); | 178 delegate->AlwaysTranslatePageLanguage(); |
| 176 } else { | 179 } else { |
| 177 TranslateInfoBarBase::ButtonPressed(sender, event); | 180 TranslateInfoBarBase::ButtonPressed(sender, event); |
| 178 } | 181 } |
| 179 } | 182 } |
| 180 | 183 |
| 181 void BeforeTranslateInfoBar::OriginalLanguageChanged() { | |
| 182 // Tests can call this function when the infobar has never been added to a | |
| 183 // view hierarchy and thus there is no button. | |
| 184 if (language_menu_button_) { | |
| 185 UpdateLanguageButtonText(language_menu_button_, | |
| 186 LanguagesMenuModel::ORIGINAL); | |
| 187 } | |
| 188 } | |
| 189 | |
| 190 void BeforeTranslateInfoBar::OnMenuButtonClicked(views::View* source, | 184 void BeforeTranslateInfoBar::OnMenuButtonClicked(views::View* source, |
| 191 const gfx::Point& point) { | 185 const gfx::Point& point) { |
| 192 if (!owned()) | 186 if (!owned()) |
| 193 return; // We're closing; don't call anything, it might access the owner. | 187 return; // We're closing; don't call anything, it might access the owner. |
| 194 ui::MenuModel* menu_model = NULL; | |
| 195 views::MenuButton* button = NULL; | |
| 196 views::MenuItemView::AnchorPosition anchor = views::MenuItemView::TOPLEFT; | |
| 197 if (source == language_menu_button_) { | 188 if (source == language_menu_button_) { |
| 198 menu_model = &languages_menu_model_; | 189 RunMenuAt(language_menu_model_.get(), language_menu_button_, |
| 199 button = language_menu_button_; | 190 views::MenuItemView::TOPLEFT); |
| 200 } else { | 191 } else { |
| 201 DCHECK_EQ(options_menu_button_, source); | 192 DCHECK_EQ(options_menu_button_, source); |
| 202 menu_model = &options_menu_model_; | 193 RunMenuAt(&options_menu_model_, options_menu_button_, |
| 203 button = options_menu_button_; | 194 views::MenuItemView::TOPRIGHT); |
| 204 anchor = views::MenuItemView::TOPRIGHT; | |
| 205 } | 195 } |
| 206 RunMenuAt(menu_model, button, anchor); | |
| 207 } | 196 } |
| OLD | NEW |