// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "ui/views/view_model.h" #include "base/logging.h" #include "ui/views/view.h" namespace views { ViewModel::ViewModel() { } ViewModel::~ViewModel() { // view are owned by their parent, no need to delete them. } void ViewModel::Add(View* view, int index) { DCHECK_LE(index, static_cast(entries_.size())); DCHECK_GE(index, 0); Entry entry; entry.view = view; entries_.insert(entries_.begin() + index, entry); } void ViewModel::Remove(int index) { if (index == -1) return; check_index(index); entries_.erase(entries_.begin() + index); } void ViewModel::Move(int index, int target_index) { if (index == target_index) return; Entry entry(entries_[index]); entries_.erase(entries_.begin() + index); entries_.insert(entries_.begin() + target_index, entry); } void ViewModel::MoveViewOnly(int index, int target_index) { if (index == target_index) return; if (target_index < index) { View* view = entries_[index].view; for (int i = index; i > target_index; --i) entries_[i].view = entries_[i - 1].view; entries_[target_index].view = view; } else { View* view = entries_[index].view; for (int i = index; i < target_index; ++i) entries_[i].view = entries_[i + 1].view; entries_[target_index].view = view; } } void ViewModel::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 { for (size_t i = 0; i < entries_.size(); ++i) { if (entries_[i].view == view) return static_cast(i); } return -1; } } // namespace views