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

Side by Side Diff: chrome/browser/ui/views/toolbar/toolbar_actions_bar_bubble_views.cc

Issue 1877143002: Convert ToolbarActionsBarBubbleViews to BubbleDialogDelegate (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: . Created 4 years, 8 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 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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/toolbar/toolbar_actions_bar_bubble_views.h" 5 #include "chrome/browser/ui/views/toolbar/toolbar_actions_bar_bubble_views.h"
6 6
7 #include "chrome/browser/ui/toolbar/toolbar_actions_bar_bubble_delegate.h" 7 #include "chrome/browser/ui/toolbar/toolbar_actions_bar_bubble_delegate.h"
8 #include "chrome/browser/ui/view_ids.h" 8 #include "chrome/browser/ui/view_ids.h"
9 #include "chrome/grit/locale_settings.h" 9 #include "chrome/grit/locale_settings.h"
10 #include "ui/base/resource/resource_bundle.h" 10 #include "ui/base/resource/resource_bundle.h"
11 #include "ui/views/controls/button/label_button.h" 11 #include "ui/views/controls/button/label_button.h"
12 #include "ui/views/controls/label.h" 12 #include "ui/views/controls/label.h"
13 #include "ui/views/controls/link.h" 13 #include "ui/views/controls/link.h"
14 #include "ui/views/layout/grid_layout.h" 14 #include "ui/views/layout/box_layout.h"
15 #include "ui/views/layout/layout_constants.h" 15 #include "ui/views/layout/layout_constants.h"
16 16
17 namespace { 17 namespace {
18 const int kListPadding = 10; 18 const int kListPadding = 10;
19 } 19 }
20 20
21 ToolbarActionsBarBubbleViews::ToolbarActionsBarBubbleViews( 21 ToolbarActionsBarBubbleViews::ToolbarActionsBarBubbleViews(
22 views::View* anchor_view, 22 views::View* anchor_view,
23 std::unique_ptr<ToolbarActionsBarBubbleDelegate> delegate) 23 std::unique_ptr<ToolbarActionsBarBubbleDelegate> delegate)
24 : views::BubbleDelegateView(anchor_view, views::BubbleBorder::TOP_RIGHT), 24 : views::BubbleDialogDelegateView(anchor_view,
25 anchor_view_(anchor_view), 25 views::BubbleBorder::TOP_RIGHT),
26 delegate_(std::move(delegate)), 26 delegate_(std::move(delegate)),
27 heading_label_(nullptr),
28 content_label_(nullptr),
29 item_list_(nullptr), 27 item_list_(nullptr),
30 learn_more_button_(nullptr), 28 learn_more_button_(nullptr) {
31 dismiss_button_(nullptr),
32 action_button_(nullptr),
33 acknowledged_(false) {
34 set_close_on_deactivate(delegate_->ShouldCloseOnDeactivate()); 29 set_close_on_deactivate(delegate_->ShouldCloseOnDeactivate());
35 } 30 }
36 31
37 ToolbarActionsBarBubbleViews::~ToolbarActionsBarBubbleViews() {} 32 ToolbarActionsBarBubbleViews::~ToolbarActionsBarBubbleViews() {}
38 33
39 void ToolbarActionsBarBubbleViews::Show() { 34 void ToolbarActionsBarBubbleViews::Show() {
40 delegate_->OnBubbleShown(); 35 delegate_->OnBubbleShown();
41 GetWidget()->Show(); 36 GetWidget()->Show();
42 } 37 }
43 38
39 views::View* ToolbarActionsBarBubbleViews::CreateExtraView() {
40 base::string16 text = delegate_->GetLearnMoreButtonText();
41 if (text.empty())
42 return nullptr;
43
44 learn_more_button_ = new views::Link(text);
45 learn_more_button_->set_listener(this);
46 return learn_more_button_;
47 }
48
49 base::string16 ToolbarActionsBarBubbleViews::GetWindowTitle() const {
50 return delegate_->GetHeadingText();
51 }
52
53 bool ToolbarActionsBarBubbleViews::Cancel() {
54 delegate_->OnBubbleClosed(
55 ToolbarActionsBarBubbleDelegate::CLOSE_DISMISS_USER_ACTION);
56 return true;
57 }
58
59 bool ToolbarActionsBarBubbleViews::Accept() {
60 delegate_->OnBubbleClosed(ToolbarActionsBarBubbleDelegate::CLOSE_EXECUTE);
61 return true;
62 }
63
64 bool ToolbarActionsBarBubbleViews::Close() {
65 if (delegate_) {
66 delegate_->OnBubbleClosed(
67 ToolbarActionsBarBubbleDelegate::CLOSE_DISMISS_DEACTIVATION);
68 }
69 return true;
70 }
71
44 void ToolbarActionsBarBubbleViews::Init() { 72 void ToolbarActionsBarBubbleViews::Init() {
45 views::GridLayout* layout = new views::GridLayout(this); 73 SetLayoutManager(new views::BoxLayout(views::BoxLayout::kVertical, 0, 0,
46 layout->SetInsets(views::kPanelVertMargin, views::kPanelHorizMargin, 74 views::kRelatedControlVerticalSpacing));
47 views::kPanelVertMargin, views::kPanelHorizMargin);
48 SetLayoutManager(layout);
49
50 enum ColumnSetId {
51 HEADER_AND_BODY_COLUMN_SET = 0,
52 LIST_COLUMN_SET,
53 BUTTON_STRIP_COLUMN_SET,
54 };
55
56 views::ColumnSet* header_and_body_cs =
57 layout->AddColumnSet(HEADER_AND_BODY_COLUMN_SET);
58 header_and_body_cs->AddColumn(views::GridLayout::LEADING,
59 views::GridLayout::LEADING, 1,
60 views::GridLayout::USE_PREF, 0, 0);
61 views::ColumnSet* buttons_cs = layout->AddColumnSet(BUTTON_STRIP_COLUMN_SET);
62 buttons_cs->AddColumn(views::GridLayout::LEADING, views::GridLayout::CENTER,
63 0, views::GridLayout::USE_PREF, 0, 0);
64 buttons_cs->AddPaddingColumn(1, 0);
65 buttons_cs->AddColumn(views::GridLayout::TRAILING, views::GridLayout::CENTER,
66 0, views::GridLayout::USE_PREF, 0, 0);
67 buttons_cs->AddPaddingColumn(0, views::kRelatedButtonHSpacing);
68 buttons_cs->AddColumn(views::GridLayout::TRAILING, views::GridLayout::CENTER,
69 0, views::GridLayout::USE_PREF, 0, 0);
70
71 // Add a header.
72 layout->StartRow(0, HEADER_AND_BODY_COLUMN_SET);
73 heading_label_ = new views::Label(delegate_->GetHeadingText());
74 heading_label_->SetFontList(
75 ui::ResourceBundle::GetSharedInstance().GetFontList(
76 ui::ResourceBundle::MediumFont));
77 heading_label_->SetHorizontalAlignment(gfx::ALIGN_LEFT);
78 layout->AddView(heading_label_);
79 layout->AddPaddingRow(0, views::kLabelToControlVerticalSpacing);
80 int width = views::Widget::GetLocalizedContentsWidth(
81 IDS_EXTENSION_TOOLBAR_REDESIGN_NOTIFICATION_BUBBLE_WIDTH_CHARS);
82 75
83 // Add the content string. 76 // Add the content string.
84 layout->StartRow(0, HEADER_AND_BODY_COLUMN_SET); 77 views::Label* content_label = new views::Label(
85 content_label_ = new views::Label( 78 delegate_->GetBodyText(GetAnchorView()->id() == VIEW_ID_BROWSER_ACTION));
86 delegate_->GetBodyText(anchor_view_->id() == VIEW_ID_BROWSER_ACTION)); 79 content_label->SetMultiLine(true);
87 content_label_->SetMultiLine(true); 80 int width = views::Widget::GetLocalizedContentsWidth(
88 content_label_->SizeToFit(width); 81 IDS_EXTENSION_TOOLBAR_REDESIGN_NOTIFICATION_BUBBLE_WIDTH_CHARS);
89 content_label_->SetHorizontalAlignment(gfx::ALIGN_LEFT); 82 content_label->SizeToFit(width);
90 layout->AddView(content_label_); 83 content_label->SetHorizontalAlignment(gfx::ALIGN_LEFT);
84 AddChildView(content_label);
91 85
92 base::string16 item_list = delegate_->GetItemListText(); 86 base::string16 item_list = delegate_->GetItemListText();
93 if (!item_list.empty()) { 87 if (!item_list.empty()) {
94 views::ColumnSet* list_cs = layout->AddColumnSet(LIST_COLUMN_SET);
95 list_cs->AddPaddingColumn(0, kListPadding);
96 list_cs->AddColumn(views::GridLayout::LEADING,
97 views::GridLayout::CENTER,
98 0,
99 views::GridLayout::USE_PREF,
100 0, 0);
101
102 layout->StartRowWithPadding(0, LIST_COLUMN_SET, 0, 0);
103 item_list_ = new views::Label(item_list); 88 item_list_ = new views::Label(item_list);
89 item_list_->SetBorder(
90 views::Border::CreateEmptyBorder(0, kListPadding, 0, 0));
104 item_list_->SetMultiLine(true); 91 item_list_->SetMultiLine(true);
92 item_list_->SizeToFit(width);
105 item_list_->SetHorizontalAlignment(gfx::ALIGN_LEFT); 93 item_list_->SetHorizontalAlignment(gfx::ALIGN_LEFT);
106 item_list_->SizeToFit(width); 94 AddChildView(item_list_);
107 layout->AddView(item_list_);
108 }
109
110 layout->AddPaddingRow(0, views::kLabelToControlVerticalSpacing);
111
112 layout->StartRow(0, BUTTON_STRIP_COLUMN_SET);
113 base::string16 learn_more_text = delegate_->GetLearnMoreButtonText();
114 if (!learn_more_text.empty()) {
115 learn_more_button_ = new views::Link(learn_more_text);
116 learn_more_button_->set_listener(this);
117 layout->AddView(learn_more_button_);
118 } else {
119 layout->SkipColumns(1);
120 }
121
122 base::string16 dismiss_button_text = delegate_->GetDismissButtonText();
123 if (!dismiss_button_text.empty()) {
124 dismiss_button_ = new views::LabelButton(this, dismiss_button_text);
125 dismiss_button_->SetStyle(views::Button::STYLE_BUTTON);
126 layout->AddView(dismiss_button_, 1, 1, views::GridLayout::TRAILING,
127 views::GridLayout::FILL);
128 } else {
129 layout->SkipColumns(1);
130 }
131
132 action_button_ =
133 new views::LabelButton(this, delegate_->GetActionButtonText());
134 action_button_->SetStyle(views::Button::STYLE_BUTTON);
135 layout->AddView(action_button_, 1, 1, views::GridLayout::TRAILING,
136 views::GridLayout::FILL);
137 }
138
139 void ToolbarActionsBarBubbleViews::OnWidgetDestroying(views::Widget* widget) {
140 BubbleDelegateView::OnWidgetDestroying(widget);
141 if (!acknowledged_) {
142 ToolbarActionsBarBubbleDelegate::CloseAction close_action =
143 close_reason() == CloseReason::DEACTIVATION
144 ? ToolbarActionsBarBubbleDelegate::CLOSE_DISMISS_DEACTIVATION
145 : ToolbarActionsBarBubbleDelegate::CLOSE_DISMISS_USER_ACTION;
146 delegate_->OnBubbleClosed(close_action);
147 acknowledged_ = true;
148 } 95 }
149 } 96 }
150 97
151 void ToolbarActionsBarBubbleViews::ButtonPressed(views::Button* sender, 98 int ToolbarActionsBarBubbleViews::GetDialogButtons() const {
152 const ui::Event& event) { 99 int buttons = ui::DIALOG_BUTTON_OK;
153 if (sender == action_button_) { 100 if (!delegate_->GetDismissButtonText().empty())
154 delegate_->OnBubbleClosed(ToolbarActionsBarBubbleDelegate::CLOSE_EXECUTE); 101 buttons |= ui::DIALOG_BUTTON_CANCEL;
155 } else { 102 return buttons;
156 DCHECK_EQ(dismiss_button_, sender); 103 }
157 delegate_->OnBubbleClosed( 104
158 ToolbarActionsBarBubbleDelegate::CLOSE_DISMISS_USER_ACTION); 105 base::string16 ToolbarActionsBarBubbleViews::GetDialogButtonLabel(
159 } 106 ui::DialogButton button) const {
160 acknowledged_ = true; 107 return button == ui::DIALOG_BUTTON_OK ? delegate_->GetActionButtonText()
161 GetWidget()->Close(); 108 : delegate_->GetDismissButtonText();
162 } 109 }
163 110
164 void ToolbarActionsBarBubbleViews::LinkClicked(views::Link* link, 111 void ToolbarActionsBarBubbleViews::LinkClicked(views::Link* link,
165 int event_flags) { 112 int event_flags) {
166 delegate_->OnBubbleClosed(ToolbarActionsBarBubbleDelegate::CLOSE_LEARN_MORE); 113 delegate_->OnBubbleClosed(ToolbarActionsBarBubbleDelegate::CLOSE_LEARN_MORE);
167 acknowledged_ = true; 114 // Reset delegate so we don't send extra OnBubbleClosed()s.
115 delegate_.reset();
168 GetWidget()->Close(); 116 GetWidget()->Close();
169 } 117 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698