| 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/after_translate_infobar.h" | 5 #include "chrome/browser/ui/views/infobars/after_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 AfterTranslateInfoBar::AfterTranslateInfoBar( | 15 AfterTranslateInfoBar::AfterTranslateInfoBar( |
| 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 label_3_(NULL), | 21 label_3_(NULL), |
| 22 original_language_menu_button_(NULL), | 22 original_language_menu_button_(NULL), |
| 23 target_language_menu_button_(NULL), | 23 target_language_menu_button_(NULL), |
| 24 revert_button_(NULL), | 24 revert_button_(NULL), |
| 25 options_menu_button_(NULL), | 25 options_menu_button_(NULL), |
| 26 original_language_menu_model_(delegate, LanguagesMenuModel::ORIGINAL), | |
| 27 target_language_menu_model_(delegate, LanguagesMenuModel::TARGET), | |
| 28 options_menu_model_(delegate), | 26 options_menu_model_(delegate), |
| 29 swapped_language_buttons_(false) { | 27 swapped_language_buttons_(false) { |
| 30 } | 28 } |
| 31 | 29 |
| 32 AfterTranslateInfoBar::~AfterTranslateInfoBar() { | 30 AfterTranslateInfoBar::~AfterTranslateInfoBar() { |
| 33 } | 31 } |
| 34 | 32 |
| 35 void AfterTranslateInfoBar::Layout() { | 33 void AfterTranslateInfoBar::Layout() { |
| 36 TranslateInfoBarBase::Layout(); | 34 TranslateInfoBarBase::Layout(); |
| 37 | 35 |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 78 | 76 |
| 79 void AfterTranslateInfoBar::ViewHierarchyChanged(bool is_add, | 77 void AfterTranslateInfoBar::ViewHierarchyChanged(bool is_add, |
| 80 View* parent, | 78 View* parent, |
| 81 View* child) { | 79 View* child) { |
| 82 if (!is_add || (child != this) || (label_1_ != NULL)) { | 80 if (!is_add || (child != this) || (label_1_ != NULL)) { |
| 83 TranslateInfoBarBase::ViewHierarchyChanged(is_add, parent, child); | 81 TranslateInfoBarBase::ViewHierarchyChanged(is_add, parent, child); |
| 84 return; | 82 return; |
| 85 } | 83 } |
| 86 | 84 |
| 87 std::vector<string16> strings; | 85 std::vector<string16> strings; |
| 88 GetDelegate()->GetAfterTranslateStrings(&strings, &swapped_language_buttons_); | 86 TranslateInfoBarDelegate* delegate = GetDelegate(); |
| 87 delegate->GetAfterTranslateStrings(&strings, &swapped_language_buttons_); |
| 89 DCHECK_EQ(3U, strings.size()); | 88 DCHECK_EQ(3U, strings.size()); |
| 90 | 89 |
| 91 label_1_ = CreateLabel(strings[0]); | 90 label_1_ = CreateLabel(strings[0]); |
| 92 AddChildView(label_1_); | 91 AddChildView(label_1_); |
| 93 | 92 |
| 94 original_language_menu_button_ = CreateMenuButton(string16(), this); | 93 original_language_menu_button_ = CreateMenuButton(string16(), this); |
| 94 original_language_menu_model_.reset(new TranslateLanguageMenuModel( |
| 95 TranslateLanguageMenuModel::ORIGINAL, delegate, this, |
| 96 original_language_menu_button_, true)); |
| 95 target_language_menu_button_ = CreateMenuButton(string16(), this); | 97 target_language_menu_button_ = CreateMenuButton(string16(), this); |
| 98 original_language_menu_model_.reset(new TranslateLanguageMenuModel( |
| 99 TranslateLanguageMenuModel::TARGET, delegate, this, |
| 100 target_language_menu_button_, true)); |
| 96 AddChildView(swapped_language_buttons_ ? | 101 AddChildView(swapped_language_buttons_ ? |
| 97 target_language_menu_button_ : original_language_menu_button_); | 102 target_language_menu_button_ : original_language_menu_button_); |
| 98 | 103 |
| 99 label_2_ = CreateLabel(strings[1]); | 104 label_2_ = CreateLabel(strings[1]); |
| 100 AddChildView(label_2_); | 105 AddChildView(label_2_); |
| 101 | 106 |
| 102 AddChildView(swapped_language_buttons_ ? | 107 AddChildView(swapped_language_buttons_ ? |
| 103 original_language_menu_button_ : target_language_menu_button_); | 108 original_language_menu_button_ : target_language_menu_button_); |
| 104 | 109 |
| 105 label_3_ = CreateLabel(strings[2]); | 110 label_3_ = CreateLabel(strings[2]); |
| 106 AddChildView(label_3_); | 111 AddChildView(label_3_); |
| 107 | 112 |
| 108 revert_button_ = CreateTextButton(this, | 113 revert_button_ = CreateTextButton(this, |
| 109 l10n_util::GetStringUTF16(IDS_TRANSLATE_INFOBAR_REVERT), false); | 114 l10n_util::GetStringUTF16(IDS_TRANSLATE_INFOBAR_REVERT), false); |
| 110 AddChildView(revert_button_); | 115 AddChildView(revert_button_); |
| 111 | 116 |
| 112 options_menu_button_ = CreateMenuButton( | 117 options_menu_button_ = CreateMenuButton( |
| 113 l10n_util::GetStringUTF16(IDS_TRANSLATE_INFOBAR_OPTIONS), this); | 118 l10n_util::GetStringUTF16(IDS_TRANSLATE_INFOBAR_OPTIONS), this); |
| 114 AddChildView(options_menu_button_); | 119 AddChildView(options_menu_button_); |
| 115 | 120 |
| 116 // This must happen after adding all other children so InfoBarView can ensure | 121 // This must happen after adding all other children so InfoBarView can ensure |
| 117 // the close button is the last child. | 122 // the close button is the last child. |
| 118 TranslateInfoBarBase::ViewHierarchyChanged(is_add, parent, child); | 123 TranslateInfoBarBase::ViewHierarchyChanged(is_add, parent, child); |
| 119 | 124 |
| 120 // These must happen after adding all children because they trigger layout, | 125 // These must happen after adding all children because they trigger layout, |
| 121 // which assumes that particular children (e.g. the close button) have already | 126 // which assumes that particular children (e.g. the close button) have already |
| 122 // been added. | 127 // been added. |
| 123 OriginalLanguageChanged(); | 128 UpdateLanguageButtonText(original_language_menu_button_, |
| 124 TargetLanguageChanged(); | 129 delegate->language_name_at(delegate->original_language_index())); |
| 130 UpdateLanguageButtonText(target_language_menu_button_, |
| 131 delegate->language_name_at(delegate->target_language_index())); |
| 125 } | 132 } |
| 126 | 133 |
| 127 void AfterTranslateInfoBar::ButtonPressed(views::Button* sender, | 134 void AfterTranslateInfoBar::ButtonPressed(views::Button* sender, |
| 128 const ui::Event& event) { | 135 const ui::Event& event) { |
| 129 if (!owned()) | 136 if (!owned()) |
| 130 return; // We're closing; don't call anything, it might access the owner. | 137 return; // We're closing; don't call anything, it might access the owner. |
| 131 if (sender == revert_button_) | 138 if (sender == revert_button_) |
| 132 GetDelegate()->RevertTranslation(); | 139 GetDelegate()->RevertTranslation(); |
| 133 else | 140 else |
| 134 TranslateInfoBarBase::ButtonPressed(sender, event); | 141 TranslateInfoBarBase::ButtonPressed(sender, event); |
| 135 } | 142 } |
| 136 | 143 |
| 137 int AfterTranslateInfoBar::ContentMinimumWidth() const { | 144 int AfterTranslateInfoBar::ContentMinimumWidth() const { |
| 138 return | 145 return |
| 139 (kButtonInLabelSpacing + | 146 (kButtonInLabelSpacing + |
| 140 original_language_menu_button_->GetPreferredSize().width() + | 147 original_language_menu_button_->GetPreferredSize().width() + |
| 141 kButtonInLabelSpacing) + | 148 kButtonInLabelSpacing) + |
| 142 (kButtonInLabelSpacing + | 149 (kButtonInLabelSpacing + |
| 143 target_language_menu_button_->GetPreferredSize().width() + | 150 target_language_menu_button_->GetPreferredSize().width() + |
| 144 kButtonInLabelSpacing) + | 151 kButtonInLabelSpacing) + |
| 145 (kButtonInLabelSpacing + revert_button_->GetPreferredSize().width()) + | 152 (kButtonInLabelSpacing + revert_button_->GetPreferredSize().width()) + |
| 146 (kEndOfLabelSpacing + options_menu_button_->GetPreferredSize().width()); | 153 (kEndOfLabelSpacing + options_menu_button_->GetPreferredSize().width()); |
| 147 } | 154 } |
| 148 | 155 |
| 149 void AfterTranslateInfoBar::OriginalLanguageChanged() { | |
| 150 // Tests can call this function when the infobar has never been added to a | |
| 151 // view hierarchy and thus there is no button. | |
| 152 if (original_language_menu_button_) { | |
| 153 UpdateLanguageButtonText(original_language_menu_button_, | |
| 154 LanguagesMenuModel::ORIGINAL); | |
| 155 } | |
| 156 } | |
| 157 | |
| 158 void AfterTranslateInfoBar::TargetLanguageChanged() { | |
| 159 // Tests can call this function when the infobar has never been added to a | |
| 160 // view hierarchy and thus there is no button. | |
| 161 if (target_language_menu_button_) { | |
| 162 UpdateLanguageButtonText(target_language_menu_button_, | |
| 163 LanguagesMenuModel::TARGET); | |
| 164 } | |
| 165 } | |
| 166 | |
| 167 void AfterTranslateInfoBar::OnMenuButtonClicked(views::View* source, | 156 void AfterTranslateInfoBar::OnMenuButtonClicked(views::View* source, |
| 168 const gfx::Point& point) { | 157 const gfx::Point& point) { |
| 169 if (!owned()) | 158 if (!owned()) |
| 170 return; // We're closing; don't call anything, it might access the owner. | 159 return; // We're closing; don't call anything, it might access the owner. |
| 171 ui::MenuModel* menu_model = NULL; | |
| 172 views::MenuButton* button = NULL; | |
| 173 views::MenuItemView::AnchorPosition anchor = views::MenuItemView::TOPLEFT; | |
| 174 if (source == original_language_menu_button_) { | 160 if (source == original_language_menu_button_) { |
| 175 menu_model = &original_language_menu_model_; | 161 RunMenuAt(original_language_menu_model_.get(), |
| 176 button = original_language_menu_button_; | 162 original_language_menu_button_, views::MenuItemView::TOPLEFT); |
| 177 } else if (source == target_language_menu_button_) { | 163 } else if (source == target_language_menu_button_) { |
| 178 menu_model = &target_language_menu_model_; | 164 RunMenuAt(target_language_menu_model_.get(), target_language_menu_button_, |
| 179 button = target_language_menu_button_; | 165 views::MenuItemView::TOPLEFT); |
| 180 } else { | 166 } else { |
| 181 DCHECK_EQ(options_menu_button_, source); | 167 DCHECK_EQ(options_menu_button_, source); |
| 182 menu_model = &options_menu_model_; | 168 RunMenuAt(&options_menu_model_, options_menu_button_, |
| 183 button = options_menu_button_; | 169 views::MenuItemView::TOPRIGHT); |
| 184 anchor = views::MenuItemView::TOPRIGHT; | |
| 185 } | 170 } |
| 186 RunMenuAt(menu_model, button, anchor); | |
| 187 } | 171 } |
| OLD | NEW |