Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/search_engines/template_url_table_model.h" | 5 #include "chrome/browser/ui/search_engines/template_url_table_model.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/bind_helpers.h" | 8 #include "base/bind_helpers.h" |
| 9 #include "base/i18n/rtl.h" | 9 #include "base/i18n/rtl.h" |
| 10 #include "base/stl_util.h" | 10 #include "base/stl_util.h" |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 21 #include "third_party/skia/include/core/SkBitmap.h" | 21 #include "third_party/skia/include/core/SkBitmap.h" |
| 22 #include "ui/base/l10n/l10n_util.h" | 22 #include "ui/base/l10n/l10n_util.h" |
| 23 #include "ui/base/models/table_model_observer.h" | 23 #include "ui/base/models/table_model_observer.h" |
| 24 #include "ui/base/resource/resource_bundle.h" | 24 #include "ui/base/resource/resource_bundle.h" |
| 25 #include "ui/gfx/favicon_size.h" | 25 #include "ui/gfx/favicon_size.h" |
| 26 #include "ui/gfx/image/image_skia.h" | 26 #include "ui/gfx/image/image_skia.h" |
| 27 | 27 |
| 28 // Group IDs used by TemplateURLTableModel. | 28 // Group IDs used by TemplateURLTableModel. |
| 29 static const int kMainGroupID = 0; | 29 static const int kMainGroupID = 0; |
| 30 static const int kOtherGroupID = 1; | 30 static const int kOtherGroupID = 1; |
| 31 static const int kExtensionGroupID = 2; | |
| 31 | 32 |
| 32 // ModelEntry ---------------------------------------------------- | 33 // ModelEntry ---------------------------------------------------- |
| 33 | 34 |
| 34 // ModelEntry wraps a TemplateURL as returned from the TemplateURL. | 35 // ModelEntry wraps a TemplateURL as returned from the TemplateURL. |
| 35 // ModelEntry also tracks state information about the URL. | 36 // ModelEntry also tracks state information about the URL. |
| 36 | 37 |
| 37 // Icon used while loading, or if a specific favicon can't be found. | 38 // Icon used while loading, or if a specific favicon can't be found. |
| 38 static gfx::ImageSkia* default_icon = NULL; | 39 static gfx::ImageSkia* default_icon = NULL; |
| 39 | 40 |
| 40 class ModelEntry { | 41 class ModelEntry { |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 136 entries_.clear(); | 137 entries_.clear(); |
| 137 } | 138 } |
| 138 | 139 |
| 139 void TemplateURLTableModel::Reload() { | 140 void TemplateURLTableModel::Reload() { |
| 140 STLDeleteElements(&entries_); | 141 STLDeleteElements(&entries_); |
| 141 entries_.clear(); | 142 entries_.clear(); |
| 142 | 143 |
| 143 TemplateURLService::TemplateURLVector urls = | 144 TemplateURLService::TemplateURLVector urls = |
| 144 template_url_service_->GetTemplateURLs(); | 145 template_url_service_->GetTemplateURLs(); |
| 145 | 146 |
| 146 // Keywords that can be made the default first. | 147 // Keywords that can be made the default first. |
|
Peter Kasting
2013/05/30 21:22:50
Nit: Since you have the same block of code three t
Aaron Jacobs
2013/05/31 03:07:24
Done.
| |
| 147 for (TemplateURLService::TemplateURLVector::iterator i = urls.begin(); | 148 for (TemplateURLService::TemplateURLVector::iterator i = urls.begin(); |
| 148 i != urls.end(); ++i) { | 149 i != urls.end(); ++i) { |
| 149 TemplateURL* template_url = *i; | 150 TemplateURL* template_url = *i; |
| 150 // NOTE: we don't use ShowInDefaultList here to avoid items bouncing around | 151 // NOTE: we don't use ShowInDefaultList here to avoid items bouncing around |
| 151 // the lists while editing. | 152 // the lists while editing. |
| 152 if (template_url->show_in_default_list()) | 153 if (template_url->show_in_default_list()) |
| 153 entries_.push_back(new ModelEntry(this, template_url)); | 154 entries_.push_back(new ModelEntry(this, template_url)); |
| 154 } | 155 } |
| 155 | 156 |
| 156 last_search_engine_index_ = static_cast<int>(entries_.size()); | 157 last_search_engine_index_ = static_cast<int>(entries_.size()); |
| 157 | 158 |
| 158 // Then the rest. | 159 // Then the non extension keywords. |
| 159 for (TemplateURLService::TemplateURLVector::iterator i = urls.begin(); | 160 for (TemplateURLService::TemplateURLVector::iterator i = urls.begin(); |
| 160 i != urls.end(); ++i) { | 161 i != urls.end(); ++i) { |
| 161 TemplateURL* template_url = *i; | 162 TemplateURL* template_url = *i; |
| 162 // NOTE: we don't use ShowInDefaultList here to avoid things bouncing | 163 // NOTE: we don't use ShowInDefaultList here to avoid things bouncing |
| 163 // the lists while editing. | 164 // the lists while editing. |
| 164 if (!template_url->show_in_default_list() && | 165 if (!template_url->show_in_default_list() && |
| 165 !template_url->IsExtensionKeyword()) { | 166 !template_url->IsExtensionKeyword()) { |
| 166 entries_.push_back(new ModelEntry(this, template_url)); | 167 entries_.push_back(new ModelEntry(this, template_url)); |
| 167 } | 168 } |
| 168 } | 169 } |
| 169 | 170 |
| 171 last_other_engine_index_ = static_cast<int>(entries_.size()); | |
| 172 | |
| 173 // Finally, the extensions. | |
| 174 for (TemplateURLService::TemplateURLVector::iterator i = urls.begin(); | |
| 175 i != urls.end(); ++i) { | |
| 176 TemplateURL* template_url = *i; | |
| 177 // NOTE: we don't use ShowInDefaultList here to avoid things bouncing | |
| 178 // the lists while editing. | |
| 179 if (!template_url->show_in_default_list() && | |
| 180 template_url->IsExtensionKeyword()) { | |
| 181 entries_.push_back(new ModelEntry(this, template_url)); | |
| 182 } | |
| 183 } | |
| 184 | |
| 170 if (observer_) | 185 if (observer_) |
| 171 observer_->OnModelChanged(); | 186 observer_->OnModelChanged(); |
| 172 } | 187 } |
| 173 | 188 |
| 174 int TemplateURLTableModel::RowCount() { | 189 int TemplateURLTableModel::RowCount() { |
| 175 return static_cast<int>(entries_.size()); | 190 return static_cast<int>(entries_.size()); |
| 176 } | 191 } |
| 177 | 192 |
| 178 string16 TemplateURLTableModel::GetText(int row, int col_id) { | 193 string16 TemplateURLTableModel::GetText(int row, int col_id) { |
| 179 DCHECK(row >= 0 && row < RowCount()); | 194 DCHECK(row >= 0 && row < RowCount()); |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 215 l10n_util::GetStringUTF16(IDS_SEARCH_ENGINES_EDITOR_MAIN_SEPARATOR); | 230 l10n_util::GetStringUTF16(IDS_SEARCH_ENGINES_EDITOR_MAIN_SEPARATOR); |
| 216 search_engine_group.id = kMainGroupID; | 231 search_engine_group.id = kMainGroupID; |
| 217 groups.push_back(search_engine_group); | 232 groups.push_back(search_engine_group); |
| 218 | 233 |
| 219 Group other_group; | 234 Group other_group; |
| 220 other_group.title = | 235 other_group.title = |
| 221 l10n_util::GetStringUTF16(IDS_SEARCH_ENGINES_EDITOR_OTHER_SEPARATOR); | 236 l10n_util::GetStringUTF16(IDS_SEARCH_ENGINES_EDITOR_OTHER_SEPARATOR); |
| 222 other_group.id = kOtherGroupID; | 237 other_group.id = kOtherGroupID; |
| 223 groups.push_back(other_group); | 238 groups.push_back(other_group); |
| 224 | 239 |
| 240 Group extension_group; | |
| 241 extension_group.title = | |
| 242 l10n_util::GetStringUTF16(IDS_SEARCH_ENGINES_EDITOR_EXTENSIONS_SEPARATOR); | |
| 243 extension_group.id = kExtensionGroupID; | |
| 244 groups.push_back(extension_group); | |
| 245 | |
| 225 return groups; | 246 return groups; |
| 226 } | 247 } |
| 227 | 248 |
| 228 int TemplateURLTableModel::GetGroupID(int row) { | 249 int TemplateURLTableModel::GetGroupID(int row) { |
| 229 DCHECK(row >= 0 && row < RowCount()); | 250 DCHECK(row >= 0 && row < RowCount()); |
| 230 return row < last_search_engine_index_ ? kMainGroupID : kOtherGroupID; | 251 if (row < last_search_engine_index_) |
| 252 return kMainGroupID; | |
| 253 if (row < last_other_engine_index_) | |
|
Peter Kasting
2013/05/30 21:22:50
Nit: You could use ?: on this last pair
Aaron Jacobs
2013/05/31 03:07:24
Done.
| |
| 254 return kOtherGroupID; | |
| 255 return kExtensionGroupID; | |
| 231 } | 256 } |
| 232 | 257 |
| 233 void TemplateURLTableModel::Remove(int index) { | 258 void TemplateURLTableModel::Remove(int index) { |
| 234 // Remove the observer while we modify the model, that way we don't need to | 259 // Remove the observer while we modify the model, that way we don't need to |
| 235 // worry about the model calling us back when we mutate it. | 260 // worry about the model calling us back when we mutate it. |
| 236 template_url_service_->RemoveObserver(this); | 261 template_url_service_->RemoveObserver(this); |
| 237 TemplateURL* template_url = GetTemplateURL(index); | 262 TemplateURL* template_url = GetTemplateURL(index); |
| 238 | 263 |
| 239 scoped_ptr<ModelEntry> entry(entries_[index]); | 264 scoped_ptr<ModelEntry> entry(entries_[index]); |
| 240 entries_.erase(entries_.begin() + index); | 265 entries_.erase(entries_.begin() + index); |
| 241 if (index < last_search_engine_index_) | 266 if (index < last_search_engine_index_) |
| 242 last_search_engine_index_--; | 267 --last_search_engine_index_; |
| 268 if (index < last_other_engine_index_) | |
| 269 --last_other_engine_index_; | |
| 243 if (observer_) | 270 if (observer_) |
| 244 observer_->OnItemsRemoved(index, 1); | 271 observer_->OnItemsRemoved(index, 1); |
| 245 | 272 |
| 246 // Make sure to remove from the table model first, otherwise the | 273 // Make sure to remove from the table model first, otherwise the |
| 247 // TemplateURL would be freed. | 274 // TemplateURL would be freed. |
| 248 template_url_service_->Remove(template_url); | 275 template_url_service_->Remove(template_url); |
| 249 template_url_service_->AddObserver(this); | 276 template_url_service_->AddObserver(this); |
| 250 } | 277 } |
| 251 | 278 |
| 252 void TemplateURLTableModel::Add(int index, | 279 void TemplateURLTableModel::Add(int index, |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 366 void TemplateURLTableModel::FaviconAvailable(ModelEntry* entry) { | 393 void TemplateURLTableModel::FaviconAvailable(ModelEntry* entry) { |
| 367 std::vector<ModelEntry*>::iterator i = | 394 std::vector<ModelEntry*>::iterator i = |
| 368 std::find(entries_.begin(), entries_.end(), entry); | 395 std::find(entries_.begin(), entries_.end(), entry); |
| 369 DCHECK(i != entries_.end()); | 396 DCHECK(i != entries_.end()); |
| 370 NotifyChanged(static_cast<int>(i - entries_.begin())); | 397 NotifyChanged(static_cast<int>(i - entries_.begin())); |
| 371 } | 398 } |
| 372 | 399 |
| 373 void TemplateURLTableModel::OnTemplateURLServiceChanged() { | 400 void TemplateURLTableModel::OnTemplateURLServiceChanged() { |
| 374 Reload(); | 401 Reload(); |
| 375 } | 402 } |
| OLD | NEW |