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

Side by Side Diff: chrome/browser/ui/views/payments/payment_request_item_list.cc

Issue 2711973002: [Web Payments] Implement the credit card selection UI functionality. (Closed)
Patch Set: Fix test flakiness. Created 3 years, 9 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 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 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/payments/payment_request_item_list.h" 5 #include "chrome/browser/ui/views/payments/payment_request_item_list.h"
6 6
7 #include "chrome/browser/ui/views/payments/payment_request_views_util.h" 7 #include "chrome/browser/ui/views/payments/payment_request_views_util.h"
8 #include "ui/views/layout/box_layout.h" 8 #include "ui/views/layout/box_layout.h"
9 #include "ui/views/view.h" 9 #include "ui/views/view.h"
10 10
11 namespace payments { 11 namespace payments {
12 12
13 PaymentRequestItemList::Item::Item() {} 13 PaymentRequestItemList::Item::Item(PaymentRequest* request,
14 PaymentRequestItemList* list,
15 bool selected)
16 : request_(request), list_(list), selected_(selected) {}
14 17
15 PaymentRequestItemList::Item::~Item() {} 18 PaymentRequestItemList::Item::~Item() {}
16 19
17 views::View* PaymentRequestItemList::Item::GetItemView() { 20 views::View* PaymentRequestItemList::Item::GetItemView() {
18 if (!item_view_) { 21 if (!item_view_) {
19 item_view_ = CreateItemView(); 22 item_view_ = CreateItemView();
20 item_view_->set_owned_by_client(); 23 item_view_->set_owned_by_client();
21 } 24 }
22 25
23 return item_view_.get(); 26 return item_view_.get();
24 } 27 }
25 28
26 PaymentRequestItemList::PaymentRequestItemList() {} 29 void PaymentRequestItemList::Item::SetSelected(bool selected) {
30 selected_ = selected;
31 SelectedStateChanged();
32 }
33
34 PaymentRequestItemList::PaymentRequestItemList() : selected_item_(nullptr) {}
27 35
28 PaymentRequestItemList::~PaymentRequestItemList() {} 36 PaymentRequestItemList::~PaymentRequestItemList() {}
29 37
30 void PaymentRequestItemList::AddItem( 38 void PaymentRequestItemList::AddItem(
31 std::unique_ptr<PaymentRequestItemList::Item> item) { 39 std::unique_ptr<PaymentRequestItemList::Item> item) {
40 DCHECK_EQ(this, item->list());
32 items_.push_back(std::move(item)); 41 items_.push_back(std::move(item));
42 if (items_.back()->selected())
43 SelectItem(items_.back().get());
33 } 44 }
34 45
35 std::unique_ptr<views::View> PaymentRequestItemList::CreateListView() { 46 std::unique_ptr<views::View> PaymentRequestItemList::CreateListView() {
36 std::unique_ptr<views::View> content_view = base::MakeUnique<views::View>(); 47 std::unique_ptr<views::View> content_view = base::MakeUnique<views::View>();
37 48
38 views::BoxLayout* layout = new views::BoxLayout( 49 views::BoxLayout* layout = new views::BoxLayout(
39 views::BoxLayout::kVertical, 0, kPaymentRequestRowVerticalInsets, 0); 50 views::BoxLayout::kVertical, 0, kPaymentRequestRowVerticalInsets, 0);
40 content_view->SetLayoutManager(layout); 51 content_view->SetLayoutManager(layout);
41 52
42 for (auto& item : items_) { 53 for (auto& item : items_) {
43 content_view->AddChildView(item->GetItemView()); 54 content_view->AddChildView(item->GetItemView());
44 } 55 }
45 56
46 return content_view; 57 return content_view;
47 } 58 }
48 59
60 void PaymentRequestItemList::SelectItem(PaymentRequestItemList::Item* item) {
61 DCHECK_EQ(this, item->list());
62 if (selected_item_ == item)
63 return;
64
65 UnselectSelectedItem();
66
67 selected_item_ = item;
68 item->SetSelected(true);
69 }
70
71 void PaymentRequestItemList::UnselectSelectedItem() {
72 // It's possible that no item is currently selected, either during list
73 // creation or in the middle of the selection operation when the previously
74 // selected item has been deselected but the new one isn't selected yet.
75 if (selected_item_)
76 selected_item_->SetSelected(false);
77
78 selected_item_ = nullptr;
79 }
80
49 } // namespace payments 81 } // namespace payments
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698