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

Side by Side Diff: chrome/browser/ui/views/autofill/autofill_dialog_views.cc

Issue 13625002: Change the behavior of the [X] Save details to Wallet checkbox notification to: (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 7 years, 8 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 | Annotate | Revision Log
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/autofill/autofill_dialog_views.h" 5 #include "chrome/browser/ui/views/autofill/autofill_dialog_views.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/utf_string_conversions.h" 10 #include "base/utf_string_conversions.h"
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after
226 new views::BoxLayout(views::BoxLayout::kVertical, 0, 0, 0); 226 new views::BoxLayout(views::BoxLayout::kVertical, 0, 0, 0);
227 SetLayoutManager(box_layout); 227 SetLayoutManager(box_layout);
228 } 228 }
229 229
230 AutofillDialogViews::NotificationArea::~NotificationArea() {} 230 AutofillDialogViews::NotificationArea::~NotificationArea() {}
231 231
232 void AutofillDialogViews::NotificationArea::SetNotifications( 232 void AutofillDialogViews::NotificationArea::SetNotifications(
233 const std::vector<DialogNotification>& notifications) { 233 const std::vector<DialogNotification>& notifications) {
234 notifications_ = notifications; 234 notifications_ = notifications;
235 235
236 // Default checkbox to checked. Preserve checkbox state if it already exists.
237 bool checkbox_state = checkbox_ ? checkbox_->checked() : true;
238 RemoveAllChildViews(true); 236 RemoveAllChildViews(true);
239 checkbox_ = NULL; 237 checkbox_ = NULL;
240 238
241 if (notifications_.empty()) 239 if (notifications_.empty())
242 return; 240 return;
243 241
244 for (size_t i = 0; i < notifications_.size(); ++i) { 242 for (size_t i = 0; i < notifications_.size(); ++i) {
245 const DialogNotification& notification = notifications_[i]; 243 const DialogNotification& notification = notifications_[i];
246 244
247 scoped_ptr<views::View> view; 245 scoped_ptr<views::View> view;
248 if (notification.HasCheckbox()) { 246 if (notification.HasCheckbox()) {
249 scoped_ptr<views::Checkbox> checkbox(new views::Checkbox(string16())); 247 scoped_ptr<views::Checkbox> checkbox(new views::Checkbox(string16()));
250 checkbox_ = checkbox.get(); 248 checkbox_ = checkbox.get();
251 // We have to do this instead of using set_border() because a border 249 // We have to do this instead of using set_border() because a border
252 // is being used to draw the check square. 250 // is being used to draw the check square.
253 static_cast<views::CheckboxNativeThemeBorder*>(checkbox->border())-> 251 static_cast<views::CheckboxNativeThemeBorder*>(checkbox->border())->
254 SetCustomInsets(gfx::Insets(kNotificationPadding, 252 SetCustomInsets(gfx::Insets(kNotificationPadding,
255 kNotificationPadding, 253 kNotificationPadding,
256 kNotificationPadding, 254 kNotificationPadding,
257 kNotificationPadding)); 255 kNotificationPadding));
258 checkbox->SetChecked(checkbox_state);
259 checkbox->SetText(notification.display_text()); 256 checkbox->SetText(notification.display_text());
260 checkbox->SetMultiLine(true); 257 checkbox->SetMultiLine(true);
261 checkbox->set_alignment(views::TextButtonBase::ALIGN_LEFT); 258 checkbox->set_alignment(views::TextButtonBase::ALIGN_LEFT);
262 checkbox->SetEnabledColor(notification.GetTextColor()); 259 checkbox->SetEnabledColor(notification.GetTextColor());
263 checkbox->SetHoverColor(notification.GetTextColor()); 260 checkbox->SetHoverColor(notification.GetTextColor());
264 view.reset(checkbox.release()); 261 view.reset(checkbox.release());
265 } else { 262 } else {
266 scoped_ptr<views::Label> label(new views::Label()); 263 scoped_ptr<views::Label> label(new views::Label());
267 label->SetText(notification.display_text()); 264 label->SetText(notification.display_text());
268 label->SetMultiLine(true); 265 label->SetMultiLine(true);
269 label->SetHorizontalAlignment(gfx::ALIGN_LEFT); 266 label->SetHorizontalAlignment(gfx::ALIGN_LEFT);
270 label->SetAutoColorReadabilityEnabled(false); 267 label->SetAutoColorReadabilityEnabled(false);
271 label->SetEnabledColor(notification.GetTextColor()); 268 label->SetEnabledColor(notification.GetTextColor());
272 label->set_border(views::Border::CreateSolidBorder( 269 label->set_border(views::Border::CreateSolidBorder(
273 kNotificationPadding, notification.GetBackgroundColor())); 270 kNotificationPadding, notification.GetBackgroundColor()));
274 view.reset(label.release()); 271 view.reset(label.release());
275 } 272 }
276 273
277 view->set_background(views::Background::CreateSolidBackground( 274 view->set_background(views::Background::CreateSolidBackground(
278 notification.GetBackgroundColor())); 275 notification.GetBackgroundColor()));
279 AddChildView(view.release()); 276 AddChildView(view.release());
280 } 277 }
281 278
282 PreferredSizeChanged(); 279 PreferredSizeChanged();
283 } 280 }
284 281
285 bool AutofillDialogViews::NotificationArea::CheckboxIsChecked() const {
286 return checkbox_ && checkbox_->checked();
287 }
288
289 std::string AutofillDialogViews::NotificationArea::GetClassName() const { 282 std::string AutofillDialogViews::NotificationArea::GetClassName() const {
290 return kNotificationAreaClassName; 283 return kNotificationAreaClassName;
291 } 284 }
292 285
293 void AutofillDialogViews::NotificationArea::OnPaint(gfx::Canvas* canvas) { 286 void AutofillDialogViews::NotificationArea::OnPaint(gfx::Canvas* canvas) {
294 views::View::OnPaint(canvas); 287 views::View::OnPaint(canvas);
295 288
296 if (HasArrow()) { 289 if (HasArrow()) {
297 const int arrow_half_width = kArrowWidth / 2.0f; 290 const int arrow_half_width = kArrowWidth / 2.0f;
298 const int anchor_half_width = 291 const int anchor_half_width =
(...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after
605 details_container_->SetVisible(!(controller_->AutocheckoutIsRunning() || 598 details_container_->SetVisible(!(controller_->AutocheckoutIsRunning() ||
606 controller_->HadAutocheckoutError())); 599 controller_->HadAutocheckoutError()));
607 600
608 GetDialogClientView()->UpdateDialogButtons(); 601 GetDialogClientView()->UpdateDialogButtons();
609 ContentsPreferredSizeChanged(); 602 ContentsPreferredSizeChanged();
610 } 603 }
611 604
612 void AutofillDialogViews::UpdateNotificationArea() { 605 void AutofillDialogViews::UpdateNotificationArea() {
613 DCHECK(notification_area_); 606 DCHECK(notification_area_);
614 notification_area_->SetNotifications(controller_->CurrentNotifications()); 607 notification_area_->SetNotifications(controller_->CurrentNotifications());
608
609 views::Checkbox* checkbox = notification_area_->checkbox();
610 if (checkbox) {
611 checkbox->SetChecked(!controller_->GetPayWithoutWallet());
Dan Beam 2013/04/05 02:45:57 an alternative to this would be to use prefs direc
Evan Stade 2013/04/05 23:38:23 make initial checkmark state part of the notificat
Dan Beam 2013/04/06 04:49:50 Done.
612 checkbox->set_listener(this);
Dan Beam 2013/04/05 02:45:57 ^ an alternative to this would be to have the noti
Evan Stade 2013/04/05 23:38:23 pass controller_ in and have the NotificationArea
Dan Beam 2013/04/06 04:49:50 Done.
613 }
614
615 ContentsPreferredSizeChanged(); 615 ContentsPreferredSizeChanged();
616 } 616 }
617 617
618 void AutofillDialogViews::UpdateSection(DialogSection section) { 618 void AutofillDialogViews::UpdateSection(DialogSection section) {
619 const DetailInputs& updated_inputs = 619 const DetailInputs& updated_inputs =
620 controller_->RequestedFieldsForSection(section); 620 controller_->RequestedFieldsForSection(section);
621 DetailsGroup* group = GroupForSection(section); 621 DetailsGroup* group = GroupForSection(section);
622 622
623 for (DetailInputs::const_iterator iter = updated_inputs.begin(); 623 for (DetailInputs::const_iterator iter = updated_inputs.begin();
624 iter != updated_inputs.end(); ++iter) { 624 iter != updated_inputs.end(); ++iter) {
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
660 DialogSection billing_section = controller_->SectionIsActive(SECTION_CC) ? 660 DialogSection billing_section = controller_->SectionIsActive(SECTION_CC) ?
661 SECTION_CC : SECTION_CC_BILLING; 661 SECTION_CC : SECTION_CC_BILLING;
662 return GroupForSection(billing_section)->suggested_info-> 662 return GroupForSection(billing_section)->suggested_info->
663 decorated_textfield()->textfield()->text(); 663 decorated_textfield()->textfield()->text();
664 } 664 }
665 665
666 bool AutofillDialogViews::UseBillingForShipping() { 666 bool AutofillDialogViews::UseBillingForShipping() {
667 return use_billing_for_shipping_->checked(); 667 return use_billing_for_shipping_->checked();
668 } 668 }
669 669
670 bool AutofillDialogViews::SaveDetailsInWallet() {
671 return notification_area_->CheckboxIsChecked();
672 }
673
674 bool AutofillDialogViews::SaveDetailsLocally() { 670 bool AutofillDialogViews::SaveDetailsLocally() {
675 return save_in_chrome_checkbox_->checked(); 671 return save_in_chrome_checkbox_->checked();
676 } 672 }
677 673
678 const content::NavigationController* AutofillDialogViews::ShowSignIn() { 674 const content::NavigationController* AutofillDialogViews::ShowSignIn() {
679 // TODO(abodenha) We should be able to use the WebContents of the WebView 675 // TODO(abodenha) We should be able to use the WebContents of the WebView
680 // to navigate instead of LoadInitialURL. Figure out why it doesn't work. 676 // to navigate instead of LoadInitialURL. Figure out why it doesn't work.
681 677
682 account_chooser_->SetSignInLinkEnabled(false); 678 account_chooser_->SetSignInLinkEnabled(false);
683 sign_in_webview_->LoadInitialURL(wallet::GetSignInUrl()); 679 sign_in_webview_->LoadInitialURL(wallet::GetSignInUrl());
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
798 widget, 794 widget,
799 controller_->web_contents()->GetBrowserContext()); 795 controller_->web_contents()->GetBrowserContext());
800 } 796 }
801 797
802 void AutofillDialogViews::ButtonPressed(views::Button* sender, 798 void AutofillDialogViews::ButtonPressed(views::Button* sender,
803 const ui::Event& event) { 799 const ui::Event& event) {
804 if (sender == use_billing_for_shipping_) { 800 if (sender == use_billing_for_shipping_) {
805 UpdateDetailsGroupState(*GroupForSection(SECTION_SHIPPING)); 801 UpdateDetailsGroupState(*GroupForSection(SECTION_SHIPPING));
806 } else if (sender == cancel_sign_in_) { 802 } else if (sender == cancel_sign_in_) {
807 controller_->EndSignInFlow(); 803 controller_->EndSignInFlow();
804 } else if (sender == notification_area_->checkbox()) {
805 controller_->SetPayWithoutWallet(
806 !notification_area_->checkbox()->checked());
808 } else { 807 } else {
809 // TODO(estade): Should the menu be shown on mouse down? 808 // TODO(estade): Should the menu be shown on mouse down?
810 DetailsGroup* group = NULL; 809 DetailsGroup* group = NULL;
811 for (DetailGroupMap::iterator iter = detail_groups_.begin(); 810 for (DetailGroupMap::iterator iter = detail_groups_.begin();
812 iter != detail_groups_.end(); ++iter) { 811 iter != detail_groups_.end(); ++iter) {
813 if (sender == iter->second.suggested_button) { 812 if (sender == iter->second.suggested_button) {
814 group = &iter->second; 813 group = &iter->second;
815 break; 814 break;
816 } 815 }
817 } 816 }
(...skipping 518 matching lines...) Expand 10 before | Expand all | Expand 10 after
1336 AutofillDialogViews::DetailsGroup::DetailsGroup(DialogSection section) 1335 AutofillDialogViews::DetailsGroup::DetailsGroup(DialogSection section)
1337 : section(section), 1336 : section(section),
1338 container(NULL), 1337 container(NULL),
1339 manual_input(NULL), 1338 manual_input(NULL),
1340 suggested_info(NULL), 1339 suggested_info(NULL),
1341 suggested_button(NULL) {} 1340 suggested_button(NULL) {}
1342 1341
1343 AutofillDialogViews::DetailsGroup::~DetailsGroup() {} 1342 AutofillDialogViews::DetailsGroup::~DetailsGroup() {}
1344 1343
1345 } // namespace autofill 1344 } // namespace autofill
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698