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

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

Issue 15376008: Translate (Win): add after infobar UI for server side language detection (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@tr_menu_enable
Patch Set: fix crash bug Created 7 years, 7 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
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698