Home | History | Annotate | Download | only in views
      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
      3 // found in the LICENSE file.
      4 
      5 #include "ui/views/view_model.h"
      6 
      7 #include "base/logging.h"
      8 #include "ui/views/view.h"
      9 
     10 namespace views {
     11 
     12 ViewModel::ViewModel() {
     13 }
     14 
     15 ViewModel::~ViewModel() {
     16   // view are owned by their parent, no need to delete them.
     17 }
     18 
     19 void ViewModel::Add(View* view, int index) {
     20   DCHECK_LE(index, static_cast<int>(entries_.size()));
     21   DCHECK_GE(index, 0);
     22   Entry entry;
     23   entry.view = view;
     24   entries_.insert(entries_.begin() + index, entry);
     25 }
     26 
     27 void ViewModel::Remove(int index) {
     28   if (index == -1)
     29     return;
     30 
     31   check_index(index);
     32   entries_.erase(entries_.begin() + index);
     33 }
     34 
     35 void ViewModel::Move(int index, int target_index) {
     36   if (index == target_index)
     37     return;
     38   Entry entry(entries_[index]);
     39   entries_.erase(entries_.begin() + index);
     40   entries_.insert(entries_.begin() + target_index, entry);
     41 }
     42 
     43 void ViewModel::MoveViewOnly(int index, int target_index) {
     44   if (index == target_index)
     45     return;
     46   if (target_index < index) {
     47     View* view = entries_[index].view;
     48     for (int i = index; i > target_index; --i)
     49       entries_[i].view = entries_[i - 1].view;
     50     entries_[target_index].view = view;
     51   } else {
     52     View* view = entries_[index].view;
     53     for (int i = index; i < target_index; ++i)
     54       entries_[i].view = entries_[i + 1].view;
     55     entries_[target_index].view = view;
     56   }
     57 }
     58 
     59 void ViewModel::Clear() {
     60   Entries entries;
     61   entries.swap(entries_);
     62   for (size_t i = 0; i < entries.size(); ++i)
     63     delete entries[i].view;
     64 }
     65 
     66 int ViewModel::GetIndexOfView(const View* view) const {
     67   for (size_t i = 0; i < entries_.size(); ++i) {
     68     if (entries_[i].view == view)
     69       return static_cast<int>(i);
     70   }
     71   return -1;
     72 }
     73 
     74 }  // namespace views
     75