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

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

Issue 2602003: Refactored the translate infobars. (Closed) Base URL: http://src.chromium.org/git/chromium.git
Patch Set: Synced Created 10 years, 6 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
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "chrome/browser/views/infobars/after_translate_infobar.h"
6
7 #include "app/l10n_util.h"
8 #include "app/resource_bundle.h"
9 #include "base/utf_string_conversions.h"
10 #include "chrome/browser/translate/options_menu_model.h"
11 #include "chrome/browser/translate/translate_infobar_delegate2.h"
12 #include "chrome/browser/views/infobars/infobar_button_border.h"
13 #include "chrome/browser/views/infobars/infobar_text_button.h"
14 #include "grit/app_resources.h"
15 #include "grit/generated_resources.h"
16 #include "views/controls/button/menu_button.h"
17 #include "views/controls/button/text_button.h"
18 #include "views/controls/image_view.h"
19 #include "views/controls/label.h"
20 #include "views/controls/menu/menu_2.h"
21
22 AfterTranslateInfoBar::AfterTranslateInfoBar(
23 TranslateInfoBarDelegate2* delegate)
24 : TranslateInfoBarBase(delegate),
25 original_language_menu_model_(delegate, LanguagesMenuModel2::ORIGINAL),
26 target_language_menu_model_(delegate, LanguagesMenuModel2::TARGET),
27 options_menu_model_(delegate),
28 swapped_language_buttons_(false) {
29 std::vector<string16> strings;
30 TranslateInfoBarDelegate2::GetAfterTranslateStrings(
31 &strings, &swapped_language_buttons_);
32 DCHECK(strings.size() == 3U);
33
34 label_1_ = CreateLabel(strings[0]);
35 AddChildView(label_1_);
36
37 label_2_ = CreateLabel(strings[1]);
38 AddChildView(label_2_);
39
40 label_3_ = CreateLabel(strings[2]);
41 AddChildView(label_3_);
42
43 original_language_menu_button_ = CreateMenuButton(string16(), true, this);
44 AddChildView(original_language_menu_button_);
45
46 target_language_menu_button_ = CreateMenuButton(string16(), true, this);
47 AddChildView(target_language_menu_button_);
48
49 options_menu_button_ =
50 CreateMenuButton(l10n_util::GetStringUTF16(IDS_TRANSLATE_INFOBAR_OPTIONS),
51 false, this);
52 AddChildView(options_menu_button_);
53
54 revert_button_ = InfoBarTextButton::Create(this,
55 l10n_util::GetStringUTF16(IDS_TRANSLATE_INFOBAR_REVERT));
56 AddChildView(revert_button_);
57
58 UpdateLanguageButtonText(LanguagesMenuModel2::ORIGINAL);
59 UpdateLanguageButtonText(LanguagesMenuModel2::TARGET);
60 }
61
62 AfterTranslateInfoBar::~AfterTranslateInfoBar() {
63 }
64
65 // Overridden from views::View:
66 void AfterTranslateInfoBar::Layout() {
67 // Layout the icon and close button.
68 TranslateInfoBarBase::Layout();
69
70 // Layout the options menu button on right of bar.
71 int available_width = InfoBar::GetAvailableWidth();
72 gfx::Size pref_size = options_menu_button_->GetPreferredSize();
73 options_menu_button_->SetBounds(available_width - pref_size.width(),
74 OffsetY(this, pref_size), pref_size.width(), pref_size.height());
75
76 views::MenuButton* left_button = swapped_language_buttons_ ?
77 target_language_menu_button_ : original_language_menu_button_;
78 views::MenuButton* right_button = swapped_language_buttons_ ?
79 original_language_menu_button_ : target_language_menu_button_;
80
81 pref_size = label_1_->GetPreferredSize();
82 label_1_->SetBounds(icon_->bounds().right() + InfoBar::kIconLabelSpacing,
83 InfoBar::OffsetY(this, pref_size), pref_size.width(), pref_size.height());
84
85 pref_size = left_button->GetPreferredSize();
86 left_button->SetBounds(label_1_->bounds().right() +
87 InfoBar::kButtonInLabelSpacing, OffsetY(this, pref_size),
88 pref_size.width(), pref_size.height());
89
90 pref_size = label_2_->GetPreferredSize();
91 label_2_->SetBounds(left_button->bounds().right() +
92 InfoBar::kButtonInLabelSpacing, InfoBar::OffsetY(this, pref_size),
93 pref_size.width(), pref_size.height());
94
95 pref_size = right_button->GetPreferredSize();
96 right_button->SetBounds(label_2_->bounds().right() +
97 InfoBar::kButtonInLabelSpacing, OffsetY(this, pref_size),
98 pref_size.width(), pref_size.height());
99
100 pref_size = label_3_->GetPreferredSize();
101 label_3_->SetBounds(right_button->bounds().right() +
102 InfoBar::kButtonInLabelSpacing, InfoBar::OffsetY(this, pref_size),
103 pref_size.width(), pref_size.height());
104
105 pref_size = revert_button_->GetPreferredSize();
106 revert_button_->SetBounds(label_3_->bounds().right() +
107 InfoBar::kButtonInLabelSpacing, InfoBar::OffsetY(this, pref_size),
108 pref_size.width(), pref_size.height());
109 }
110
111 void AfterTranslateInfoBar::OriginalLanguageChanged() {
112 UpdateLanguageButtonText(LanguagesMenuModel2::ORIGINAL);
113 }
114
115 void AfterTranslateInfoBar::TargetLanguageChanged() {
116 UpdateLanguageButtonText(LanguagesMenuModel2::TARGET);
117 }
118
119 void AfterTranslateInfoBar::ButtonPressed(views::Button* sender,
120 const views::Event& event) {
121 if (sender == revert_button_) {
122 GetDelegate()->RevertTranslation();
123 return;
124 }
125 TranslateInfoBarBase::ButtonPressed(sender, event);
126 }
127
128 void AfterTranslateInfoBar::RunMenu(views::View* source,
129 const gfx::Point& pt) {
130 if (source == original_language_menu_button_) {
131 if (!original_language_menu_.get()) {
132 original_language_menu_.reset(
133 new views::Menu2(&original_language_menu_model_));
134 }
135 original_language_menu_->RunMenuAt(pt, views::Menu2::ALIGN_TOPRIGHT);
136 } else if (source == target_language_menu_button_) {
137 if (!target_language_menu_.get()) {
138 target_language_menu_.reset(
139 new views::Menu2(&target_language_menu_model_));
140 }
141 target_language_menu_->RunMenuAt(pt, views::Menu2::ALIGN_TOPRIGHT);
142 } else if (source == options_menu_button_) {
143 if (!options_menu_.get())
144 options_menu_.reset(new views::Menu2(&options_menu_model_));
145 options_menu_->RunMenuAt(pt, views::Menu2::ALIGN_TOPRIGHT);
146 } else {
147 NOTREACHED();
148 }
149 }
150
151 void AfterTranslateInfoBar::UpdateLanguageButtonText(
152 LanguagesMenuModel2::LanguageType language_type) {
153 int language_index;
154 views::MenuButton* language_button;
155 if (language_type == LanguagesMenuModel2::ORIGINAL) {
156 language_index = GetDelegate()->original_language_index();
157 language_button = original_language_menu_button_;
158 } else {
159 language_index = GetDelegate()->target_language_index();
160 language_button = target_language_menu_button_;
161 }
162 string16 language =
163 GetDelegate()->GetLanguageDisplayableNameAt(language_index);
164 language_button->SetText(UTF16ToWideHack(language));
165 // The following line is necessary for the preferred size to be recomputed.
166 language_button->ClearMaxTextSize();
167 // The button may have to grow to show the new text.
168 Layout();
169 SchedulePaint();
170 }
OLDNEW
« no previous file with comments | « chrome/browser/views/infobars/after_translate_infobar.h ('k') | chrome/browser/views/infobars/before_translate_infobar.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698