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

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

Issue 4767001: Make TabContents own its infobar delegates.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 1 month 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) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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/views/infobars/before_translate_infobar.h" 5 #include "chrome/browser/views/infobars/before_translate_infobar.h"
6 6
7 #include "app/l10n_util.h" 7 #include "app/l10n_util.h"
8 #include "base/utf_string_conversions.h" 8 #include "base/utf_string_conversions.h"
9 #include "chrome/browser/translate/options_menu_model.h" 9 #include "chrome/browser/translate/options_menu_model.h"
10 #include "chrome/browser/translate/translate_infobar_delegate.h" 10 #include "chrome/browser/translate/translate_infobar_delegate.h"
(...skipping 15 matching lines...) Expand all
26 l10n_util::GetStringFUTF16(IDS_TRANSLATE_INFOBAR_BEFORE_MESSAGE, 26 l10n_util::GetStringFUTF16(IDS_TRANSLATE_INFOBAR_BEFORE_MESSAGE,
27 string16(), &offset); 27 string16(), &offset);
28 28
29 label_1_ = CreateLabel(text.substr(0, offset)); 29 label_1_ = CreateLabel(text.substr(0, offset));
30 AddChildView(label_1_); 30 AddChildView(label_1_);
31 31
32 label_2_ = CreateLabel(text.substr(offset)); 32 label_2_ = CreateLabel(text.substr(offset));
33 AddChildView(label_2_); 33 AddChildView(label_2_);
34 34
35 accept_button_ = 35 accept_button_ =
36 InfoBarTextButton::CreateWithMessageID(this, 36 InfoBarTextButton::CreateWithMessageID(this, IDS_TRANSLATE_INFOBAR_ACCEPT);
37 IDS_TRANSLATE_INFOBAR_ACCEPT);
38 AddChildView(accept_button_); 37 AddChildView(accept_button_);
39 38
40 deny_button_ = 39 deny_button_ =
41 InfoBarTextButton::CreateWithMessageID(this, 40 InfoBarTextButton::CreateWithMessageID(this, IDS_TRANSLATE_INFOBAR_DENY);
42 IDS_TRANSLATE_INFOBAR_DENY);
43 AddChildView(deny_button_); 41 AddChildView(deny_button_);
44 42
45 language_menu_button_ = CreateMenuButton(string16(), true, this); 43 language_menu_button_ = CreateMenuButton(string16(), true, this);
46 AddChildView(language_menu_button_); 44 AddChildView(language_menu_button_);
47 45
48 options_menu_button_ = 46 options_menu_button_ =
49 CreateMenuButton(l10n_util::GetStringUTF16(IDS_TRANSLATE_INFOBAR_OPTIONS), 47 CreateMenuButton(l10n_util::GetStringUTF16(IDS_TRANSLATE_INFOBAR_OPTIONS),
50 false, this); 48 false, this);
51 AddChildView(options_menu_button_); 49 AddChildView(options_menu_button_);
52 50
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
117 DCHECK(!never_translate_button_); 115 DCHECK(!never_translate_button_);
118 pref_size = always_translate_button_->GetPreferredSize(); 116 pref_size = always_translate_button_->GetPreferredSize();
119 always_translate_button_->SetBounds( 117 always_translate_button_->SetBounds(
120 deny_button_->bounds().right() + InfoBar::kButtonButtonSpacing, 118 deny_button_->bounds().right() + InfoBar::kButtonButtonSpacing,
121 OffsetY(this, pref_size), pref_size.width(), pref_size.height()); 119 OffsetY(this, pref_size), pref_size.width(), pref_size.height());
122 } 120 }
123 } 121 }
124 122
125 void BeforeTranslateInfoBar::ButtonPressed(views::Button* sender, 123 void BeforeTranslateInfoBar::ButtonPressed(views::Button* sender,
126 const views::Event& event) { 124 const views::Event& event) {
125 if (!delegate()) {
126 TranslateInfoBarBase::ButtonPressed(sender, event);
127 return;
128 }
129
130 TranslateInfoBarDelegate* delegate = GetDelegate();
127 if (sender == accept_button_) { 131 if (sender == accept_button_) {
128 GetDelegate()->Translate(); 132 delegate->Translate();
129 } else if (sender == deny_button_) { 133 } else if (sender == deny_button_) {
134 delegate->TranslationDeclined();
130 RemoveInfoBar(); 135 RemoveInfoBar();
131 GetDelegate()->TranslationDeclined();
132 } else if (sender == never_translate_button_) { 136 } else if (sender == never_translate_button_) {
133 GetDelegate()->NeverTranslatePageLanguage(); 137 delegate->NeverTranslatePageLanguage();
134 } else if (sender == always_translate_button_) { 138 } else if (sender == always_translate_button_) {
135 GetDelegate()->AlwaysTranslatePageLanguage(); 139 delegate->AlwaysTranslatePageLanguage();
136 } else { 140 } else {
137 TranslateInfoBarBase::ButtonPressed(sender, event); 141 TranslateInfoBarBase::ButtonPressed(sender, event);
138 } 142 }
139 } 143 }
140 144
141 void BeforeTranslateInfoBar::OriginalLanguageChanged() { 145 void BeforeTranslateInfoBar::OriginalLanguageChanged() {
142 UpdateOriginalButtonText(); 146 UpdateOriginalButtonText();
143 } 147 }
144 148
145 void BeforeTranslateInfoBar::TargetLanguageChanged() { 149 void BeforeTranslateInfoBar::TargetLanguageChanged() {
146 NOTREACHED(); 150 NOTREACHED();
147 } 151 }
148 152
149 void BeforeTranslateInfoBar::RunMenu(views::View* source, 153 void BeforeTranslateInfoBar::RunMenu(views::View* source,
150 const gfx::Point& pt) { 154 const gfx::Point& pt) {
155 if (!delegate())
156 return;
157 // TODO(pkasting): What if the InfoBarDelegate is closed while the menu is
158 // open? Then the menu models may deref garbage delegate pointers.
159
151 if (source == language_menu_button_) { 160 if (source == language_menu_button_) {
152 if (!languages_menu_.get()) 161 if (!languages_menu_.get())
153 languages_menu_.reset(new views::Menu2(&languages_menu_model_)); 162 languages_menu_.reset(new views::Menu2(&languages_menu_model_));
154 languages_menu_->RunMenuAt(pt, views::Menu2::ALIGN_TOPRIGHT); 163 languages_menu_->RunMenuAt(pt, views::Menu2::ALIGN_TOPRIGHT);
155 } else if (source == options_menu_button_) { 164 } else if (source == options_menu_button_) {
156 if (!options_menu_.get()) 165 if (!options_menu_.get())
157 options_menu_.reset(new views::Menu2(&options_menu_model_)); 166 options_menu_.reset(new views::Menu2(&options_menu_model_));
158 options_menu_->RunMenuAt(pt, views::Menu2::ALIGN_TOPRIGHT); 167 options_menu_->RunMenuAt(pt, views::Menu2::ALIGN_TOPRIGHT);
159 } else { 168 } else {
160 NOTREACHED(); 169 NOTREACHED();
161 } 170 }
162 } 171 }
163 172
164 void BeforeTranslateInfoBar::UpdateOriginalButtonText() { 173 void BeforeTranslateInfoBar::UpdateOriginalButtonText() {
174 // TODO(pkasting): Can this be reached during closing? If not we can
175 // DCHECK(delegate()) instead.
176 if (!delegate())
177 return;
178
165 string16 language = GetDelegate()->GetLanguageDisplayableNameAt( 179 string16 language = GetDelegate()->GetLanguageDisplayableNameAt(
166 GetDelegate()->original_language_index()); 180 GetDelegate()->original_language_index());
167 language_menu_button_->SetText(UTF16ToWideHack(language)); 181 language_menu_button_->SetText(UTF16ToWideHack(language));
168 // The following line is necessary for the preferred size to be recomputed. 182 // The following line is necessary for the preferred size to be recomputed.
169 language_menu_button_->ClearMaxTextSize(); 183 language_menu_button_->ClearMaxTextSize();
170 // The button may have to grow to show the new text. 184 // The button may have to grow to show the new text.
171 Layout(); 185 Layout();
172 SchedulePaint(); 186 SchedulePaint();
173 } 187 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698