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/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" |
11 #include "chrome/browser/profiles/profile.h" | 11 #include "chrome/browser/profiles/profile.h" |
12 #include "chrome/browser/ui/autofill/autofill_dialog_controller.h" | 12 #include "chrome/browser/ui/autofill/autofill_dialog_controller.h" |
13 #include "chrome/browser/ui/views/constrained_window_views.h" | 13 #include "chrome/browser/ui/views/constrained_window_views.h" |
14 #include "chrome/browser/ui/web_contents_modal_dialog_manager.h" | 14 #include "chrome/browser/ui/web_contents_modal_dialog_manager.h" |
15 #include "components/autofill/browser/wallet/wallet_service_url.h" | 15 #include "components/autofill/browser/wallet/wallet_service_url.h" |
16 #include "content/public/browser/native_web_keyboard_event.h" | 16 #include "content/public/browser/native_web_keyboard_event.h" |
17 #include "content/public/browser/navigation_controller.h" | 17 #include "content/public/browser/navigation_controller.h" |
18 #include "content/public/browser/web_contents.h" | 18 #include "content/public/browser/web_contents.h" |
19 #include "content/public/browser/web_contents_view.h" | 19 #include "content/public/browser/web_contents_view.h" |
20 #include "grit/theme_resources.h" | 20 #include "grit/theme_resources.h" |
21 #include "grit/ui_resources.h" | 21 #include "grit/ui_resources.h" |
22 #include "third_party/skia/include/core/SkColor.h" | 22 #include "third_party/skia/include/core/SkColor.h" |
23 #include "ui/base/l10n/l10n_util.h" | 23 #include "ui/base/l10n/l10n_util.h" |
24 #include "ui/base/models/combobox_model.h" | 24 #include "ui/base/models/combobox_model.h" |
25 #include "ui/base/models/menu_model.h" | |
25 #include "ui/base/resource/resource_bundle.h" | 26 #include "ui/base/resource/resource_bundle.h" |
26 #include "ui/gfx/canvas.h" | 27 #include "ui/gfx/canvas.h" |
27 #include "ui/views/background.h" | 28 #include "ui/views/background.h" |
28 #include "ui/views/border.h" | 29 #include "ui/views/border.h" |
29 #include "ui/views/controls/button/checkbox.h" | 30 #include "ui/views/controls/button/checkbox.h" |
30 #include "ui/views/controls/button/image_button.h" | 31 #include "ui/views/controls/button/image_button.h" |
31 #include "ui/views/controls/combobox/combobox.h" | 32 #include "ui/views/controls/combobox/combobox.h" |
32 #include "ui/views/controls/image_view.h" | 33 #include "ui/views/controls/image_view.h" |
33 #include "ui/views/controls/label.h" | 34 #include "ui/views/controls/label.h" |
34 #include "ui/views/controls/link.h" | 35 #include "ui/views/controls/link.h" |
(...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
305 arrow_centering_anchor_.get(); | 306 arrow_centering_anchor_.get(); |
306 } | 307 } |
307 | 308 |
308 // AutofillDialogViews::SectionContainer --------------------------------------- | 309 // AutofillDialogViews::SectionContainer --------------------------------------- |
309 | 310 |
310 AutofillDialogViews::SectionContainer::SectionContainer( | 311 AutofillDialogViews::SectionContainer::SectionContainer( |
311 const string16& label, | 312 const string16& label, |
312 views::View* controls, | 313 views::View* controls, |
313 views::Button* proxy_button) | 314 views::Button* proxy_button) |
314 : proxy_button_(proxy_button), | 315 : proxy_button_(proxy_button), |
315 forward_mouse_events_(false) { | 316 forward_mouse_events_(false), |
317 active_(false) { | |
316 set_notify_enter_exit_on_child(true); | 318 set_notify_enter_exit_on_child(true); |
317 | 319 |
318 views::GridLayout* layout = new views::GridLayout(this); | 320 views::GridLayout* layout = new views::GridLayout(this); |
319 SetLayoutManager(layout); | 321 SetLayoutManager(layout); |
320 | 322 |
321 const int kColumnSetId = 0; | 323 const int kColumnSetId = 0; |
322 views::ColumnSet* column_set = layout->AddColumnSet(kColumnSetId); | 324 views::ColumnSet* column_set = layout->AddColumnSet(kColumnSetId); |
323 // TODO(estade): pull out these constants, and figure out better values | 325 // TODO(estade): pull out these constants, and figure out better values |
324 // for them. | 326 // for them. |
325 column_set->AddColumn(views::GridLayout::FILL, | 327 column_set->AddColumn(views::GridLayout::FILL, |
(...skipping 18 matching lines...) Expand all Loading... | |
344 AutofillDialogViews::SectionContainer::~SectionContainer() {} | 346 AutofillDialogViews::SectionContainer::~SectionContainer() {} |
345 | 347 |
346 void AutofillDialogViews::SectionContainer::SetForwardMouseEvents( | 348 void AutofillDialogViews::SectionContainer::SetForwardMouseEvents( |
347 bool forward) { | 349 bool forward) { |
348 forward_mouse_events_ = forward; | 350 forward_mouse_events_ = forward; |
349 if (!forward) | 351 if (!forward) |
350 set_background(NULL); | 352 set_background(NULL); |
351 } | 353 } |
352 | 354 |
353 void AutofillDialogViews::SectionContainer::SetActive(bool active) { | 355 void AutofillDialogViews::SectionContainer::SetActive(bool active) { |
354 if (active == !!background()) | 356 active_ = active && proxy_button_->visible(); |
357 if (active_ == !!background()) | |
355 return; | 358 return; |
356 | 359 |
357 set_background(active ? | 360 set_background(active_ ? |
358 // TODO(estade): use the correct color. | 361 // TODO(estade): use the correct color. |
359 views::Background::CreateSolidBackground(SK_ColorLTGRAY): | 362 views::Background::CreateSolidBackground(SK_ColorLTGRAY): |
360 NULL); | 363 NULL); |
361 SchedulePaint(); | 364 SchedulePaint(); |
362 } | 365 } |
363 | 366 |
367 void AutofillDialogViews::SectionContainer::Refresh() { | |
368 SetActive(active_); | |
369 } | |
370 | |
364 void AutofillDialogViews::SectionContainer::OnMouseMoved( | 371 void AutofillDialogViews::SectionContainer::OnMouseMoved( |
365 const ui::MouseEvent& event) { | 372 const ui::MouseEvent& event) { |
366 if (!forward_mouse_events_) | 373 if (!forward_mouse_events_) |
367 return; | 374 return; |
368 | 375 |
369 SetActive(true); | 376 SetActive(true); |
370 } | 377 } |
371 | 378 |
372 void AutofillDialogViews::SectionContainer::OnMouseEntered( | 379 void AutofillDialogViews::SectionContainer::OnMouseEntered( |
373 const ui::MouseEvent& event) { | 380 const ui::MouseEvent& event) { |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
416 // AutofilDialogViews::SuggestionView ------------------------------------------ | 423 // AutofilDialogViews::SuggestionView ------------------------------------------ |
417 | 424 |
418 AutofillDialogViews::SuggestionView::SuggestionView( | 425 AutofillDialogViews::SuggestionView::SuggestionView( |
419 const string16& edit_label, | 426 const string16& edit_label, |
420 AutofillDialogViews* autofill_dialog) | 427 AutofillDialogViews* autofill_dialog) |
421 : label_(new views::Label()), | 428 : label_(new views::Label()), |
422 label_line_2_(new views::Label()), | 429 label_line_2_(new views::Label()), |
423 icon_(new views::ImageView()), | 430 icon_(new views::ImageView()), |
424 label_container_(new views::View()), | 431 label_container_(new views::View()), |
425 decorated_( | 432 decorated_( |
426 new DecoratedTextfield(string16(), string16(), autofill_dialog)) { | 433 new DecoratedTextfield(string16(), string16(), autofill_dialog)), |
434 edit_link_(new views::Link(edit_label)) { | |
427 // Label and icon. | 435 // Label and icon. |
428 label_container_->SetLayoutManager( | 436 label_container_->SetLayoutManager( |
429 new views::BoxLayout(views::BoxLayout::kHorizontal, 0, 0, | 437 new views::BoxLayout(views::BoxLayout::kHorizontal, 0, 0, |
430 kAroundTextPadding)); | 438 kAroundTextPadding)); |
431 label_container_->AddChildView(icon_); | 439 label_container_->AddChildView(icon_); |
432 label_container_->AddChildView(label_); | 440 label_container_->AddChildView(label_); |
433 label_container_->AddChildView(decorated_); | 441 label_container_->AddChildView(decorated_); |
434 decorated_->SetVisible(false); | 442 decorated_->SetVisible(false); |
435 // TODO(estade): get the sizing and spacing right on this textfield. | 443 // TODO(estade): get the sizing and spacing right on this textfield. |
436 decorated_->textfield()->set_default_width_in_chars(10); | 444 decorated_->textfield()->set_default_width_in_chars(10); |
437 AddChildView(label_container_); | 445 AddChildView(label_container_); |
438 | 446 |
439 label_line_2_->SetHorizontalAlignment(gfx::ALIGN_LEFT); | 447 label_line_2_->SetHorizontalAlignment(gfx::ALIGN_LEFT); |
440 label_line_2_->SetVisible(false); | 448 label_line_2_->SetVisible(false); |
441 AddChildView(label_line_2_); | 449 AddChildView(label_line_2_); |
442 | 450 |
443 // TODO(estade): The link needs to have a different color when hovered. | 451 // TODO(estade): The link needs to have a different color when hovered. |
444 views::Link* edit_link = new views::Link(edit_label); | 452 edit_link_->set_listener(autofill_dialog); |
445 edit_link->set_listener(autofill_dialog); | 453 edit_link_->SetHorizontalAlignment(gfx::ALIGN_LEFT); |
446 edit_link->SetHorizontalAlignment(gfx::ALIGN_LEFT); | 454 edit_link_->SetUnderline(false); |
447 edit_link->SetUnderline(false); | |
448 | 455 |
449 // This container prevents the edit link from being horizontally stretched. | 456 // This container prevents the edit link from being horizontally stretched. |
450 views::View* link_container = new views::View(); | 457 views::View* link_container = new views::View(); |
451 link_container->SetLayoutManager( | 458 link_container->SetLayoutManager( |
452 new views::BoxLayout(views::BoxLayout::kHorizontal, 0, 0, 0)); | 459 new views::BoxLayout(views::BoxLayout::kHorizontal, 0, 0, 0)); |
453 link_container->AddChildView(edit_link); | 460 link_container->AddChildView(edit_link_); |
454 AddChildView(link_container); | 461 AddChildView(link_container); |
455 | 462 |
456 SetLayoutManager(new views::BoxLayout(views::BoxLayout::kVertical, 0, 0, 0)); | 463 SetLayoutManager(new views::BoxLayout(views::BoxLayout::kVertical, 0, 0, 0)); |
457 } | 464 } |
458 | 465 |
459 AutofillDialogViews::SuggestionView::~SuggestionView() {} | 466 AutofillDialogViews::SuggestionView::~SuggestionView() {} |
460 | 467 |
468 void AutofillDialogViews::SuggestionView::SetEditable(bool editable) { | |
469 edit_link_->SetVisible(editable); | |
470 } | |
471 | |
461 void AutofillDialogViews::SuggestionView::SetSuggestionText( | 472 void AutofillDialogViews::SuggestionView::SetSuggestionText( |
462 const string16& text) { | 473 const string16& text) { |
463 // TODO(estade): does this localize well? | 474 // TODO(estade): does this localize well? |
464 string16 line_return(ASCIIToUTF16("\n")); | 475 string16 line_return(ASCIIToUTF16("\n")); |
465 size_t position = text.find(line_return); | 476 size_t position = text.find(line_return); |
466 if (position == string16::npos) { | 477 if (position == string16::npos) { |
467 label_->SetText(text); | 478 label_->SetText(text); |
468 label_line_2_->SetVisible(false); | 479 label_line_2_->SetVisible(false); |
469 } else { | 480 } else { |
470 label_->SetText(text.substr(0, position)); | 481 label_->SetText(text.substr(0, position)); |
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
620 output->insert(std::make_pair(it->first, it->second->textfield()->text())); | 631 output->insert(std::make_pair(it->first, it->second->textfield()->text())); |
621 } | 632 } |
622 for (ComboboxMap::const_iterator it = group->comboboxes.begin(); | 633 for (ComboboxMap::const_iterator it = group->comboboxes.begin(); |
623 it != group->comboboxes.end(); ++it) { | 634 it != group->comboboxes.end(); ++it) { |
624 output->insert(std::make_pair(it->first, | 635 output->insert(std::make_pair(it->first, |
625 it->second->model()->GetItemAt(it->second->selected_index()))); | 636 it->second->model()->GetItemAt(it->second->selected_index()))); |
626 } | 637 } |
627 } | 638 } |
628 | 639 |
629 string16 AutofillDialogViews::GetCvc() { | 640 string16 AutofillDialogViews::GetCvc() { |
630 return GroupForSection(SECTION_CC)->suggested_info->decorated_textfield()-> | 641 DialogSection billing_section = controller_->SectionIsActive(SECTION_CC) ? |
631 textfield()->text(); | 642 SECTION_CC : SECTION_CC_BILLING; |
643 return GroupForSection(billing_section)->suggested_info-> | |
644 decorated_textfield()->textfield()->text(); | |
632 } | 645 } |
633 | 646 |
634 bool AutofillDialogViews::UseBillingForShipping() { | 647 bool AutofillDialogViews::UseBillingForShipping() { |
635 return use_billing_for_shipping_->checked(); | 648 return use_billing_for_shipping_->checked(); |
636 } | 649 } |
637 | 650 |
638 bool AutofillDialogViews::SaveDetailsInWallet() { | 651 bool AutofillDialogViews::SaveDetailsInWallet() { |
639 return notification_area_->CheckboxIsChecked(); | 652 return notification_area_->CheckboxIsChecked(); |
640 } | 653 } |
641 | 654 |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
734 // TODO(estade): add a view to contain the terms of service. | 747 // TODO(estade): add a view to contain the terms of service. |
735 return NULL; | 748 return NULL; |
736 } | 749 } |
737 | 750 |
738 bool AutofillDialogViews::Cancel() { | 751 bool AutofillDialogViews::Cancel() { |
739 controller_->OnCancel(); | 752 controller_->OnCancel(); |
740 return true; | 753 return true; |
741 } | 754 } |
742 | 755 |
743 bool AutofillDialogViews::Accept() { | 756 bool AutofillDialogViews::Accept() { |
744 if (!ValidateForm()) | 757 if (ValidateForm()) |
745 return false; | 758 controller_->OnAccept(); |
746 | 759 |
747 controller_->OnSubmit(); | 760 // |controller_| decides when to hide the dialog. |
748 | |
749 // Let |controller_| decide when to hide the dialog. | |
750 return false; | 761 return false; |
751 } | 762 } |
752 | 763 |
753 // TODO(wittman): Remove this override once we move to the new style frame view | 764 // TODO(wittman): Remove this override once we move to the new style frame view |
754 // on all dialogs. | 765 // on all dialogs. |
755 views::NonClientFrameView* AutofillDialogViews::CreateNonClientFrameView( | 766 views::NonClientFrameView* AutofillDialogViews::CreateNonClientFrameView( |
756 views::Widget* widget) { | 767 views::Widget* widget) { |
757 return CreateConstrainedStyleNonClientFrameView( | 768 return CreateConstrainedStyleNonClientFrameView( |
758 widget, | 769 widget, |
759 controller_->web_contents()->GetBrowserContext()); | 770 controller_->web_contents()->GetBrowserContext()); |
(...skipping 10 matching lines...) Expand all Loading... | |
770 DetailsGroup* group = NULL; | 781 DetailsGroup* group = NULL; |
771 for (DetailGroupMap::iterator iter = detail_groups_.begin(); | 782 for (DetailGroupMap::iterator iter = detail_groups_.begin(); |
772 iter != detail_groups_.end(); ++iter) { | 783 iter != detail_groups_.end(); ++iter) { |
773 if (sender == iter->second.suggested_button) { | 784 if (sender == iter->second.suggested_button) { |
774 group = &iter->second; | 785 group = &iter->second; |
775 break; | 786 break; |
776 } | 787 } |
777 } | 788 } |
778 DCHECK(group); | 789 DCHECK(group); |
779 | 790 |
791 if (!group->suggested_button->visible()) | |
792 return; | |
793 | |
780 views::MenuModelAdapter adapter( | 794 views::MenuModelAdapter adapter( |
781 controller_->MenuModelForSection(group->section)); | 795 controller_->MenuModelForSection(group->section)); |
782 menu_runner_.reset(new views::MenuRunner(adapter.CreateMenu())); | 796 menu_runner_.reset(new views::MenuRunner(adapter.CreateMenu())); |
783 | 797 |
784 group->container->SetActive(true); | 798 group->container->SetActive(true); |
785 // Ignore the result since we don't need to handle a deleted menu specially. | 799 // Ignore the result since we don't need to handle a deleted menu specially. |
786 ignore_result( | 800 ignore_result( |
787 menu_runner_->RunMenuAt(sender->GetWidget(), | 801 menu_runner_->RunMenuAt(sender->GetWidget(), |
788 NULL, | 802 NULL, |
789 group->suggested_button->GetBoundsInScreen(), | 803 group->suggested_button->GetBoundsInScreen(), |
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
955 0); | 969 0); |
956 column_set->AddColumn(views::GridLayout::CENTER, | 970 column_set->AddColumn(views::GridLayout::CENTER, |
957 views::GridLayout::LEADING, | 971 views::GridLayout::LEADING, |
958 0, | 972 0, |
959 views::GridLayout::USE_PREF, | 973 views::GridLayout::USE_PREF, |
960 0, | 974 0, |
961 0); | 975 0); |
962 layout->StartRow(0, kColumnSetId); | 976 layout->StartRow(0, kColumnSetId); |
963 | 977 |
964 // The |info_view| holds |manual_inputs| and |suggested_info|, allowing the | 978 // The |info_view| holds |manual_inputs| and |suggested_info|, allowing the |
965 // dialog toggle which is shown. | 979 // dialog to toggle which is shown. |
966 views::View* info_view = new views::View(); | 980 views::View* info_view = new views::View(); |
967 info_view->SetLayoutManager( | 981 info_view->SetLayoutManager( |
968 new views::BoxLayout(views::BoxLayout::kVertical, 0, 0, 0)); | 982 new views::BoxLayout(views::BoxLayout::kVertical, 0, 0, 0)); |
969 | 983 |
970 if (section == SECTION_SHIPPING) { | 984 if (section == SECTION_SHIPPING) { |
971 use_billing_for_shipping_ = | 985 use_billing_for_shipping_ = |
972 new views::Checkbox(controller_->UseBillingForShippingText()); | 986 new views::Checkbox(controller_->UseBillingForShippingText()); |
973 use_billing_for_shipping_->SetChecked(true); | 987 use_billing_for_shipping_->SetChecked(true); |
974 use_billing_for_shipping_->set_listener(this); | 988 use_billing_for_shipping_->set_listener(this); |
975 info_view->AddChildView(use_billing_for_shipping_); | 989 info_view->AddChildView(use_billing_for_shipping_); |
976 } | 990 } |
977 | 991 |
978 views::View* manual_inputs = InitInputsView(section); | 992 views::View* manual_inputs = InitInputsView(section); |
979 info_view->AddChildView(manual_inputs); | 993 info_view->AddChildView(manual_inputs); |
980 SuggestionView* suggested_info = | 994 SuggestionView* suggested_info = |
981 new SuggestionView(controller_->EditSuggestionText(), this); | 995 new SuggestionView(controller_->EditSuggestionText(), this); |
982 info_view->AddChildView(suggested_info); | 996 info_view->AddChildView(suggested_info); |
983 layout->AddView(info_view); | 997 layout->AddView(info_view); |
984 | 998 |
985 if (section == SECTION_CC) { | |
986 // TODO(estade): don't hardcode this string. | |
987 suggested_info->ShowTextfield( | |
988 ASCIIToUTF16("CVC"), | |
989 controller_->IconForField(CREDIT_CARD_VERIFICATION_CODE, | |
990 string16()).AsImageSkia()); | |
991 } | |
992 | |
993 // TODO(estade): Fix the appearance of this button. | 999 // TODO(estade): Fix the appearance of this button. |
994 views::ImageButton* menu_button = new views::ImageButton(this); | 1000 views::ImageButton* menu_button = new views::ImageButton(this); |
995 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); | 1001 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); |
996 menu_button->SetImage(views::CustomButton::STATE_NORMAL, | 1002 menu_button->SetImage(views::CustomButton::STATE_NORMAL, |
997 rb.GetImageSkiaNamed(IDR_AUTOFILL_DIALOG_MENU_BUTTON)); | 1003 rb.GetImageSkiaNamed(IDR_AUTOFILL_DIALOG_MENU_BUTTON)); |
998 menu_button->SetImage(views::CustomButton::STATE_PRESSED, | 1004 menu_button->SetImage(views::CustomButton::STATE_PRESSED, |
999 rb.GetImageSkiaNamed(IDR_AUTOFILL_DIALOG_MENU_BUTTON_P)); | 1005 rb.GetImageSkiaNamed(IDR_AUTOFILL_DIALOG_MENU_BUTTON_P)); |
1000 layout->AddView(menu_button); | 1006 layout->AddView(menu_button); |
1001 | 1007 |
1002 DetailsGroup* group = GroupForSection(section); | 1008 DetailsGroup* group = GroupForSection(section); |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1078 | 1084 |
1079 void AutofillDialogViews::UpdateDetailsGroupState(const DetailsGroup& group) { | 1085 void AutofillDialogViews::UpdateDetailsGroupState(const DetailsGroup& group) { |
1080 string16 suggestion_text = | 1086 string16 suggestion_text = |
1081 controller_->SuggestionTextForSection(group.section); | 1087 controller_->SuggestionTextForSection(group.section); |
1082 bool show_suggestions = !suggestion_text.empty(); | 1088 bool show_suggestions = !suggestion_text.empty(); |
1083 group.suggested_info->SetVisible(show_suggestions); | 1089 group.suggested_info->SetVisible(show_suggestions); |
1084 group.suggested_info->SetSuggestionText(suggestion_text); | 1090 group.suggested_info->SetSuggestionText(suggestion_text); |
1085 gfx::Image icon = controller_->SuggestionIconForSection(group.section); | 1091 gfx::Image icon = controller_->SuggestionIconForSection(group.section); |
1086 group.suggested_info->SetSuggestionIcon(icon); | 1092 group.suggested_info->SetSuggestionIcon(icon); |
1087 | 1093 |
1094 if (group.section == SECTION_CC || | |
1095 (group.section == SECTION_CC_BILLING && | |
1096 controller_->IsSubmitPausedOn(wallet::VERIFY_CVV))) { | |
1097 // TODO(estade): don't hardcode this string. | |
1098 group.suggested_info->ShowTextfield( | |
1099 ASCIIToUTF16("CVC"), | |
1100 controller_->IconForField(CREDIT_CARD_VERIFICATION_CODE, | |
1101 string16()).AsImageSkia()); | |
1102 } | |
1103 | |
1088 if (group.section == SECTION_SHIPPING) { | 1104 if (group.section == SECTION_SHIPPING) { |
1089 bool show_checkbox = !show_suggestions; | 1105 bool show_checkbox = !show_suggestions; |
1090 // When the checkbox is going from hidden to visible, it's because the | 1106 // When the checkbox is going from hidden to visible, it's because the |
1091 // user clicked "Enter new address". Reset the checkbox to unchecked in this | 1107 // user clicked "Enter new address". Reset the checkbox to unchecked in this |
1092 // case. | 1108 // case. |
1093 if (show_checkbox && !use_billing_for_shipping_->visible()) | 1109 if (show_checkbox && !use_billing_for_shipping_->visible()) |
1094 use_billing_for_shipping_->SetChecked(false); | 1110 use_billing_for_shipping_->SetChecked(false); |
1095 | 1111 |
1096 use_billing_for_shipping_->SetVisible(show_checkbox); | 1112 use_billing_for_shipping_->SetVisible(show_checkbox); |
1097 group.manual_input->SetVisible( | 1113 group.manual_input->SetVisible( |
1098 show_checkbox && !use_billing_for_shipping_->checked()); | 1114 show_checkbox && !use_billing_for_shipping_->checked()); |
1099 } else { | 1115 } else { |
1100 group.manual_input->SetVisible(!show_suggestions); | 1116 group.manual_input->SetVisible(!show_suggestions); |
1101 } | 1117 } |
1102 | 1118 |
1103 // Show or hide the "Save in chrome" checkbox. If nothing is in editing mode, | 1119 // Show or hide the "Save in chrome" checkbox. If nothing is in editing mode, |
1104 // hide. If the controller tells us not to show it, likewise hide. | 1120 // hide. If the controller tells us not to show it, likewise hide. |
1105 save_in_chrome_checkbox_->SetVisible( | 1121 save_in_chrome_checkbox_->SetVisible( |
1106 controller_->ShouldOfferToSaveInChrome() && AtLeastOneSectionIsEditing()); | 1122 controller_->ShouldOfferToSaveInChrome() && AtLeastOneSectionIsEditing()); |
1107 | 1123 |
1124 if (group.suggested_button) { | |
1125 group.suggested_button->SetVisible( | |
1126 controller_->MenuModelForSection(group.section)->GetItemCount() > 0); | |
1127 } | |
1128 | |
1129 if (group.suggested_info) { | |
1130 group.suggested_info->SetEditable( | |
1131 !controller_->IsSubmitPausedOn(wallet::VERIFY_CVV)); | |
1132 } | |
1133 | |
1108 if (group.container) { | 1134 if (group.container) { |
1109 group.container->SetForwardMouseEvents(show_suggestions); | 1135 group.container->SetForwardMouseEvents(show_suggestions); |
1110 group.container->SetVisible(controller_->SectionIsActive(group.section)); | 1136 group.container->SetVisible(controller_->SectionIsActive(group.section)); |
1137 group.container->Refresh(); | |
Evan Stade
2013/03/27 02:39:38
I think you can piggy back on SetForwardMouseEvent
Dan Beam
2013/03/27 02:50:36
Done.
| |
1111 } | 1138 } |
1112 | 1139 |
1113 ContentsPreferredSizeChanged(); | 1140 ContentsPreferredSizeChanged(); |
1114 } | 1141 } |
1115 | 1142 |
1116 bool AutofillDialogViews::AtLeastOneSectionIsEditing() { | 1143 bool AutofillDialogViews::AtLeastOneSectionIsEditing() { |
1117 for (DetailGroupMap::iterator iter = detail_groups_.begin(); | 1144 for (DetailGroupMap::iterator iter = detail_groups_.begin(); |
1118 iter != detail_groups_.end(); ++iter) { | 1145 iter != detail_groups_.end(); ++iter) { |
1119 if (iter->second.manual_input && iter->second.manual_input->visible()) | 1146 if (iter->second.manual_input && iter->second.manual_input->visible()) |
1120 return true; | 1147 return true; |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1256 AutofillDialogViews::DetailsGroup::DetailsGroup(DialogSection section) | 1283 AutofillDialogViews::DetailsGroup::DetailsGroup(DialogSection section) |
1257 : section(section), | 1284 : section(section), |
1258 container(NULL), | 1285 container(NULL), |
1259 manual_input(NULL), | 1286 manual_input(NULL), |
1260 suggested_info(NULL), | 1287 suggested_info(NULL), |
1261 suggested_button(NULL) {} | 1288 suggested_button(NULL) {} |
1262 | 1289 |
1263 AutofillDialogViews::DetailsGroup::~DetailsGroup() {} | 1290 AutofillDialogViews::DetailsGroup::~DetailsGroup() {} |
1264 | 1291 |
1265 } // namespace autofill | 1292 } // namespace autofill |
OLD | NEW |