| OLD | NEW |
| 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 <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "base/macros.h" | 9 #include "base/macros.h" |
| 10 #include "base/prefs/pref_service.h" | 10 #include "base/prefs/pref_service.h" |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 115 class ChooserTableModel : public ui::TableModel, | 115 class ChooserTableModel : public ui::TableModel, |
| 116 public ChooserBubbleDelegate::Observer { | 116 public ChooserBubbleDelegate::Observer { |
| 117 public: | 117 public: |
| 118 explicit ChooserTableModel(ChooserBubbleDelegate* chooser_bubble_delegate) | 118 explicit ChooserTableModel(ChooserBubbleDelegate* chooser_bubble_delegate) |
| 119 : observer_(nullptr), chooser_bubble_delegate_(chooser_bubble_delegate) { | 119 : observer_(nullptr), chooser_bubble_delegate_(chooser_bubble_delegate) { |
| 120 chooser_bubble_delegate_->set_observer(this); | 120 chooser_bubble_delegate_->set_observer(this); |
| 121 } | 121 } |
| 122 | 122 |
| 123 // ui::TableModel: | 123 // ui::TableModel: |
| 124 int RowCount() override { | 124 int RowCount() override { |
| 125 const std::vector<base::string16>& device_names = | 125 size_t num_options = chooser_bubble_delegate_->NumOptions(); |
| 126 chooser_bubble_delegate_->GetOptions(); | 126 // Here it returns 1 when there is no device. In this case, the |
| 127 if (device_names.empty()) { | 127 // table view still needs to display a text message saying no |
| 128 // Here it returns 1 when there is no device. In this case, the | 128 // devices found, so the number of rows is 1. |
| 129 // table view still needs to display a text message saying no | 129 return num_options == 0 ? 1 : static_cast<int>(num_options); |
| 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 } | 130 } |
| 136 | 131 |
| 137 // ui::TableModel: | 132 // ui::TableModel: |
| 138 base::string16 GetText(int row, int column_id) override { | 133 base::string16 GetText(int row, int column_id) override { |
| 139 const std::vector<base::string16>& device_names = | 134 size_t num_options = chooser_bubble_delegate_->NumOptions(); |
| 140 chooser_bubble_delegate_->GetOptions(); | 135 if (num_options == 0) { |
| 141 if (device_names.empty()) { | |
| 142 DCHECK(row == 0); | 136 DCHECK(row == 0); |
| 143 return l10n_util::GetStringUTF16( | 137 return l10n_util::GetStringUTF16( |
| 144 IDS_CHOOSER_BUBBLE_NO_DEVICES_FOUND_PROMPT); | 138 IDS_CHOOSER_BUBBLE_NO_DEVICES_FOUND_PROMPT); |
| 145 } else if (row >= 0 && row < static_cast<int>(device_names.size())) { | 139 } else if (row >= 0 && row < static_cast<int>(num_options)) { |
| 146 return device_names[row]; | 140 return chooser_bubble_delegate_->GetOption(static_cast<size_t>(row)); |
| 147 } else { | 141 } else { |
| 148 NOTREACHED(); | 142 NOTREACHED(); |
| 149 return base::string16(); | 143 return base::string16(); |
| 150 } | 144 } |
| 151 } | 145 } |
| 152 | 146 |
| 153 // ui::TableModel: | 147 // ui::TableModel: |
| 154 void SetObserver(ui::TableModelObserver* observer) override { | 148 void SetObserver(ui::TableModelObserver* observer) override { |
| 155 observer_ = observer; | 149 observer_ = observer; |
| 156 } | 150 } |
| 157 | 151 |
| 158 // ChooserOptions::Observer: | 152 // ChooserOptions::Observer: |
| 159 void OnOptionsInitialized() override { | 153 void OnOptionsInitialized() override { |
| 160 if (observer_) { | 154 if (observer_) { |
| 161 observer_->OnModelChanged(); | 155 observer_->OnModelChanged(); |
| 162 Update(); | 156 Update(); |
| 163 } | 157 } |
| 164 } | 158 } |
| 165 | 159 |
| 166 // ChooserOptions::Observer: | 160 // ChooserOptions::Observer: |
| 167 void OnOptionAdded(int index) override { | 161 void OnOptionAdded(size_t index) override { |
| 168 if (observer_) { | 162 if (observer_) { |
| 169 observer_->OnItemsAdded(index, 1); | 163 observer_->OnItemsAdded(static_cast<int>(index), 1); |
| 170 Update(); | 164 Update(); |
| 171 } | 165 } |
| 172 } | 166 } |
| 173 | 167 |
| 174 // ChooserOptions::Observer: | 168 // ChooserOptions::Observer: |
| 175 void OnOptionRemoved(int index) override { | 169 void OnOptionRemoved(size_t index) override { |
| 176 if (observer_) { | 170 if (observer_) { |
| 177 observer_->OnItemsRemoved(index, 1); | 171 observer_->OnItemsRemoved(static_cast<int>(index), 1); |
| 178 Update(); | 172 Update(); |
| 179 } | 173 } |
| 180 } | 174 } |
| 181 | 175 |
| 182 void Update() { | 176 void Update() { |
| 183 views::TableView* table_view = static_cast<views::TableView*>(observer_); | 177 views::TableView* table_view = static_cast<views::TableView*>(observer_); |
| 184 | 178 |
| 185 if (chooser_bubble_delegate_->GetOptions().empty()) { | 179 if (chooser_bubble_delegate_->NumOptions() == 0) { |
| 186 observer_->OnModelChanged(); | 180 observer_->OnModelChanged(); |
| 187 table_view->SetEnabled(false); | 181 table_view->SetEnabled(false); |
| 188 } else { | 182 } else { |
| 189 table_view->SetEnabled(true); | 183 table_view->SetEnabled(true); |
| 190 } | 184 } |
| 191 } | 185 } |
| 192 | 186 |
| 193 void SetConnectButton(views::LabelButton* connect_button) { | 187 void SetConnectButton(views::LabelButton* connect_button) { |
| 194 connect_button_ = connect_button; | 188 connect_button_ = connect_button; |
| 195 } | 189 } |
| (...skipping 29 matching lines...) Expand all Loading... |
| 225 chooser_table_model_ = new ChooserTableModel(chooser_bubble_delegate_); | 219 chooser_table_model_ = new ChooserTableModel(chooser_bubble_delegate_); |
| 226 table_view_ = new views::TableView(chooser_table_model_, table_columns, | 220 table_view_ = new views::TableView(chooser_table_model_, table_columns, |
| 227 views::TEXT_ONLY, true); | 221 views::TEXT_ONLY, true); |
| 228 table_view_->set_select_on_remove(false); | 222 table_view_->set_select_on_remove(false); |
| 229 chooser_table_model_->SetObserver(table_view_); | 223 chooser_table_model_->SetObserver(table_view_); |
| 230 table_view_->SetObserver(this); | 224 table_view_->SetObserver(this); |
| 231 layout->AddView(table_view_->CreateParentIfNecessary(), 1, 1, | 225 layout->AddView(table_view_->CreateParentIfNecessary(), 1, 1, |
| 232 views::GridLayout::FILL, views::GridLayout::FILL, | 226 views::GridLayout::FILL, views::GridLayout::FILL, |
| 233 kChooserPermissionBubbleWidth, | 227 kChooserPermissionBubbleWidth, |
| 234 kChooserPermissionBubbleHeight); | 228 kChooserPermissionBubbleHeight); |
| 235 if (chooser_bubble_delegate_->GetOptions().empty()) { | 229 if (chooser_bubble_delegate_->NumOptions() == 0) { |
| 236 table_view_->SetEnabled(false); | 230 table_view_->SetEnabled(false); |
| 237 } | 231 } |
| 238 | 232 |
| 239 layout->AddPaddingRow(0, kItemMajorSpacing); | 233 layout->AddPaddingRow(0, kItemMajorSpacing); |
| 240 | 234 |
| 241 views::View* button_row = new views::View(); | 235 views::View* button_row = new views::View(); |
| 242 views::GridLayout* button_layout = new views::GridLayout(button_row); | 236 views::GridLayout* button_layout = new views::GridLayout(button_row); |
| 243 views::ColumnSet* button_columns = button_layout->AddColumnSet(0); | 237 views::ColumnSet* button_columns = button_layout->AddColumnSet(0); |
| 244 button_row->SetLayoutManager(button_layout); | 238 button_row->SetLayoutManager(button_layout); |
| 245 layout->StartRow(1, 0); | 239 layout->StartRow(1, 0); |
| (...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 398 return browser_view->exclusive_access_bubble()->GetView(); | 392 return browser_view->exclusive_access_bubble()->GetView(); |
| 399 | 393 |
| 400 return browser_view->top_container(); | 394 return browser_view->top_container(); |
| 401 } | 395 } |
| 402 | 396 |
| 403 views::BubbleBorder::Arrow ChooserBubbleUiView::GetAnchorArrow() { | 397 views::BubbleBorder::Arrow ChooserBubbleUiView::GetAnchorArrow() { |
| 404 if (browser_->SupportsWindowFeature(Browser::FEATURE_LOCATIONBAR)) | 398 if (browser_->SupportsWindowFeature(Browser::FEATURE_LOCATIONBAR)) |
| 405 return views::BubbleBorder::TOP_LEFT; | 399 return views::BubbleBorder::TOP_LEFT; |
| 406 return views::BubbleBorder::NONE; | 400 return views::BubbleBorder::NONE; |
| 407 } | 401 } |
| OLD | NEW |