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

Side by Side Diff: chrome/browser/ui/views/chooser_content_view.cc

Issue 2029863002: Refactor ChooserBubbleUiViewDelegate (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: make ChooserContentView::ChooserControllerDestroying a private function Created 4 years, 6 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
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "chrome/browser/ui/views/chooser_content_view.h"
6
7 #include "chrome/grit/generated_resources.h"
8 #include "components/chooser_controller/chooser_controller.h"
9 #include "ui/base/l10n/l10n_util.h"
10 #include "ui/base/models/table_model.h"
11 #include "ui/views/controls/styled_label.h"
12 #include "ui/views/controls/table/table_view.h"
13 #include "ui/views/controls/table/table_view_observer.h"
14 #include "ui/views/layout/box_layout.h"
15 #include "ui/views/layout/layout_constants.h"
16
17 namespace {
18
19 const int kChooserWidth = 300;
20
21 const int kChooserHeight = 200;
22
23 } // namespace
24
25 class ChooserTableModel : public ui::TableModel,
26 public ChooserController::Observer {
27 public:
28 explicit ChooserTableModel(ChooserController* chooser_controller);
29 ~ChooserTableModel() override {}
30
31 // ui::TableModel:
32 int RowCount() override;
33 base::string16 GetText(int row, int column_id) override;
34 void SetObserver(ui::TableModelObserver* observer) override;
35
36 // ChooserController::Observer:
37 void OnOptionsInitialized() override;
38 void OnOptionAdded(size_t index) override;
39 void OnOptionRemoved(size_t index) override;
40
41 void Update();
42 void ChooserControllerDestroying();
43
44 private:
45 ui::TableModelObserver* observer_;
46 ChooserController* chooser_controller_;
47
48 DISALLOW_COPY_AND_ASSIGN(ChooserTableModel);
49 };
50
51 ChooserTableModel::ChooserTableModel(ChooserController* chooser_controller)
52 : observer_(nullptr), chooser_controller_(chooser_controller) {
53 chooser_controller_->set_observer(this);
54 }
55
56 int ChooserTableModel::RowCount() {
57 if (!chooser_controller_)
58 return 0;
59 // When there are no devices, the table contains a message saying there
60 // are no devices, so the number of rows is always at least 1.
61 return std::max(static_cast<int>(chooser_controller_->NumOptions()), 1);
62 }
63
64 base::string16 ChooserTableModel::GetText(int row, int column_id) {
65 if (!chooser_controller_)
66 return base::string16();
67
68 int num_options = static_cast<int>(chooser_controller_->NumOptions());
69 if (num_options == 0) {
70 DCHECK_EQ(0, row);
71 return l10n_util::GetStringUTF16(
72 IDS_CHOOSER_BUBBLE_NO_DEVICES_FOUND_PROMPT);
73 }
74
75 DCHECK_GE(row, 0);
76 DCHECK_LT(row, num_options);
77 return chooser_controller_->GetOption(static_cast<size_t>(row));
78 }
79
80 void ChooserTableModel::SetObserver(ui::TableModelObserver* observer) {
81 observer_ = observer;
82 }
83
84 void ChooserTableModel::OnOptionsInitialized() {
85 if (observer_) {
86 observer_->OnModelChanged();
87 Update();
88 }
89 }
90
91 void ChooserTableModel::OnOptionAdded(size_t index) {
92 if (observer_) {
93 observer_->OnItemsAdded(static_cast<int>(index), 1);
94 Update();
95 }
96 }
97
98 void ChooserTableModel::OnOptionRemoved(size_t index) {
99 if (observer_) {
100 observer_->OnItemsRemoved(static_cast<int>(index), 1);
101 Update();
102 }
103 }
104
105 void ChooserTableModel::Update() {
106 if (!chooser_controller_)
107 return;
108
109 views::TableView* table_view = static_cast<views::TableView*>(observer_);
110
111 if (chooser_controller_->NumOptions() == 0) {
112 observer_->OnModelChanged();
113 table_view->SetEnabled(false);
114 } else {
115 table_view->SetEnabled(true);
116 }
117 }
118
119 void ChooserTableModel::ChooserControllerDestroying() {
120 chooser_controller_ = nullptr;
121 }
122
123 ChooserContentView::ChooserContentView(views::TableViewObserver* observer,
124 ChooserController* chooser_controller)
125 : chooser_controller_(chooser_controller), table_view_(nullptr) {
126 std::vector<ui::TableColumn> table_columns;
127 table_columns.push_back(ui::TableColumn());
128 chooser_table_model_.reset(new ChooserTableModel(chooser_controller_));
129 table_view_ = new views::TableView(chooser_table_model_.get(), table_columns,
130 views::TEXT_ONLY, true);
131 table_view_->set_select_on_remove(false);
132 chooser_table_model_->SetObserver(table_view_);
133 table_view_->SetObserver(observer);
134 table_view_->SetEnabled(chooser_controller_->NumOptions() > 0);
135
136 views::BoxLayout* layout = new views::BoxLayout(
137 views::BoxLayout::kVertical, 0, 0, views::kRelatedControlVerticalSpacing);
138 SetLayoutManager(layout);
139 views::View* table_parent = table_view_->CreateParentIfNecessary();
140 AddChildView(table_parent);
141 layout->SetFlexForView(table_parent, 1);
142 }
143
144 ChooserContentView::~ChooserContentView() {
145 table_view_->SetModel(nullptr);
146 chooser_table_model_->SetObserver(nullptr);
147 }
148
149 gfx::Size ChooserContentView::GetPreferredSize() const {
150 return gfx::Size(kChooserWidth, kChooserHeight);
151 }
152
153 base::string16 ChooserContentView::GetDialogButtonLabel(
154 ui::DialogButton button) const {
155 return l10n_util::GetStringUTF16(button == ui::DIALOG_BUTTON_OK
156 ? IDS_CHOOSER_BUBBLE_CONNECT_BUTTON_TEXT
157 : IDS_CHOOSER_BUBBLE_CANCEL_BUTTON_TEXT);
158 }
159
160 bool ChooserContentView::IsDialogButtonEnabled(ui::DialogButton button) const {
161 return button != ui::DIALOG_BUTTON_OK ||
162 !table_view_->selection_model().empty();
163 }
164
165 views::StyledLabel* ChooserContentView::CreateFootnoteView(
166 views::StyledLabelListener* listener) const {
167 base::string16 link =
168 l10n_util::GetStringUTF16(IDS_CHOOSER_BUBBLE_GET_HELP_LINK_TEXT);
169 size_t offset = 0;
170 base::string16 text = l10n_util::GetStringFUTF16(
171 IDS_CHOOSER_BUBBLE_FOOTNOTE_TEXT, link, &offset);
172 views::StyledLabel* styled_label = new views::StyledLabel(text, listener);
173 styled_label->AddStyleRange(
174 gfx::Range(offset, offset + link.length()),
175 views::StyledLabel::RangeStyleInfo::CreateForLink());
176 return styled_label;
177 }
178
179 void ChooserContentView::Accept() {
180 if (chooser_controller_) {
181 chooser_controller_->Select(table_view_->selection_model().active());
182 ChooserControllerDestroying();
183 }
184 }
185
186 void ChooserContentView::Cancel() {
187 if (chooser_controller_) {
188 chooser_controller_->Cancel();
189 ChooserControllerDestroying();
190 }
191 }
192
193 void ChooserContentView::Close() {
194 if (chooser_controller_) {
195 chooser_controller_->Close();
196 ChooserControllerDestroying();
197 }
198 }
199
200 void ChooserContentView::StyledLabelLinkClicked() const {
201 if (chooser_controller_)
202 chooser_controller_->OpenHelpCenterUrl();
203 }
204
205 void ChooserContentView::UpdateTableModel() {
206 chooser_table_model_->Update();
207 }
208
209 void ChooserContentView::ChooserControllerDestroying() {
210 chooser_controller_ = nullptr;
211 chooser_table_model_->ChooserControllerDestroying();
212 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/views/chooser_content_view.h ('k') | chrome/browser/ui/views/chooser_content_view_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698