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 autodetermined_source_language_ = | |
30 delegate->original_language_index() == TranslateInfoBarDelegate::kNoIndex; | |
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_ || autodetermined_source_language_) |
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 if (!autodetermined_source_language_) { |
59 second_button->SetBounds(label_2_->bounds().right() + kButtonInLabelSpacing, | 61 gfx::Size second_button_size = second_button->GetPreferredSize(); |
60 OffsetY(second_button_size), second_button_size.width(), | 62 second_button->SetBounds(label_2_->bounds().right() + kButtonInLabelSpacing, |
61 second_button_size.height()); | 63 OffsetY(second_button_size), second_button_size.width(), |
64 second_button_size.height()); | |
62 | 65 |
63 gfx::Size label_3_size = label_3_->GetPreferredSize(); | 66 gfx::Size label_3_size = label_3_->GetPreferredSize(); |
64 label_3_->SetBounds(second_button->bounds().right() + kButtonInLabelSpacing, | 67 label_3_->SetBounds(second_button->bounds().right() + kButtonInLabelSpacing, |
65 OffsetY(label_3_size), std::min(label_3_size.width(), available_width), | 68 OffsetY(label_3_size), std::min(label_3_size.width(), available_width), |
66 label_3_size.height()); | 69 label_3_size.height()); |
70 } | |
67 | 71 |
68 gfx::Size revert_button_size = revert_button_->GetPreferredSize(); | 72 gfx::Size revert_button_size = revert_button_->GetPreferredSize(); |
69 revert_button_->SetBounds(label_3_->bounds().right() + kButtonInLabelSpacing, | 73 revert_button_->SetBounds( |
70 OffsetY(revert_button_size), revert_button_size.width(), | 74 (label_3_ ? label_3_ : label_2_)->bounds().right() + |
75 kButtonInLabelSpacing, | |
76 OffsetY(revert_button_size), | |
77 revert_button_size.width(), | |
71 revert_button_size.height()); | 78 revert_button_size.height()); |
72 | 79 |
73 gfx::Size options_size = options_menu_button_->GetPreferredSize(); | 80 gfx::Size options_size = options_menu_button_->GetPreferredSize(); |
74 options_menu_button_->SetBounds(EndX() - options_size.width(), | 81 options_menu_button_->SetBounds(EndX() - options_size.width(), |
75 OffsetY(options_size), options_size.width(), options_size.height()); | 82 OffsetY(options_size), options_size.width(), options_size.height()); |
76 } | 83 } |
77 | 84 |
78 void AfterTranslateInfoBar::ViewHierarchyChanged( | 85 void AfterTranslateInfoBar::ViewHierarchyChanged( |
79 const ViewHierarchyChangedDetails& details) { | 86 const ViewHierarchyChangedDetails& details) { |
80 if (!details.is_add || (details.child != this) || (label_1_ != NULL)) { | 87 if (!details.is_add || (details.child != this) || (label_1_ != NULL)) { |
81 TranslateInfoBarBase::ViewHierarchyChanged(details); | 88 TranslateInfoBarBase::ViewHierarchyChanged(details); |
82 return; | 89 return; |
83 } | 90 } |
84 | 91 |
85 std::vector<string16> strings; | 92 std::vector<string16> strings; |
86 TranslateInfoBarDelegate* delegate = GetDelegate(); | 93 TranslateInfoBarDelegate::GetAfterTranslateStrings( |
87 delegate->GetAfterTranslateStrings(&strings, | 94 &strings, &swapped_language_buttons_, autodetermined_source_language_); |
88 &swapped_language_buttons_, | 95 if (autodetermined_source_language_) |
Peter Kasting
2013/05/24 01:31:16
Nit: Simpler:
DCHECK_EQ(autodetermined_source_l
Takashi Toyoshima
2013/05/27 07:01:08
Done.
| |
89 false); | 96 DCHECK_EQ(2U, strings.size()); |
90 DCHECK_EQ(3U, strings.size()); | 97 else |
98 DCHECK_EQ(3U, strings.size()); | |
91 | 99 |
92 label_1_ = CreateLabel(strings[0]); | 100 label_1_ = CreateLabel(strings[0]); |
93 AddChildView(label_1_); | 101 AddChildView(label_1_); |
94 | 102 |
103 TranslateInfoBarDelegate* delegate = GetDelegate(); | |
95 original_language_menu_button_ = CreateMenuButton(string16(), this); | 104 original_language_menu_button_ = CreateMenuButton(string16(), this); |
96 original_language_menu_model_.reset(new TranslateLanguageMenuModel( | 105 original_language_menu_model_.reset(new TranslateLanguageMenuModel( |
97 TranslateLanguageMenuModel::ORIGINAL, delegate, this, | 106 TranslateLanguageMenuModel::ORIGINAL, delegate, this, |
98 original_language_menu_button_, true)); | 107 original_language_menu_button_, true)); |
99 target_language_menu_button_ = CreateMenuButton(string16(), this); | 108 target_language_menu_button_ = CreateMenuButton(string16(), this); |
100 target_language_menu_model_.reset(new TranslateLanguageMenuModel( | 109 target_language_menu_model_.reset(new TranslateLanguageMenuModel( |
101 TranslateLanguageMenuModel::TARGET, delegate, this, | 110 TranslateLanguageMenuModel::TARGET, delegate, this, |
102 target_language_menu_button_, true)); | 111 target_language_menu_button_, true)); |
103 AddChildView(swapped_language_buttons_ ? | 112 AddChildView((swapped_language_buttons_ || autodetermined_source_language_) ? |
104 target_language_menu_button_ : original_language_menu_button_); | 113 target_language_menu_button_ : original_language_menu_button_); |
105 | 114 |
106 label_2_ = CreateLabel(strings[1]); | 115 label_2_ = CreateLabel(strings[1]); |
107 AddChildView(label_2_); | 116 AddChildView(label_2_); |
108 | 117 |
109 AddChildView(swapped_language_buttons_ ? | 118 if (!autodetermined_source_language_) { |
110 original_language_menu_button_ : target_language_menu_button_); | 119 AddChildView(swapped_language_buttons_ ? |
120 original_language_menu_button_ : target_language_menu_button_); | |
111 | 121 |
112 label_3_ = CreateLabel(strings[2]); | 122 label_3_ = CreateLabel(strings[2]); |
113 AddChildView(label_3_); | 123 AddChildView(label_3_); |
124 } | |
114 | 125 |
115 revert_button_ = CreateLabelButton(this, | 126 revert_button_ = CreateLabelButton(this, |
116 l10n_util::GetStringUTF16(IDS_TRANSLATE_INFOBAR_REVERT), false); | 127 l10n_util::GetStringUTF16(IDS_TRANSLATE_INFOBAR_REVERT), false); |
117 AddChildView(revert_button_); | 128 AddChildView(revert_button_); |
118 | 129 |
119 options_menu_button_ = CreateMenuButton( | 130 options_menu_button_ = CreateMenuButton( |
120 l10n_util::GetStringUTF16(IDS_TRANSLATE_INFOBAR_OPTIONS), this); | 131 l10n_util::GetStringUTF16(IDS_TRANSLATE_INFOBAR_OPTIONS), this); |
121 AddChildView(options_menu_button_); | 132 AddChildView(options_menu_button_); |
122 | 133 |
123 // This must happen after adding all other children so InfoBarView can ensure | 134 // This must happen after adding all other children so InfoBarView can ensure |
124 // the close button is the last child. | 135 // the close button is the last child. |
125 TranslateInfoBarBase::ViewHierarchyChanged(details); | 136 TranslateInfoBarBase::ViewHierarchyChanged(details); |
126 | 137 |
127 // These must happen after adding all children because they trigger layout, | 138 // These must happen after adding all children because they trigger layout, |
128 // which assumes that particular children (e.g. the close button) have already | 139 // which assumes that particular children (e.g. the close button) have already |
129 // been added. | 140 // been added. |
130 UpdateLanguageButtonText(original_language_menu_button_, | 141 if (!autodetermined_source_language_) { |
131 delegate->language_name_at(delegate->original_language_index())); | 142 UpdateLanguageButtonText(original_language_menu_button_, |
143 delegate->language_name_at(delegate->original_language_index())); | |
144 } | |
132 UpdateLanguageButtonText(target_language_menu_button_, | 145 UpdateLanguageButtonText(target_language_menu_button_, |
133 delegate->language_name_at(delegate->target_language_index())); | 146 delegate->language_name_at(delegate->target_language_index())); |
134 } | 147 } |
135 | 148 |
136 void AfterTranslateInfoBar::ButtonPressed(views::Button* sender, | 149 void AfterTranslateInfoBar::ButtonPressed(views::Button* sender, |
137 const ui::Event& event) { | 150 const ui::Event& event) { |
138 if (!owner()) | 151 if (!owner()) |
139 return; // We're closing; don't call anything, it might access the owner. | 152 return; // We're closing; don't call anything, it might access the owner. |
140 if (sender == revert_button_) | 153 if (sender == revert_button_) |
141 GetDelegate()->RevertTranslation(); | 154 GetDelegate()->RevertTranslation(); |
(...skipping 22 matching lines...) Expand all Loading... | |
164 original_language_menu_button_, views::MenuItemView::TOPLEFT); | 177 original_language_menu_button_, views::MenuItemView::TOPLEFT); |
165 } else if (source == target_language_menu_button_) { | 178 } else if (source == target_language_menu_button_) { |
166 RunMenuAt(target_language_menu_model_.get(), target_language_menu_button_, | 179 RunMenuAt(target_language_menu_model_.get(), target_language_menu_button_, |
167 views::MenuItemView::TOPLEFT); | 180 views::MenuItemView::TOPLEFT); |
168 } else { | 181 } else { |
169 DCHECK_EQ(options_menu_button_, source); | 182 DCHECK_EQ(options_menu_button_, source); |
170 RunMenuAt(&options_menu_model_, options_menu_button_, | 183 RunMenuAt(&options_menu_model_, options_menu_button_, |
171 views::MenuItemView::TOPRIGHT); | 184 views::MenuItemView::TOPRIGHT); |
172 } | 185 } |
173 } | 186 } |
OLD | NEW |