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

Side by Side Diff: chrome/browser/ui/views/website_settings/chooser_bubble_ui_view.cc

Issue 1545773002: Address some TODOs for ChooserBubbleDelegate class (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: updated comments Created 4 years, 11 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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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/website_settings/chooser_bubble_ui_view.h" 5 #include "chrome/browser/ui/views/website_settings/chooser_bubble_ui_view.h"
6 6
7 #include <algorithm>
7 #include <string> 8 #include <string>
8 9
9 #include "base/macros.h" 10 #include "base/macros.h"
10 #include "base/prefs/pref_service.h" 11 #include "base/prefs/pref_service.h"
11 #include "base/strings/string16.h" 12 #include "base/strings/string16.h"
12 #include "chrome/browser/profiles/profile.h" 13 #include "chrome/browser/profiles/profile.h"
13 #include "chrome/browser/ui/browser.h" 14 #include "chrome/browser/ui/browser.h"
14 #include "chrome/browser/ui/views/exclusive_access_bubble_views.h" 15 #include "chrome/browser/ui/views/exclusive_access_bubble_views.h"
15 #include "chrome/browser/ui/views/frame/browser_view.h" 16 #include "chrome/browser/ui/views/frame/browser_view.h"
16 #include "chrome/browser/ui/views/frame/top_container_view.h" 17 #include "chrome/browser/ui/views/frame/top_container_view.h"
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
108 ui::TableColumn ChooserTableColumn(int id, const std::string& title) { 109 ui::TableColumn ChooserTableColumn(int id, const std::string& title) {
109 ui::TableColumn column; 110 ui::TableColumn column;
110 column.id = id; 111 column.id = id;
111 column.title = base::ASCIIToUTF16(title.c_str()); 112 column.title = base::ASCIIToUTF16(title.c_str());
112 return column; 113 return column;
113 } 114 }
114 115
115 class ChooserTableModel : public ui::TableModel, 116 class ChooserTableModel : public ui::TableModel,
116 public ChooserBubbleDelegate::Observer { 117 public ChooserBubbleDelegate::Observer {
117 public: 118 public:
118 explicit ChooserTableModel(ChooserBubbleDelegate* chooser_bubble_delegate) 119 explicit ChooserTableModel(ChooserBubbleDelegate* chooser_bubble_delegate);
119 : observer_(nullptr), chooser_bubble_delegate_(chooser_bubble_delegate) {
120 chooser_bubble_delegate_->set_observer(this);
121 }
122 120
123 // ui::TableModel: 121 // ui::TableModel:
124 int RowCount() override { 122 int RowCount() override;
125 const std::vector<base::string16>& device_names = 123 base::string16 GetText(int row, int column_id) override;
126 chooser_bubble_delegate_->GetOptions(); 124 void SetObserver(ui::TableModelObserver* observer) override;
127 if (device_names.empty()) {
128 // Here it returns 1 when there is no device. In this case, the
129 // table view still needs to display a text message saying no
130 // devices found, so the number of rows is 1.
131 return 1;
132 } else {
133 return static_cast<int>(device_names.size());
134 }
135 }
136 125
137 // ui::TableModel: 126 // ChooserBubbleDelegate::Observer:
138 base::string16 GetText(int row, int column_id) override { 127 void OnOptionsInitialized() override;
139 const std::vector<base::string16>& device_names = 128 void OnOptionAdded(size_t index) override;
140 chooser_bubble_delegate_->GetOptions(); 129 void OnOptionRemoved(size_t index) override;
141 if (device_names.empty()) {
142 DCHECK(row == 0);
143 return l10n_util::GetStringUTF16(
144 IDS_CHOOSER_BUBBLE_NO_DEVICES_FOUND_PROMPT);
145 } else if (row >= 0 && row < static_cast<int>(device_names.size())) {
146 return device_names[row];
147 } else {
148 NOTREACHED();
149 return base::string16();
150 }
151 }
152 130
153 // ui::TableModel: 131 void Update();
154 void SetObserver(ui::TableModelObserver* observer) override { 132 void SetConnectButton(views::LabelButton* connect_button);
155 observer_ = observer;
156 }
157
158 // ChooserOptions::Observer:
159 void OnOptionsInitialized() override {
160 if (observer_) {
161 observer_->OnModelChanged();
162 Update();
163 }
164 }
165
166 // ChooserOptions::Observer:
167 void OnOptionAdded(int index) override {
168 if (observer_) {
169 observer_->OnItemsAdded(index, 1);
170 Update();
171 }
172 }
173
174 // ChooserOptions::Observer:
175 void OnOptionRemoved(int index) override {
176 if (observer_) {
177 observer_->OnItemsRemoved(index, 1);
178 Update();
179 }
180 }
181
182 void Update() {
183 views::TableView* table_view = static_cast<views::TableView*>(observer_);
184
185 if (chooser_bubble_delegate_->GetOptions().empty()) {
186 observer_->OnModelChanged();
187 table_view->SetEnabled(false);
188 } else {
189 table_view->SetEnabled(true);
190 }
191 }
192
193 void SetConnectButton(views::LabelButton* connect_button) {
194 connect_button_ = connect_button;
195 }
196 133
197 private: 134 private:
198 ui::TableModelObserver* observer_; 135 ui::TableModelObserver* observer_;
199 ChooserBubbleDelegate* chooser_bubble_delegate_; 136 ChooserBubbleDelegate* chooser_bubble_delegate_;
200 views::LabelButton* connect_button_; 137 views::LabelButton* connect_button_;
201 }; 138 };
202 139
203 ChooserBubbleUiViewDelegate::ChooserBubbleUiViewDelegate( 140 ChooserBubbleUiViewDelegate::ChooserBubbleUiViewDelegate(
204 views::View* anchor_view, 141 views::View* anchor_view,
205 views::BubbleBorder::Arrow anchor_arrow, 142 views::BubbleBorder::Arrow anchor_arrow,
(...skipping 19 matching lines...) Expand all
225 chooser_table_model_ = new ChooserTableModel(chooser_bubble_delegate_); 162 chooser_table_model_ = new ChooserTableModel(chooser_bubble_delegate_);
226 table_view_ = new views::TableView(chooser_table_model_, table_columns, 163 table_view_ = new views::TableView(chooser_table_model_, table_columns,
227 views::TEXT_ONLY, true); 164 views::TEXT_ONLY, true);
228 table_view_->set_select_on_remove(false); 165 table_view_->set_select_on_remove(false);
229 chooser_table_model_->SetObserver(table_view_); 166 chooser_table_model_->SetObserver(table_view_);
230 table_view_->SetObserver(this); 167 table_view_->SetObserver(this);
231 layout->AddView(table_view_->CreateParentIfNecessary(), 1, 1, 168 layout->AddView(table_view_->CreateParentIfNecessary(), 1, 1,
232 views::GridLayout::FILL, views::GridLayout::FILL, 169 views::GridLayout::FILL, views::GridLayout::FILL,
233 kChooserPermissionBubbleWidth, 170 kChooserPermissionBubbleWidth,
234 kChooserPermissionBubbleHeight); 171 kChooserPermissionBubbleHeight);
235 if (chooser_bubble_delegate_->GetOptions().empty()) { 172 if (chooser_bubble_delegate_->NumOptions() == 0) {
236 table_view_->SetEnabled(false); 173 table_view_->SetEnabled(false);
237 } 174 }
238 175
239 layout->AddPaddingRow(0, kItemMajorSpacing); 176 layout->AddPaddingRow(0, kItemMajorSpacing);
240 177
241 views::View* button_row = new views::View(); 178 views::View* button_row = new views::View();
242 views::GridLayout* button_layout = new views::GridLayout(button_row); 179 views::GridLayout* button_layout = new views::GridLayout(button_row);
243 views::ColumnSet* button_columns = button_layout->AddColumnSet(0); 180 views::ColumnSet* button_columns = button_layout->AddColumnSet(0);
244 button_row->SetLayoutManager(button_layout); 181 button_row->SetLayoutManager(button_layout);
245 layout->StartRow(1, 0); 182 layout->StartRow(1, 0);
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
337 views::BubbleBorder::Arrow adjusted_arrow = anchor_arrow; 274 views::BubbleBorder::Arrow adjusted_arrow = anchor_arrow;
338 if (base::i18n::IsRTL()) 275 if (base::i18n::IsRTL())
339 adjusted_arrow = views::BubbleBorder::horizontal_mirror(adjusted_arrow); 276 adjusted_arrow = views::BubbleBorder::horizontal_mirror(adjusted_arrow);
340 frame->SetBubbleBorder(scoped_ptr<views::BubbleBorder>( 277 frame->SetBubbleBorder(scoped_ptr<views::BubbleBorder>(
341 new views::BubbleBorder(adjusted_arrow, shadow(), color()))); 278 new views::BubbleBorder(adjusted_arrow, shadow(), color())));
342 279
343 // Reposition the bubble based on the updated arrow and view. 280 // Reposition the bubble based on the updated arrow and view.
344 SetAnchorView(anchor_view); 281 SetAnchorView(anchor_view);
345 } 282 }
346 283
284 ChooserTableModel::ChooserTableModel(
285 ChooserBubbleDelegate* chooser_bubble_delegate)
286 : observer_(nullptr), chooser_bubble_delegate_(chooser_bubble_delegate) {
287 chooser_bubble_delegate_->set_observer(this);
288 }
289
290 int ChooserTableModel::RowCount() {
291 // When there are no devices, the table contains a message saying there
292 // are no devices, so the number of rows is always at least 1.
293 return std::max(static_cast<int>(chooser_bubble_delegate_->NumOptions()), 1);
294 }
295
296 base::string16 ChooserTableModel::GetText(int row, int column_id) {
297 int num_options = static_cast<int>(chooser_bubble_delegate_->NumOptions());
298 if (num_options == 0) {
299 DCHECK_EQ(0, row);
300 return l10n_util::GetStringUTF16(
301 IDS_CHOOSER_BUBBLE_NO_DEVICES_FOUND_PROMPT);
302 }
303
304 DCHECK_GE(row, 0);
305 DCHECK_LT(row, num_options);
306 return chooser_bubble_delegate_->GetOption(static_cast<size_t>(row));
307 }
308
309 void ChooserTableModel::SetObserver(ui::TableModelObserver* observer) {
310 observer_ = observer;
311 }
312
313 void ChooserTableModel::OnOptionsInitialized() {
314 if (observer_) {
315 observer_->OnModelChanged();
316 Update();
317 }
318 }
319
320 void ChooserTableModel::OnOptionAdded(size_t index) {
321 if (observer_) {
322 observer_->OnItemsAdded(static_cast<int>(index), 1);
323 Update();
324 }
325 }
326
327 void ChooserTableModel::OnOptionRemoved(size_t index) {
328 if (observer_) {
329 observer_->OnItemsRemoved(static_cast<int>(index), 1);
330 Update();
331 }
332 }
333
334 void ChooserTableModel::Update() {
335 views::TableView* table_view = static_cast<views::TableView*>(observer_);
336
337 if (chooser_bubble_delegate_->NumOptions() == 0) {
338 observer_->OnModelChanged();
339 table_view->SetEnabled(false);
340 } else {
341 table_view->SetEnabled(true);
342 }
343 }
344
345 void ChooserTableModel::SetConnectButton(views::LabelButton* connect_button) {
346 connect_button_ = connect_button;
347 }
348
347 ////////////////////////////////////////////////////////////////////////////// 349 //////////////////////////////////////////////////////////////////////////////
348 // ChooserBubbleUiView 350 // ChooserBubbleUiView
349 351
350 ChooserBubbleUiView::ChooserBubbleUiView( 352 ChooserBubbleUiView::ChooserBubbleUiView(
351 Browser* browser, 353 Browser* browser,
352 ChooserBubbleDelegate* chooser_bubble_delegate) 354 ChooserBubbleDelegate* chooser_bubble_delegate)
353 : browser_(browser), 355 : browser_(browser),
354 chooser_bubble_delegate_(chooser_bubble_delegate), 356 chooser_bubble_delegate_(chooser_bubble_delegate),
355 chooser_bubble_ui_view_delegate_(nullptr) { 357 chooser_bubble_ui_view_delegate_(nullptr) {
356 DCHECK(browser_); 358 DCHECK(browser_);
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
398 return browser_view->exclusive_access_bubble()->GetView(); 400 return browser_view->exclusive_access_bubble()->GetView();
399 401
400 return browser_view->top_container(); 402 return browser_view->top_container();
401 } 403 }
402 404
403 views::BubbleBorder::Arrow ChooserBubbleUiView::GetAnchorArrow() { 405 views::BubbleBorder::Arrow ChooserBubbleUiView::GetAnchorArrow() {
404 if (browser_->SupportsWindowFeature(Browser::FEATURE_LOCATIONBAR)) 406 if (browser_->SupportsWindowFeature(Browser::FEATURE_LOCATIONBAR))
405 return views::BubbleBorder::TOP_LEFT; 407 return views::BubbleBorder::TOP_LEFT;
406 return views::BubbleBorder::NONE; 408 return views::BubbleBorder::NONE;
407 } 409 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698