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

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

Issue 2755493005: [Web Payments] Consolidate list code. (Closed)
Patch Set: Move selection logic to base. 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_views_util.h" 9 #include "chrome/browser/ui/views/payments/payment_request_views_util.h"
10 #include "components/payments/content/payment_request_state.h"
9 #include "ui/gfx/paint_vector_icon.h" 11 #include "ui/gfx/paint_vector_icon.h"
10 #include "ui/views/controls/image_view.h" 12 #include "ui/views/controls/image_view.h"
11 #include "ui/views/layout/box_layout.h" 13 #include "ui/views/layout/box_layout.h"
14 #include "ui/views/layout/grid_layout.h"
12 #include "ui/views/vector_icons.h" 15 #include "ui/views/vector_icons.h"
13 #include "ui/views/view.h" 16 #include "ui/views/view.h"
14 17
15 namespace payments { 18 namespace payments {
16 19
17 namespace { 20 namespace {
18 21
19 const SkColor kCheckmarkColor = 0xFF609265; 22 const SkColor kCheckmarkColor = 0xFF609265;
20 23
21 } // namespace 24 } // namespace
(...skipping 10 matching lines...) Expand all
32 if (!item_view_) { 35 if (!item_view_) {
33 item_view_ = CreateItemView(); 36 item_view_ = CreateItemView();
34 item_view_->set_owned_by_client(); 37 item_view_->set_owned_by_client();
35 } 38 }
36 39
37 return item_view_.get(); 40 return item_view_.get();
38 } 41 }
39 42
40 void PaymentRequestItemList::Item::SetSelected(bool selected) { 43 void PaymentRequestItemList::Item::SetSelected(bool selected) {
41 selected_ = selected; 44 selected_ = selected;
45
46 // This could be called before CreateItemView, so before |checkmark_| is
47 // instantiated.
48 if (checkmark_)
49 checkmark_->SetVisible(selected_);
50
42 SelectedStateChanged(); 51 SelectedStateChanged();
43 } 52 }
44 53
45 std::unique_ptr<views::ImageView> PaymentRequestItemList::Item::CreateCheckmark( 54 std::unique_ptr<views::ImageView> PaymentRequestItemList::Item::CreateCheckmark(
46 bool selected) { 55 bool selected) {
47 std::unique_ptr<views::ImageView> checkmark = 56 std::unique_ptr<views::ImageView> checkmark =
48 base::MakeUnique<views::ImageView>(); 57 base::MakeUnique<views::ImageView>();
49 checkmark->set_id(static_cast<int>(DialogViewID::CHECKMARK_VIEW)); 58 checkmark->set_id(static_cast<int>(DialogViewID::CHECKMARK_VIEW));
50 checkmark->set_can_process_events_within_subtree(false); 59 checkmark->set_can_process_events_within_subtree(false);
51 checkmark->set_owned_by_client(); 60 checkmark->set_owned_by_client();
52 checkmark->SetImage( 61 checkmark->SetImage(
53 gfx::CreateVectorIcon(views::kMenuCheckIcon, kCheckmarkColor)); 62 gfx::CreateVectorIcon(views::kMenuCheckIcon, kCheckmarkColor));
54 checkmark->SetVisible(selected); 63 checkmark->SetVisible(selected);
55 return checkmark; 64 return checkmark;
56 } 65 }
57 66
67 std::unique_ptr<views::View> PaymentRequestItemList::Item::CreateExtraView() {
68 return nullptr;
69 }
70
71 std::unique_ptr<views::View> PaymentRequestItemList::Item::CreateItemView() {
72 std::unique_ptr<views::View> content = CreateContentView();
73
74 std::unique_ptr<PaymentRequestRowView> row =
75 base::MakeUnique<PaymentRequestRowView>(this);
76 views::GridLayout* layout = new views::GridLayout(row.get());
77 row->SetLayoutManager(layout);
78
79 layout->SetInsets(
80 kPaymentRequestRowVerticalInsets, kPaymentRequestRowHorizontalInsets,
81 kPaymentRequestRowVerticalInsets,
82 kPaymentRequestRowHorizontalInsets + kPaymentRequestRowExtraRightInset);
83
84 // Add a column listing the profile information.
tmartino 2017/03/16 17:42:01 nit: This class is not associated with a profile
anthonyvd 2017/03/20 13:24:59 Good catch, done!
85 views::ColumnSet* columns = layout->AddColumnSet(0);
86 columns->AddColumn(views::GridLayout::FILL, views::GridLayout::LEADING, 1,
87 views::GridLayout::USE_PREF, 0, 0);
88
89 columns->AddPaddingColumn(1, 0);
90
91 // Add a column for the checkmark shown next to the selected profile.
92 columns->AddColumn(views::GridLayout::TRAILING, views::GridLayout::CENTER, 0,
93 views::GridLayout::USE_PREF, 0, 0);
94
95 // Add a column for the extra_view, which comes after the checkmark.
96 columns->AddColumn(views::GridLayout::TRAILING, views::GridLayout::CENTER, 0,
97 views::GridLayout::USE_PREF, 0, 0);
98
99 layout->StartRow(0, 0);
100 content->set_can_process_events_within_subtree(false);
101 layout->AddView(content.release());
102
103 checkmark_ = CreateCheckmark(selected());
104 layout->AddView(checkmark_.get());
105
106 std::unique_ptr<views::View> extra_view = CreateExtraView();
107 if (extra_view)
108 layout->AddView(extra_view.release());
109
110 return std::move(row);
111 }
112
113 void PaymentRequestItemList::Item::ButtonPressed(views::Button* sender,
114 const ui::Event& event) {
115 if (CanBeSelected()) {
116 list()->SelectItem(this);
117 } else {
118 PerformSelectionFallback();
119 }
120 }
121
58 PaymentRequestItemList::PaymentRequestItemList() : selected_item_(nullptr) {} 122 PaymentRequestItemList::PaymentRequestItemList() : selected_item_(nullptr) {}
59 123
60 PaymentRequestItemList::~PaymentRequestItemList() {} 124 PaymentRequestItemList::~PaymentRequestItemList() {}
61 125
62 void PaymentRequestItemList::AddItem( 126 void PaymentRequestItemList::AddItem(
63 std::unique_ptr<PaymentRequestItemList::Item> item) { 127 std::unique_ptr<PaymentRequestItemList::Item> item) {
64 DCHECK_EQ(this, item->list()); 128 DCHECK_EQ(this, item->list());
65 items_.push_back(std::move(item)); 129 items_.push_back(std::move(item));
66 if (items_.back()->selected()) 130 if (items_.back()->selected())
67 SelectItem(items_.back().get()); 131 SelectItem(items_.back().get());
(...skipping 28 matching lines...) Expand all
96 // It's possible that no item is currently selected, either during list 160 // It's possible that no item is currently selected, either during list
97 // creation or in the middle of the selection operation when the previously 161 // creation or in the middle of the selection operation when the previously
98 // selected item has been deselected but the new one isn't selected yet. 162 // selected item has been deselected but the new one isn't selected yet.
99 if (selected_item_) 163 if (selected_item_)
100 selected_item_->SetSelected(false); 164 selected_item_->SetSelected(false);
101 165
102 selected_item_ = nullptr; 166 selected_item_ = nullptr;
103 } 167 }
104 168
105 } // namespace payments 169 } // namespace payments
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698