Chromium Code Reviews| Index: chrome/browser/ui/views/autofill/save_card_bubble_views.cc |
| diff --git a/chrome/browser/ui/views/autofill/save_card_bubble_views.cc b/chrome/browser/ui/views/autofill/save_card_bubble_views.cc |
| index 64d7ae5915fc910753422c294294510b1c10c552..31367ade6fca669e9abac98394a06fc4b9ed30dc 100644 |
| --- a/chrome/browser/ui/views/autofill/save_card_bubble_views.cc |
| +++ b/chrome/browser/ui/views/autofill/save_card_bubble_views.cc |
| @@ -5,6 +5,7 @@ |
| #include "chrome/browser/ui/views/autofill/save_card_bubble_views.h" |
| #include "base/strings/utf_string_conversions.h" |
| +#include "chrome/browser/ui/autofill/autofill_dialog_types.h" |
| #include "chrome/browser/ui/autofill/save_card_bubble_controller.h" |
| #include "grit/components_strings.h" |
| #include "ui/base/l10n/l10n_util.h" |
| @@ -12,6 +13,8 @@ |
| #include "ui/views/controls/button/blue_button.h" |
| #include "ui/views/controls/button/label_button.h" |
| #include "ui/views/controls/link.h" |
| +#include "ui/views/controls/styled_label.h" |
| +#include "ui/views/layout/box_layout.h" |
| #include "ui/views/layout/grid_layout.h" |
| #include "ui/views/layout/layout_constants.h" |
| @@ -31,6 +34,20 @@ const bool kIsOkButtonOnLeftSide = true; |
| const bool kIsOkButtonOnLeftSide = false; |
| #endif |
| +views::StyledLabel* CreateLegalMessageLineLabel( |
|
Evan Stade
2015/11/18 00:21:13
return scoped_ptr
bondd
2015/11/18 01:59:40
Done.
|
| + const autofill::SaveCardBubbleController::LegalMessageLine& line, |
| + views::StyledLabelListener* listener) { |
| + views::StyledLabel* label = new views::StyledLabel(line.text, listener); |
| + const std::vector<autofill::SaveCardBubbleController::LegalMessageLine::Link>& |
|
Evan Stade
2015/11/18 00:21:13
this anonymous namespace should be inside the auto
bondd
2015/11/18 01:59:40
Done.
|
| + links = line.links; |
| + for (size_t i = 0; i < links.size(); ++i) { |
| + label->AddStyleRange(links[i].range, |
| + views::StyledLabel::RangeStyleInfo::CreateForLink()); |
| + } |
| + label->SizeToFit(kWidthOfMessageText); |
| + return label; |
| +} |
| + |
| } // namespace |
| namespace autofill { |
| @@ -91,14 +108,38 @@ void SaveCardBubbleViews::LinkClicked(views::Link* source, int event_flags) { |
| controller_->OnLearnMoreClicked(); |
| } |
| -void SaveCardBubbleViews::Init() { |
| +void SaveCardBubbleViews::StyledLabelLinkClicked(views::StyledLabel* label, |
| + const gfx::Range& range, |
| + int event_flags) { |
| + // Index of |label| within its parent's view hierarchy is the same as the |
| + // legal message line index. DCHECK this assumption to guard against future |
| + // layout changes. |
| + DCHECK(static_cast<size_t>(label->parent()->child_count()) == |
|
Evan Stade
2015/11/18 00:21:13
DCHECK_EQ
bondd
2015/11/18 01:59:40
Done.
|
| + controller_->GetLegalMessageLines().size()); |
| + int line_index = label->parent()->GetIndexOf(label); |
|
Evan Stade
2015/11/18 00:21:13
don't need this local variable
bondd
2015/11/18 01:59:40
Done. Sometimes I prefer breaking a line up with a
Evan Stade
2015/11/18 22:01:18
my reasoning is that saving it as a local variable
|
| + |
| + const std::vector<SaveCardBubbleController::LegalMessageLine::Link>& links = |
| + controller_->GetLegalMessageLines()[line_index].links; |
| + for (size_t i = 0; i < links.size(); ++i) { |
| + if (links[i].range == range) { |
| + controller_->OnLegalMessageLinkClicked(links[i].url); |
| + return; |
| + } |
| + } |
|
Evan Stade
2015/11/18 00:21:13
nit: \n
bondd
2015/11/18 01:59:40
Done.
|
| + // |range| was not found. |
| + NOTREACHED(); |
| +} |
| + |
| +// Create view containing everything except for the footnote. |
| +scoped_ptr<views::View> SaveCardBubbleViews::CreateMainContentView() { |
| enum { |
| COLUMN_SET_ID_MESSAGE, |
| COLUMN_SET_ID_BUTTONS, |
| }; |
| - GridLayout* layout = new GridLayout(this); |
| - SetLayoutManager(layout); |
| + scoped_ptr<View> view(new View()); |
| + GridLayout* layout = new GridLayout(view.get()); |
| + view->SetLayoutManager(layout); |
| // Set up ColumnSet that will contain the full-width message text. |
| int horizontal_inset = GetBubbleFrameView()->GetTitleInsets().left(); |
| @@ -124,6 +165,7 @@ void SaveCardBubbleViews::Init() { |
| // Create "learn more" link and add it to layout. |
| learn_more_link_ = new views::Link(l10n_util::GetStringUTF16(IDS_LEARN_MORE)); |
| + learn_more_link_->SetUnderline(false); |
| learn_more_link_->set_listener(this); |
| layout->StartRow(0, COLUMN_SET_ID_BUTTONS); |
| layout->AddView(learn_more_link_); |
| @@ -147,8 +189,39 @@ void SaveCardBubbleViews::Init() { |
| } |
| layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing); |
| + return view; |
| +} |
| + |
| +// Create view containing the legal message text. |
| +scoped_ptr<views::View> SaveCardBubbleViews::CreateFootnoteView() { |
| + // Use BoxLayout to provide insets around the label. |
| + scoped_ptr<View> view(new View()); |
| + int horizontal_inset = GetBubbleFrameView()->GetTitleInsets().left(); |
|
Evan Stade
2015/11/18 00:21:13
don't need this local var
bondd
2015/11/18 01:59:40
Done.
|
| + view->SetLayoutManager( |
| + new views::BoxLayout(views::BoxLayout::kVertical, horizontal_inset, |
| + views::kRelatedControlVerticalSpacing, 0)); |
| + view->SetBorder( |
| + views::Border::CreateSolidSidedBorder(1, 0, 0, 0, kSubtleBorderColor)); |
| + view->set_background( |
| + views::Background::CreateSolidBackground(kLightShadingColor)); |
| + |
| + // Add a StyledLabel for each line of the legal message. |
| + for (size_t i = 0; i < controller_->GetLegalMessageLines().size(); ++i) { |
| + views::StyledLabel* label = CreateLegalMessageLineLabel( |
| + controller_->GetLegalMessageLines()[i], this); |
|
Evan Stade
2015/11/18 00:21:13
no need for a local var for this
bondd
2015/11/18 01:59:40
Done.
|
| + view->AddChildView(label); |
| + } |
| + |
| + return view; |
| +} |
| + |
| +void SaveCardBubbleViews::Init() { |
| + SetLayoutManager(new views::BoxLayout(views::BoxLayout::kVertical, 0, 0, 0)); |
| + AddChildView(CreateMainContentView().release()); |
| + if (!controller_->GetLegalMessageLines().empty()) |
| + AddChildView(CreateFootnoteView().release()); |
| + |
| set_margins(gfx::Insets(1, 0, 1, 0)); |
| - Layout(); |
| } |
| } // namespace autofill |