Chromium Code Reviews| Index: chrome/browser/ui/views/payments/payment_request_item_list.cc |
| diff --git a/chrome/browser/ui/views/payments/payment_request_item_list.cc b/chrome/browser/ui/views/payments/payment_request_item_list.cc |
| index 0cef61ec6bc84ac48121b7c06491cd67c830604a..820fdecfe57515c5916f6fa3bdd0f1ce43dc650a 100644 |
| --- a/chrome/browser/ui/views/payments/payment_request_item_list.cc |
| +++ b/chrome/browser/ui/views/payments/payment_request_item_list.cc |
| @@ -9,6 +9,9 @@ |
| #include "chrome/browser/ui/views/payments/payment_request_views_util.h" |
| #include "components/payments/content/payment_request_state.h" |
| #include "ui/gfx/paint_vector_icon.h" |
| +#include "ui/vector_icons/vector_icons.h" |
| +#include "ui/views/controls/button/image_button.h" |
| +#include "ui/views/controls/button/image_button_factory.h" |
| #include "ui/views/controls/image_view.h" |
| #include "ui/views/layout/box_layout.h" |
| #include "ui/views/layout/grid_layout.h" |
| @@ -26,8 +29,13 @@ const SkColor kCheckmarkColor = 0xFF609265; |
| PaymentRequestItemList::Item::Item(PaymentRequestSpec* spec, |
| PaymentRequestState* state, |
| PaymentRequestItemList* list, |
| - bool selected) |
| - : spec_(spec), state_(state), list_(list), selected_(selected) {} |
| + bool selected, |
| + bool show_edit_button) |
| + : spec_(spec), |
| + state_(state), |
| + list_(list), |
| + selected_(selected), |
| + show_edit_button_(show_edit_button) {} |
| PaymentRequestItemList::Item::~Item() {} |
| @@ -94,9 +102,24 @@ std::unique_ptr<views::View> PaymentRequestItemList::Item::CreateItemView() { |
| columns->AddColumn(views::GridLayout::TRAILING, views::GridLayout::CENTER, 0, |
| views::GridLayout::USE_PREF, 0, 0); |
| - // Add a column for the extra_view, which comes after the checkmark. |
| - columns->AddColumn(views::GridLayout::TRAILING, views::GridLayout::CENTER, 0, |
| - views::GridLayout::USE_PREF, 0, 0); |
| + // The space between the checkmark, extra view, and edit button. |
| + constexpr int kExtraViewSpacing = 16; |
| + std::unique_ptr<views::View> extra_view = CreateExtraView(); |
| + if (extra_view) { |
| + columns->AddPaddingColumn(0, kExtraViewSpacing); |
| + // Add a column for the extra_view, which comes after the checkmark. |
| + columns->AddColumn(views::GridLayout::TRAILING, views::GridLayout::CENTER, |
| + 0, views::GridLayout::USE_PREF, 0, 0); |
| + } |
| + |
| + if (show_edit_button_) { |
| + columns->AddPaddingColumn(0, kExtraViewSpacing); |
| + // Add a column for the edit_button if it exists. |
| + constexpr int kEditIconSize = 16; |
| + columns->AddColumn(views::GridLayout::TRAILING, views::GridLayout::CENTER, |
| + 0, views::GridLayout::FIXED, kEditIconSize, |
| + kEditIconSize); |
| + } |
| layout->StartRow(0, 0); |
| content->set_can_process_events_within_subtree(false); |
| @@ -105,16 +128,26 @@ std::unique_ptr<views::View> PaymentRequestItemList::Item::CreateItemView() { |
| checkmark_ = CreateCheckmark(selected()); |
| layout->AddView(checkmark_.get()); |
| - std::unique_ptr<views::View> extra_view = CreateExtraView(); |
| if (extra_view) |
| layout->AddView(extra_view.release()); |
| + if (show_edit_button_) { |
| + views::ImageButton* edit_button = views::CreateVectorImageButton(this); |
| + edit_button->set_owned_by_client(); |
| + views::SetImageFromVectorIcon(edit_button, ui::kEditIcon); |
| + edit_button->SetFocusBehavior(views::View::FocusBehavior::ALWAYS); |
| + edit_button->set_id(static_cast<int>(DialogViewID::EDIT_ITEM_BUTTON)); |
| + layout->AddView(edit_button); |
| + } |
| + |
| return std::move(row); |
| } |
| void PaymentRequestItemList::Item::ButtonPressed(views::Button* sender, |
| const ui::Event& event) { |
| - if (CanBeSelected()) { |
| + if (sender->id() == static_cast<int>(DialogViewID::EDIT_ITEM_BUTTON)) { |
|
Evan Stade
2017/05/12 18:48:07
nit: are both of these casts necessary? (here and
anthonyvd
2017/05/12 20:16:48
Yeah, since DialogViewID is an enum class not cast
Evan Stade
2017/05/15 17:14:55
what error do you get for the other one? Because c
anthonyvd
2017/05/15 17:27:40
error: cannot initialize a parameter of type 'int'
|
| + EditButtonPressed(); |
| + } else if (CanBeSelected()) { |
| list()->SelectItem(this); |
| } else { |
| PerformSelectionFallback(); |