summaryrefslogtreecommitdiffstats
path: root/ui/views/view_model.cc
diff options
context:
space:
mode:
authormgiuca <mgiuca@chromium.org>2014-10-02 19:51:01 -0700
committerCommit bot <commit-bot@chromium.org>2014-10-03 02:51:19 +0000
commiteee145893892eb15a42409c3d2e525b9f1e837e2 (patch)
tree24a4f1f8edc1f0456d672ca0f2d1a5c351c12c45 /ui/views/view_model.cc
parent7e7a8732474e21b6fe9e8d21f0360ded68f49aa2 (diff)
downloadchromium_src-eee145893892eb15a42409c3d2e525b9f1e837e2.zip
chromium_src-eee145893892eb15a42409c3d2e525b9f1e837e2.tar.gz
chromium_src-eee145893892eb15a42409c3d2e525b9f1e837e2.tar.bz2
Added views::ViewModelT<T>, a type-safe template version of ViewModel.
A common use of views::ViewModel is to call view_at() then static_cast down to the correct type, which is unsafe. ViewModel clients are now encouraged to use ViewModelT<T> for compile-time type-checked access to the views inside. ViewModel still exists for clients that don't care about the view type, or with more complex downcasting logic. Updated clients, where possible, to use ViewModelT: TabStrip: ViewModelT<Tab> AppsGridView: ViewModelT<AppListItemView>, ViewModelT<PulsingBlockView>. BUG=418461 Review URL: https://codereview.chromium.org/598013003 Cr-Commit-Position: refs/heads/master@{#297979}
Diffstat (limited to 'ui/views/view_model.cc')
-rw-r--r--ui/views/view_model.cc34
1 files changed, 17 insertions, 17 deletions
diff --git a/ui/views/view_model.cc b/ui/views/view_model.cc
index a0a7549..14f60e0 100644
--- a/ui/views/view_model.cc
+++ b/ui/views/view_model.cc
@@ -9,22 +9,11 @@
namespace views {
-ViewModel::ViewModel() {
-}
-
-ViewModel::~ViewModel() {
+ViewModelBase::~ViewModelBase() {
// view are owned by their parent, no need to delete them.
}
-void ViewModel::Add(View* view, int index) {
- DCHECK_LE(index, static_cast<int>(entries_.size()));
- DCHECK_GE(index, 0);
- Entry entry;
- entry.view = view;
- entries_.insert(entries_.begin() + index, entry);
-}
-
-void ViewModel::Remove(int index) {
+void ViewModelBase::Remove(int index) {
if (index == -1)
return;
@@ -32,7 +21,7 @@ void ViewModel::Remove(int index) {
entries_.erase(entries_.begin() + index);
}
-void ViewModel::Move(int index, int target_index) {
+void ViewModelBase::Move(int index, int target_index) {
DCHECK_LT(index, static_cast<int>(entries_.size()));
DCHECK_GE(index, 0);
DCHECK_LT(target_index, static_cast<int>(entries_.size()));
@@ -45,7 +34,7 @@ void ViewModel::Move(int index, int target_index) {
entries_.insert(entries_.begin() + target_index, entry);
}
-void ViewModel::MoveViewOnly(int index, int target_index) {
+void ViewModelBase::MoveViewOnly(int index, int target_index) {
if (index == target_index)
return;
if (target_index < index) {
@@ -61,14 +50,14 @@ void ViewModel::MoveViewOnly(int index, int target_index) {
}
}
-void ViewModel::Clear() {
+void ViewModelBase::Clear() {
Entries entries;
entries.swap(entries_);
for (size_t i = 0; i < entries.size(); ++i)
delete entries[i].view;
}
-int ViewModel::GetIndexOfView(const View* view) const {
+int ViewModelBase::GetIndexOfView(const View* view) const {
for (size_t i = 0; i < entries_.size(); ++i) {
if (entries_[i].view == view)
return static_cast<int>(i);
@@ -76,4 +65,15 @@ int ViewModel::GetIndexOfView(const View* view) const {
return -1;
}
+ViewModelBase::ViewModelBase() {
+}
+
+void ViewModelBase::AddUnsafe(View* view, int index) {
+ DCHECK_LE(index, static_cast<int>(entries_.size()));
+ DCHECK_GE(index, 0);
+ Entry entry;
+ entry.view = view;
+ entries_.insert(entries_.begin() + index, entry);
+}
+
} // namespace views