| 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" |
| (...skipping 484 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 495 SetLayoutManager(new views::BoxLayout(views::BoxLayout::kVertical, 0, 0, 0)); | 495 SetLayoutManager(new views::BoxLayout(views::BoxLayout::kVertical, 0, 0, 0)); |
| 496 } | 496 } |
| 497 | 497 |
| 498 AutofillDialogViews::SuggestionView::~SuggestionView() {} | 498 AutofillDialogViews::SuggestionView::~SuggestionView() {} |
| 499 | 499 |
| 500 void AutofillDialogViews::SuggestionView::SetEditable(bool editable) { | 500 void AutofillDialogViews::SuggestionView::SetEditable(bool editable) { |
| 501 edit_link_->SetVisible(editable); | 501 edit_link_->SetVisible(editable); |
| 502 } | 502 } |
| 503 | 503 |
| 504 void AutofillDialogViews::SuggestionView::SetSuggestionText( | 504 void AutofillDialogViews::SuggestionView::SetSuggestionText( |
| 505 const string16& text, | 505 const string16& text) { |
| 506 gfx::Font::FontStyle text_style) { | |
| 507 label_->SetFont(ui::ResourceBundle::GetSharedInstance().GetFont( | |
| 508 ui::ResourceBundle::BaseFont).DeriveFont(0, text_style)); | |
| 509 | |
| 510 // TODO(estade): does this localize well? | 506 // TODO(estade): does this localize well? |
| 511 string16 line_return(ASCIIToUTF16("\n")); | 507 string16 line_return(ASCIIToUTF16("\n")); |
| 512 size_t position = text.find(line_return); | 508 size_t position = text.find(line_return); |
| 513 if (position == string16::npos) { | 509 if (position == string16::npos) { |
| 514 label_->SetText(text); | 510 label_->SetText(text); |
| 515 label_line_2_->SetVisible(false); | 511 label_line_2_->SetVisible(false); |
| 516 } else { | 512 } else { |
| 517 label_->SetText(text.substr(0, position)); | 513 label_->SetText(text.substr(0, position)); |
| 518 label_line_2_->SetText(text.substr(position + line_return.length())); | 514 label_line_2_->SetText(text.substr(position + line_return.length())); |
| 519 label_line_2_->SetVisible(true); | 515 label_line_2_->SetVisible(true); |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 554 return new AutofillDialogViews(controller); | 550 return new AutofillDialogViews(controller); |
| 555 } | 551 } |
| 556 | 552 |
| 557 // AutofillDialogViews --------------------------------------------------------- | 553 // AutofillDialogViews --------------------------------------------------------- |
| 558 | 554 |
| 559 AutofillDialogViews::AutofillDialogViews(AutofillDialogController* controller) | 555 AutofillDialogViews::AutofillDialogViews(AutofillDialogController* controller) |
| 560 : controller_(controller), | 556 : controller_(controller), |
| 561 window_(NULL), | 557 window_(NULL), |
| 562 contents_(NULL), | 558 contents_(NULL), |
| 563 notification_area_(NULL), | 559 notification_area_(NULL), |
| 560 use_billing_for_shipping_(NULL), |
| 564 account_chooser_(NULL), | 561 account_chooser_(NULL), |
| 565 sign_in_container_(NULL), | 562 sign_in_container_(NULL), |
| 566 cancel_sign_in_(NULL), | 563 cancel_sign_in_(NULL), |
| 567 sign_in_webview_(NULL), | 564 sign_in_webview_(NULL), |
| 568 main_container_(NULL), | 565 main_container_(NULL), |
| 569 details_container_(NULL), | 566 details_container_(NULL), |
| 570 button_strip_extra_view_(NULL), | 567 button_strip_extra_view_(NULL), |
| 571 save_in_chrome_checkbox_(NULL), | 568 save_in_chrome_checkbox_(NULL), |
| 572 autocheckout_progress_bar_view_(NULL), | 569 autocheckout_progress_bar_view_(NULL), |
| 573 autocheckout_progress_bar_(NULL), | 570 autocheckout_progress_bar_(NULL), |
| (...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 705 } | 702 } |
| 706 } | 703 } |
| 707 | 704 |
| 708 string16 AutofillDialogViews::GetCvc() { | 705 string16 AutofillDialogViews::GetCvc() { |
| 709 DialogSection billing_section = controller_->SectionIsActive(SECTION_CC) ? | 706 DialogSection billing_section = controller_->SectionIsActive(SECTION_CC) ? |
| 710 SECTION_CC : SECTION_CC_BILLING; | 707 SECTION_CC : SECTION_CC_BILLING; |
| 711 return GroupForSection(billing_section)->suggested_info-> | 708 return GroupForSection(billing_section)->suggested_info-> |
| 712 decorated_textfield()->textfield()->text(); | 709 decorated_textfield()->textfield()->text(); |
| 713 } | 710 } |
| 714 | 711 |
| 712 bool AutofillDialogViews::UseBillingForShipping() { |
| 713 return use_billing_for_shipping_->checked(); |
| 714 } |
| 715 |
| 715 bool AutofillDialogViews::SaveDetailsLocally() { | 716 bool AutofillDialogViews::SaveDetailsLocally() { |
| 716 return save_in_chrome_checkbox_->checked(); | 717 return save_in_chrome_checkbox_->checked(); |
| 717 } | 718 } |
| 718 | 719 |
| 719 const content::NavigationController* AutofillDialogViews::ShowSignIn() { | 720 const content::NavigationController* AutofillDialogViews::ShowSignIn() { |
| 720 // TODO(abodenha) We should be able to use the WebContents of the WebView | 721 // TODO(abodenha) We should be able to use the WebContents of the WebView |
| 721 // to navigate instead of LoadInitialURL. Figure out why it doesn't work. | 722 // to navigate instead of LoadInitialURL. Figure out why it doesn't work. |
| 722 | 723 |
| 723 account_chooser_->SetSignInLinkEnabled(false); | 724 account_chooser_->SetSignInLinkEnabled(false); |
| 724 sign_in_webview_->LoadInitialURL(wallet::GetSignInUrl()); | 725 sign_in_webview_->LoadInitialURL(wallet::GetSignInUrl()); |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 820 kLegalDocPadding, | 821 kLegalDocPadding, |
| 821 kLegalDocPadding, | 822 kLegalDocPadding, |
| 822 0)); | 823 0)); |
| 823 footnote_view_->set_border( | 824 footnote_view_->set_border( |
| 824 views::Border::CreateSolidSidedBorder(1, 0, 0, 0, kSubtleBorderColor)); | 825 views::Border::CreateSolidSidedBorder(1, 0, 0, 0, kSubtleBorderColor)); |
| 825 footnote_view_->set_background( | 826 footnote_view_->set_background( |
| 826 views::Background::CreateSolidBackground(kShadingColor)); | 827 views::Background::CreateSolidBackground(kShadingColor)); |
| 827 | 828 |
| 828 legal_document_view_ = new views::StyledLabel(string16(), this); | 829 legal_document_view_ = new views::StyledLabel(string16(), this); |
| 829 footnote_view_->AddChildView(legal_document_view_); | 830 footnote_view_->AddChildView(legal_document_view_); |
| 830 UpdateAccountChooser(); | |
| 831 | 831 |
| 832 return footnote_view_; | 832 return footnote_view_; |
| 833 } | 833 } |
| 834 | 834 |
| 835 bool AutofillDialogViews::Cancel() { | 835 bool AutofillDialogViews::Cancel() { |
| 836 controller_->OnCancel(); | 836 controller_->OnCancel(); |
| 837 return true; | 837 return true; |
| 838 } | 838 } |
| 839 | 839 |
| 840 bool AutofillDialogViews::Accept() { | 840 bool AutofillDialogViews::Accept() { |
| 841 if (ValidateForm()) | 841 if (ValidateForm()) |
| 842 controller_->OnAccept(); | 842 controller_->OnAccept(); |
| 843 | 843 |
| 844 // |controller_| decides when to hide the dialog. | 844 // |controller_| decides when to hide the dialog. |
| 845 return false; | 845 return false; |
| 846 } | 846 } |
| 847 | 847 |
| 848 // TODO(wittman): Remove this override once we move to the new style frame view | 848 // TODO(wittman): Remove this override once we move to the new style frame view |
| 849 // on all dialogs. | 849 // on all dialogs. |
| 850 views::NonClientFrameView* AutofillDialogViews::CreateNonClientFrameView( | 850 views::NonClientFrameView* AutofillDialogViews::CreateNonClientFrameView( |
| 851 views::Widget* widget) { | 851 views::Widget* widget) { |
| 852 return CreateConstrainedStyleNonClientFrameView( | 852 return CreateConstrainedStyleNonClientFrameView( |
| 853 widget, | 853 widget, |
| 854 controller_->web_contents()->GetBrowserContext()); | 854 controller_->web_contents()->GetBrowserContext()); |
| 855 } | 855 } |
| 856 | 856 |
| 857 void AutofillDialogViews::ButtonPressed(views::Button* sender, | 857 void AutofillDialogViews::ButtonPressed(views::Button* sender, |
| 858 const ui::Event& event) { | 858 const ui::Event& event) { |
| 859 if (sender == cancel_sign_in_) { | 859 if (sender == use_billing_for_shipping_) { |
| 860 UpdateDetailsGroupState(*GroupForSection(SECTION_SHIPPING)); |
| 861 } else if (sender == cancel_sign_in_) { |
| 860 controller_->EndSignInFlow(); | 862 controller_->EndSignInFlow(); |
| 861 } else { | 863 } else { |
| 862 // TODO(estade): Should the menu be shown on mouse down? | 864 // TODO(estade): Should the menu be shown on mouse down? |
| 863 DetailsGroup* group = NULL; | 865 DetailsGroup* group = NULL; |
| 864 for (DetailGroupMap::iterator iter = detail_groups_.begin(); | 866 for (DetailGroupMap::iterator iter = detail_groups_.begin(); |
| 865 iter != detail_groups_.end(); ++iter) { | 867 iter != detail_groups_.end(); ++iter) { |
| 866 if (sender == iter->second.suggested_button) { | 868 if (sender == iter->second.suggested_button) { |
| 867 group = &iter->second; | 869 group = &iter->second; |
| 868 break; | 870 break; |
| 869 } | 871 } |
| (...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1063 0, | 1065 0, |
| 1064 0); | 1066 0); |
| 1065 layout->StartRow(0, kColumnSetId); | 1067 layout->StartRow(0, kColumnSetId); |
| 1066 | 1068 |
| 1067 // The |info_view| holds |manual_inputs| and |suggested_info|, allowing the | 1069 // The |info_view| holds |manual_inputs| and |suggested_info|, allowing the |
| 1068 // dialog to toggle which is shown. | 1070 // dialog to toggle which is shown. |
| 1069 views::View* info_view = new views::View(); | 1071 views::View* info_view = new views::View(); |
| 1070 info_view->SetLayoutManager( | 1072 info_view->SetLayoutManager( |
| 1071 new views::BoxLayout(views::BoxLayout::kVertical, 0, 0, 0)); | 1073 new views::BoxLayout(views::BoxLayout::kVertical, 0, 0, 0)); |
| 1072 | 1074 |
| 1075 if (section == SECTION_SHIPPING) { |
| 1076 use_billing_for_shipping_ = |
| 1077 new views::Checkbox(controller_->UseBillingForShippingText()); |
| 1078 use_billing_for_shipping_->SetChecked(true); |
| 1079 use_billing_for_shipping_->set_listener(this); |
| 1080 info_view->AddChildView(use_billing_for_shipping_); |
| 1081 } |
| 1082 |
| 1073 views::View* manual_inputs = InitInputsView(section); | 1083 views::View* manual_inputs = InitInputsView(section); |
| 1074 info_view->AddChildView(manual_inputs); | 1084 info_view->AddChildView(manual_inputs); |
| 1075 SuggestionView* suggested_info = | 1085 SuggestionView* suggested_info = |
| 1076 new SuggestionView(controller_->EditSuggestionText(), this); | 1086 new SuggestionView(controller_->EditSuggestionText(), this); |
| 1077 info_view->AddChildView(suggested_info); | 1087 info_view->AddChildView(suggested_info); |
| 1078 layout->AddView(info_view); | 1088 layout->AddView(info_view); |
| 1079 | 1089 |
| 1080 // TODO(estade): Fix the appearance of this button. | 1090 // TODO(estade): Fix the appearance of this button. |
| 1081 views::ImageButton* menu_button = new views::ImageButton(this); | 1091 views::ImageButton* menu_button = new views::ImageButton(this); |
| 1082 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); | 1092 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1166 } | 1176 } |
| 1167 | 1177 |
| 1168 return view; | 1178 return view; |
| 1169 } | 1179 } |
| 1170 | 1180 |
| 1171 void AutofillDialogViews::UpdateDetailsGroupState(const DetailsGroup& group) { | 1181 void AutofillDialogViews::UpdateDetailsGroupState(const DetailsGroup& group) { |
| 1172 const SuggestionState& suggestion_state = | 1182 const SuggestionState& suggestion_state = |
| 1173 controller_->SuggestionStateForSection(group.section); | 1183 controller_->SuggestionStateForSection(group.section); |
| 1174 bool show_suggestions = !suggestion_state.text.empty(); | 1184 bool show_suggestions = !suggestion_state.text.empty(); |
| 1175 group.suggested_info->SetVisible(show_suggestions); | 1185 group.suggested_info->SetVisible(show_suggestions); |
| 1176 group.suggested_info->SetSuggestionText(suggestion_state.text, | 1186 group.suggested_info->SetSuggestionText(suggestion_state.text); |
| 1177 suggestion_state.text_style); | |
| 1178 group.suggested_info->SetSuggestionIcon(suggestion_state.icon); | 1187 group.suggested_info->SetSuggestionIcon(suggestion_state.icon); |
| 1179 group.suggested_info->SetEditable(suggestion_state.editable); | 1188 group.suggested_info->SetEditable(suggestion_state.editable); |
| 1180 | 1189 |
| 1181 if (!suggestion_state.extra_text.empty()) { | 1190 if (!suggestion_state.extra_text.empty()) { |
| 1182 group.suggested_info->ShowTextfield( | 1191 group.suggested_info->ShowTextfield( |
| 1183 suggestion_state.extra_text, | 1192 suggestion_state.extra_text, |
| 1184 suggestion_state.extra_icon.AsImageSkia()); | 1193 suggestion_state.extra_icon.AsImageSkia()); |
| 1185 } | 1194 } |
| 1186 | 1195 |
| 1187 group.manual_input->SetVisible(!show_suggestions); | 1196 if (group.section == SECTION_SHIPPING) { |
| 1197 bool show_checkbox = !show_suggestions; |
| 1198 // When the checkbox is going from hidden to visible, it's because the |
| 1199 // user clicked "Enter new address". Reset the checkbox to unchecked in this |
| 1200 // case. |
| 1201 if (show_checkbox && !use_billing_for_shipping_->visible()) |
| 1202 use_billing_for_shipping_->SetChecked(false); |
| 1203 |
| 1204 use_billing_for_shipping_->SetVisible(show_checkbox); |
| 1205 group.manual_input->SetVisible( |
| 1206 show_checkbox && !use_billing_for_shipping_->checked()); |
| 1207 } else { |
| 1208 group.manual_input->SetVisible(!show_suggestions); |
| 1209 } |
| 1188 | 1210 |
| 1189 // Show or hide the "Save in chrome" checkbox. If nothing is in editing mode, | 1211 // Show or hide the "Save in chrome" checkbox. If nothing is in editing mode, |
| 1190 // hide. If the controller tells us not to show it, likewise hide. | 1212 // hide. If the controller tells us not to show it, likewise hide. |
| 1191 save_in_chrome_checkbox_->SetVisible( | 1213 save_in_chrome_checkbox_->SetVisible( |
| 1192 controller_->ShouldOfferToSaveInChrome()); | 1214 controller_->ShouldOfferToSaveInChrome()); |
| 1193 | 1215 |
| 1194 const bool has_suggestions = | 1216 const bool has_suggestions = |
| 1195 controller_->MenuModelForSection(group.section)->GetItemCount() > 0; | 1217 controller_->MenuModelForSection(group.section)->GetItemCount() > 0; |
| 1196 | 1218 |
| 1197 if (group.suggested_button) | 1219 if (group.suggested_button) |
| (...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1366 AutofillDialogViews::DetailsGroup::DetailsGroup(DialogSection section) | 1388 AutofillDialogViews::DetailsGroup::DetailsGroup(DialogSection section) |
| 1367 : section(section), | 1389 : section(section), |
| 1368 container(NULL), | 1390 container(NULL), |
| 1369 manual_input(NULL), | 1391 manual_input(NULL), |
| 1370 suggested_info(NULL), | 1392 suggested_info(NULL), |
| 1371 suggested_button(NULL) {} | 1393 suggested_button(NULL) {} |
| 1372 | 1394 |
| 1373 AutofillDialogViews::DetailsGroup::~DetailsGroup() {} | 1395 AutofillDialogViews::DetailsGroup::~DetailsGroup() {} |
| 1374 | 1396 |
| 1375 } // namespace autofill | 1397 } // namespace autofill |
| OLD | NEW |