diff options
author | mgiuca <mgiuca@chromium.org> | 2014-10-02 19:51:01 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-10-03 02:51:19 +0000 |
commit | eee145893892eb15a42409c3d2e525b9f1e837e2 (patch) | |
tree | 24a4f1f8edc1f0456d672ca0f2d1a5c351c12c45 /ui/views/view_model.cc | |
parent | 7e7a8732474e21b6fe9e8d21f0360ded68f49aa2 (diff) | |
download | chromium_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.cc | 34 |
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 |