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

Side by Side Diff: chrome/browser/ui/views/infobars/after_translate_infobar.cc

Issue 10952016: Simplify the translate infobar code some. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 8 years, 3 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 | Annotate | Revision Log
OLDNEW
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698