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

Side by Side Diff: chrome/browser/ui/views/infobars/before_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/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
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698