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/label_button.h" | 11 #include "ui/views/controls/button/label_button.h" |
12 #include "ui/views/controls/button/menu_button.h" | 12 #include "ui/views/controls/button/menu_button.h" |
13 #include "ui/views/controls/label.h" | 13 #include "ui/views/controls/label.h" |
14 #include "ui/views/controls/menu/menu_item_view.h" | 14 #include "ui/views/controls/menu/menu_item_view.h" |
15 | 15 |
16 AfterTranslateInfoBar::AfterTranslateInfoBar( | 16 AfterTranslateInfoBar::AfterTranslateInfoBar( |
17 InfoBarService* owner, | 17 InfoBarService* owner, |
18 TranslateInfoBarDelegate* delegate) | 18 TranslateInfoBarDelegate* delegate) |
19 : TranslateInfoBarBase(owner, delegate), | 19 : TranslateInfoBarBase(owner, delegate), |
20 label_1_(NULL), | 20 label_1_(NULL), |
21 label_2_(NULL), | 21 label_2_(NULL), |
22 label_3_(NULL), | 22 label_3_(NULL), |
23 original_language_menu_button_(NULL), | 23 original_language_menu_button_(NULL), |
24 target_language_menu_button_(NULL), | 24 target_language_menu_button_(NULL), |
25 revert_button_(NULL), | 25 revert_button_(NULL), |
26 options_menu_button_(NULL), | 26 options_menu_button_(NULL), |
27 options_menu_model_(delegate), | 27 options_menu_model_(delegate), |
28 swapped_language_buttons_(false) { | 28 swapped_language_buttons_(false) { |
29 translate_with_auto_ = delegate->original_language_index() == | |
30 TranslateInfoBarDelegate::kNoIndex; | |
Peter Kasting
2013/05/22 23:30:00
Nit: Break after first '=' instead
Takashi Toyoshima
2013/05/23 14:13:27
Done.
| |
29 } | 31 } |
30 | 32 |
31 AfterTranslateInfoBar::~AfterTranslateInfoBar() { | 33 AfterTranslateInfoBar::~AfterTranslateInfoBar() { |
32 } | 34 } |
33 | 35 |
34 void AfterTranslateInfoBar::Layout() { | 36 void AfterTranslateInfoBar::Layout() { |
35 TranslateInfoBarBase::Layout(); | 37 TranslateInfoBarBase::Layout(); |
36 | 38 |
37 int available_width = std::max(0, EndX() - StartX() - ContentMinimumWidth()); | 39 int available_width = std::max(0, EndX() - StartX() - ContentMinimumWidth()); |
38 gfx::Size label_1_size = label_1_->GetPreferredSize(); | 40 gfx::Size label_1_size = label_1_->GetPreferredSize(); |
39 label_1_->SetBounds(StartX(), OffsetY(label_1_size), | 41 label_1_->SetBounds(StartX(), OffsetY(label_1_size), |
40 std::min(label_1_size.width(), available_width), label_1_size.height()); | 42 std::min(label_1_size.width(), available_width), label_1_size.height()); |
41 available_width = std::max(0, available_width - label_1_size.width()); | 43 available_width = std::max(0, available_width - label_1_size.width()); |
42 | 44 |
43 views::MenuButton* first_button = original_language_menu_button_; | 45 views::MenuButton* first_button = original_language_menu_button_; |
44 views::MenuButton* second_button = target_language_menu_button_; | 46 views::MenuButton* second_button = target_language_menu_button_; |
45 if (swapped_language_buttons_) | 47 if (swapped_language_buttons_ || translate_with_auto_) |
46 std::swap(first_button, second_button); | 48 std::swap(first_button, second_button); |
47 gfx::Size first_button_size = first_button->GetPreferredSize(); | 49 gfx::Size first_button_size = first_button->GetPreferredSize(); |
48 first_button->SetBounds(label_1_->bounds().right() + kButtonInLabelSpacing, | 50 first_button->SetBounds(label_1_->bounds().right() + kButtonInLabelSpacing, |
49 OffsetY(first_button_size), first_button_size.width(), | 51 OffsetY(first_button_size), first_button_size.width(), |
50 first_button_size.height()); | 52 first_button_size.height()); |
51 | 53 |
52 gfx::Size label_2_size = label_2_->GetPreferredSize(); | 54 gfx::Size label_2_size = label_2_->GetPreferredSize(); |
53 label_2_->SetBounds(first_button->bounds().right() + kButtonInLabelSpacing, | 55 label_2_->SetBounds(first_button->bounds().right() + kButtonInLabelSpacing, |
54 OffsetY(label_2_size), std::min(label_2_size.width(), available_width), | 56 OffsetY(label_2_size), std::min(label_2_size.width(), available_width), |
55 label_2_size.height()); | 57 label_2_size.height()); |
56 available_width = std::max(0, available_width - label_2_size.width()); | 58 available_width = std::max(0, available_width - label_2_size.width()); |
57 | 59 |
58 gfx::Size second_button_size = second_button->GetPreferredSize(); | 60 int last_right_bounds = label_2_->bounds().right(); |
59 second_button->SetBounds(label_2_->bounds().right() + kButtonInLabelSpacing, | 61 if (!translate_with_auto_) { |
60 OffsetY(second_button_size), second_button_size.width(), | 62 gfx::Size second_button_size = second_button->GetPreferredSize(); |
61 second_button_size.height()); | 63 second_button->SetBounds(label_2_->bounds().right() + kButtonInLabelSpacing, |
64 OffsetY(second_button_size), second_button_size.width(), | |
65 second_button_size.height()); | |
62 | 66 |
63 gfx::Size label_3_size = label_3_->GetPreferredSize(); | 67 gfx::Size label_3_size = label_3_->GetPreferredSize(); |
64 label_3_->SetBounds(second_button->bounds().right() + kButtonInLabelSpacing, | 68 label_3_->SetBounds(second_button->bounds().right() + kButtonInLabelSpacing, |
65 OffsetY(label_3_size), std::min(label_3_size.width(), available_width), | 69 OffsetY(label_3_size), std::min(label_3_size.width(), available_width), |
66 label_3_size.height()); | 70 label_3_size.height()); |
71 last_right_bounds = label_3_->bounds().right(); | |
72 } | |
67 | 73 |
68 gfx::Size revert_button_size = revert_button_->GetPreferredSize(); | 74 gfx::Size revert_button_size = revert_button_->GetPreferredSize(); |
69 revert_button_->SetBounds(label_3_->bounds().right() + kButtonInLabelSpacing, | 75 revert_button_->SetBounds(last_right_bounds + kButtonInLabelSpacing, |
Peter Kasting
2013/05/22 23:30:00
Nit: You can omit the temporary by doing this:
Takashi Toyoshima
2013/05/23 14:13:27
Done.
| |
70 OffsetY(revert_button_size), revert_button_size.width(), | 76 OffsetY(revert_button_size), revert_button_size.width(), |
71 revert_button_size.height()); | 77 revert_button_size.height()); |
72 | 78 |
73 gfx::Size options_size = options_menu_button_->GetPreferredSize(); | 79 gfx::Size options_size = options_menu_button_->GetPreferredSize(); |
74 options_menu_button_->SetBounds(EndX() - options_size.width(), | 80 options_menu_button_->SetBounds(EndX() - options_size.width(), |
75 OffsetY(options_size), options_size.width(), options_size.height()); | 81 OffsetY(options_size), options_size.width(), options_size.height()); |
76 } | 82 } |
77 | 83 |
78 void AfterTranslateInfoBar::ViewHierarchyChanged( | 84 void AfterTranslateInfoBar::ViewHierarchyChanged( |
79 const ViewHierarchyChangedDetails& details) { | 85 const ViewHierarchyChangedDetails& details) { |
80 if (!details.is_add || (details.child != this) || (label_1_ != NULL)) { | 86 if (!details.is_add || (details.child != this) || (label_1_ != NULL)) { |
81 TranslateInfoBarBase::ViewHierarchyChanged(details); | 87 TranslateInfoBarBase::ViewHierarchyChanged(details); |
82 return; | 88 return; |
83 } | 89 } |
84 | 90 |
85 std::vector<string16> strings; | 91 std::vector<string16> strings; |
86 TranslateInfoBarDelegate* delegate = GetDelegate(); | 92 if (translate_with_auto_) { |
87 delegate->GetAfterTranslateStrings(&strings, &swapped_language_buttons_); | 93 TranslateInfoBarDelegate::GetAfterTranslateWithAutoStrings(&strings); |
Peter Kasting
2013/05/22 23:30:00
You didn't include these changes in this CL.
I su
Takashi Toyoshima
2013/05/23 14:13:27
Done.
| |
88 DCHECK_EQ(3U, strings.size()); | 94 DCHECK_EQ(2U, strings.size()); |
95 } else { | |
96 TranslateInfoBarDelegate::GetAfterTranslateStrings( | |
97 &strings, &swapped_language_buttons_); | |
98 DCHECK_EQ(3U, strings.size()); | |
99 } | |
89 | 100 |
90 label_1_ = CreateLabel(strings[0]); | 101 label_1_ = CreateLabel(strings[0]); |
91 AddChildView(label_1_); | 102 AddChildView(label_1_); |
92 | 103 |
104 TranslateInfoBarDelegate* delegate = GetDelegate(); | |
93 original_language_menu_button_ = CreateMenuButton(string16(), this); | 105 original_language_menu_button_ = CreateMenuButton(string16(), this); |
94 original_language_menu_model_.reset(new TranslateLanguageMenuModel( | 106 original_language_menu_model_.reset(new TranslateLanguageMenuModel( |
95 TranslateLanguageMenuModel::ORIGINAL, delegate, this, | 107 TranslateLanguageMenuModel::ORIGINAL, delegate, this, |
96 original_language_menu_button_, true)); | 108 original_language_menu_button_, true)); |
97 target_language_menu_button_ = CreateMenuButton(string16(), this); | 109 target_language_menu_button_ = CreateMenuButton(string16(), this); |
98 target_language_menu_model_.reset(new TranslateLanguageMenuModel( | 110 target_language_menu_model_.reset(new TranslateLanguageMenuModel( |
99 TranslateLanguageMenuModel::TARGET, delegate, this, | 111 TranslateLanguageMenuModel::TARGET, delegate, this, |
100 target_language_menu_button_, true)); | 112 target_language_menu_button_, true)); |
101 AddChildView(swapped_language_buttons_ ? | 113 AddChildView(swapped_language_buttons_ || translate_with_auto_ ? |
Peter Kasting
2013/05/22 23:30:00
Nit: Put parens around the initial ||'d part.
Takashi Toyoshima
2013/05/23 14:13:27
Done.
| |
102 target_language_menu_button_ : original_language_menu_button_); | 114 target_language_menu_button_ : original_language_menu_button_); |
103 | 115 |
104 label_2_ = CreateLabel(strings[1]); | 116 label_2_ = CreateLabel(strings[1]); |
105 AddChildView(label_2_); | 117 AddChildView(label_2_); |
106 | 118 |
107 AddChildView(swapped_language_buttons_ ? | 119 if (!translate_with_auto_) { |
108 original_language_menu_button_ : target_language_menu_button_); | 120 AddChildView(swapped_language_buttons_ ? |
121 original_language_menu_button_ : target_language_menu_button_); | |
109 | 122 |
110 label_3_ = CreateLabel(strings[2]); | 123 label_3_ = CreateLabel(strings[2]); |
111 AddChildView(label_3_); | 124 AddChildView(label_3_); |
125 } | |
112 | 126 |
113 revert_button_ = CreateLabelButton(this, | 127 revert_button_ = CreateLabelButton(this, |
114 l10n_util::GetStringUTF16(IDS_TRANSLATE_INFOBAR_REVERT), false); | 128 l10n_util::GetStringUTF16(IDS_TRANSLATE_INFOBAR_REVERT), false); |
115 AddChildView(revert_button_); | 129 AddChildView(revert_button_); |
116 | 130 |
117 options_menu_button_ = CreateMenuButton( | 131 options_menu_button_ = CreateMenuButton( |
118 l10n_util::GetStringUTF16(IDS_TRANSLATE_INFOBAR_OPTIONS), this); | 132 l10n_util::GetStringUTF16(IDS_TRANSLATE_INFOBAR_OPTIONS), this); |
119 AddChildView(options_menu_button_); | 133 AddChildView(options_menu_button_); |
120 | 134 |
121 // This must happen after adding all other children so InfoBarView can ensure | 135 // This must happen after adding all other children so InfoBarView can ensure |
122 // the close button is the last child. | 136 // the close button is the last child. |
123 TranslateInfoBarBase::ViewHierarchyChanged(details); | 137 TranslateInfoBarBase::ViewHierarchyChanged(details); |
124 | 138 |
125 // These must happen after adding all children because they trigger layout, | 139 // These must happen after adding all children because they trigger layout, |
126 // which assumes that particular children (e.g. the close button) have already | 140 // which assumes that particular children (e.g. the close button) have already |
127 // been added. | 141 // been added. |
128 UpdateLanguageButtonText(original_language_menu_button_, | 142 if (!translate_with_auto_) { |
129 delegate->language_name_at(delegate->original_language_index())); | 143 UpdateLanguageButtonText(original_language_menu_button_, |
144 delegate->language_name_at(delegate->original_language_index())); | |
145 } | |
130 UpdateLanguageButtonText(target_language_menu_button_, | 146 UpdateLanguageButtonText(target_language_menu_button_, |
131 delegate->language_name_at(delegate->target_language_index())); | 147 delegate->language_name_at(delegate->target_language_index())); |
132 } | 148 } |
133 | 149 |
134 void AfterTranslateInfoBar::ButtonPressed(views::Button* sender, | 150 void AfterTranslateInfoBar::ButtonPressed(views::Button* sender, |
135 const ui::Event& event) { | 151 const ui::Event& event) { |
136 if (!owner()) | 152 if (!owner()) |
137 return; // We're closing; don't call anything, it might access the owner. | 153 return; // We're closing; don't call anything, it might access the owner. |
138 if (sender == revert_button_) | 154 if (sender == revert_button_) |
139 GetDelegate()->RevertTranslation(); | 155 GetDelegate()->RevertTranslation(); |
(...skipping 22 matching lines...) Expand all Loading... | |
162 original_language_menu_button_, views::MenuItemView::TOPLEFT); | 178 original_language_menu_button_, views::MenuItemView::TOPLEFT); |
163 } else if (source == target_language_menu_button_) { | 179 } else if (source == target_language_menu_button_) { |
164 RunMenuAt(target_language_menu_model_.get(), target_language_menu_button_, | 180 RunMenuAt(target_language_menu_model_.get(), target_language_menu_button_, |
165 views::MenuItemView::TOPLEFT); | 181 views::MenuItemView::TOPLEFT); |
166 } else { | 182 } else { |
167 DCHECK_EQ(options_menu_button_, source); | 183 DCHECK_EQ(options_menu_button_, source); |
168 RunMenuAt(&options_menu_model_, options_menu_button_, | 184 RunMenuAt(&options_menu_model_, options_menu_button_, |
169 views::MenuItemView::TOPRIGHT); | 185 views::MenuItemView::TOPRIGHT); |
170 } | 186 } |
171 } | 187 } |
OLD | NEW |