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

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

Issue 2759253002: [Web Payments] Implement item selection in lists. (Closed)
Patch Set: Assert back navigation in browser tests. 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_dialog_view_ids.h" 7 #include "chrome/browser/ui/views/payments/payment_request_dialog_view_ids.h"
8 #include "chrome/browser/ui/views/payments/payment_request_row_view.h" 8 #include "chrome/browser/ui/views/payments/payment_request_row_view.h"
9 #include "chrome/browser/ui/views/payments/payment_request_views_util.h" 9 #include "chrome/browser/ui/views/payments/payment_request_views_util.h"
10 #include "components/payments/content/payment_request_state.h" 10 #include "components/payments/content/payment_request_state.h"
(...skipping 22 matching lines...) Expand all
33 33
34 views::View* PaymentRequestItemList::Item::GetItemView() { 34 views::View* PaymentRequestItemList::Item::GetItemView() {
35 if (!item_view_) { 35 if (!item_view_) {
36 item_view_ = CreateItemView(); 36 item_view_ = CreateItemView();
37 item_view_->set_owned_by_client(); 37 item_view_->set_owned_by_client();
38 } 38 }
39 39
40 return item_view_.get(); 40 return item_view_.get();
41 } 41 }
42 42
43 void PaymentRequestItemList::Item::SetSelected(bool selected) { 43 void PaymentRequestItemList::Item::SetSelected(bool selected, bool notify) {
44 selected_ = selected; 44 selected_ = selected;
45 45
46 // This could be called before CreateItemView, so before |checkmark_| is 46 // This could be called before CreateItemView, so before |checkmark_| is
47 // instantiated. 47 // instantiated.
48 if (checkmark_) 48 if (checkmark_)
49 checkmark_->SetVisible(selected_); 49 checkmark_->SetVisible(selected_);
50 50
51 SelectedStateChanged(); 51 if (notify)
52 SelectedStateChanged();
52 } 53 }
53 54
54 std::unique_ptr<views::ImageView> PaymentRequestItemList::Item::CreateCheckmark( 55 std::unique_ptr<views::ImageView> PaymentRequestItemList::Item::CreateCheckmark(
55 bool selected) { 56 bool selected) {
56 std::unique_ptr<views::ImageView> checkmark = 57 std::unique_ptr<views::ImageView> checkmark =
57 base::MakeUnique<views::ImageView>(); 58 base::MakeUnique<views::ImageView>();
58 checkmark->set_id(static_cast<int>(DialogViewID::CHECKMARK_VIEW)); 59 checkmark->set_id(static_cast<int>(DialogViewID::CHECKMARK_VIEW));
59 checkmark->set_can_process_events_within_subtree(false); 60 checkmark->set_can_process_events_within_subtree(false);
60 checkmark->set_owned_by_client(); 61 checkmark->set_owned_by_client();
61 checkmark->SetImage( 62 checkmark->SetImage(
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
120 } 121 }
121 122
122 PaymentRequestItemList::PaymentRequestItemList() : selected_item_(nullptr) {} 123 PaymentRequestItemList::PaymentRequestItemList() : selected_item_(nullptr) {}
123 124
124 PaymentRequestItemList::~PaymentRequestItemList() {} 125 PaymentRequestItemList::~PaymentRequestItemList() {}
125 126
126 void PaymentRequestItemList::AddItem( 127 void PaymentRequestItemList::AddItem(
127 std::unique_ptr<PaymentRequestItemList::Item> item) { 128 std::unique_ptr<PaymentRequestItemList::Item> item) {
128 DCHECK_EQ(this, item->list()); 129 DCHECK_EQ(this, item->list());
129 items_.push_back(std::move(item)); 130 items_.push_back(std::move(item));
130 if (items_.back()->selected()) 131 if (items_.back()->selected()) {
131 SelectItem(items_.back().get()); 132 if (selected_item_)
133 selected_item_->SetSelected(/*selected=*/false, /*notify=*/false);
134 selected_item_ = items_.back().get();
135 }
132 } 136 }
133 137
134 std::unique_ptr<views::View> PaymentRequestItemList::CreateListView() { 138 std::unique_ptr<views::View> PaymentRequestItemList::CreateListView() {
135 std::unique_ptr<views::View> content_view = base::MakeUnique<views::View>(); 139 std::unique_ptr<views::View> content_view = base::MakeUnique<views::View>();
136 140
137 views::BoxLayout* layout = new views::BoxLayout( 141 views::BoxLayout* layout = new views::BoxLayout(
138 views::BoxLayout::kVertical, 0, kPaymentRequestRowVerticalInsets, 0); 142 views::BoxLayout::kVertical, 0, kPaymentRequestRowVerticalInsets, 0);
139 content_view->SetLayoutManager(layout); 143 content_view->SetLayoutManager(layout);
140 144
141 for (auto& item : items_) { 145 for (auto& item : items_) {
142 content_view->AddChildView(item->GetItemView()); 146 content_view->AddChildView(item->GetItemView());
143 } 147 }
144 148
145 return content_view; 149 return content_view;
146 } 150 }
147 151
148 void PaymentRequestItemList::SelectItem(PaymentRequestItemList::Item* item) { 152 void PaymentRequestItemList::SelectItem(PaymentRequestItemList::Item* item) {
149 DCHECK_EQ(this, item->list()); 153 DCHECK_EQ(this, item->list());
150 if (selected_item_ == item) 154 if (selected_item_ == item)
151 return; 155 return;
152 156
153 UnselectSelectedItem(); 157 UnselectSelectedItem();
154 158
155 selected_item_ = item; 159 selected_item_ = item;
156 item->SetSelected(true); 160 item->SetSelected(/*selected=*/true, /*notify=*/true);
157 } 161 }
158 162
159 void PaymentRequestItemList::UnselectSelectedItem() { 163 void PaymentRequestItemList::UnselectSelectedItem() {
160 // It's possible that no item is currently selected, either during list 164 // It's possible that no item is currently selected, either during list
161 // creation or in the middle of the selection operation when the previously 165 // creation or in the middle of the selection operation when the previously
162 // selected item has been deselected but the new one isn't selected yet. 166 // selected item has been deselected but the new one isn't selected yet.
163 if (selected_item_) 167 if (selected_item_)
164 selected_item_->SetSelected(false); 168 selected_item_->SetSelected(/*selected=*/false, /*notify=*/true);
165 169
166 selected_item_ = nullptr; 170 selected_item_ = nullptr;
167 } 171 }
168 172
169 } // namespace payments 173 } // namespace payments
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698