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.
5 #include "ui/views/view_model.h"
7 #include "base/logging.h"
8 #include "ui/views/view.h"
12 ViewModel::ViewModel() {
15 ViewModel::~ViewModel() {
16 // view are owned by their parent, no need to delete them.
19 void ViewModel::Add(View
* view
, int index
) {
20 DCHECK_LE(index
, static_cast<int>(entries_
.size()));
24 entries_
.insert(entries_
.begin() + index
, entry
);
27 void ViewModel::Remove(int index
) {
32 entries_
.erase(entries_
.begin() + index
);
35 void ViewModel::Move(int index
, int target_index
) {
36 DCHECK_LT(index
, static_cast<int>(entries_
.size()));
38 DCHECK_LT(target_index
, static_cast<int>(entries_
.size()));
39 DCHECK_GE(target_index
, 0);
41 if (index
== target_index
)
43 Entry
entry(entries_
[index
]);
44 entries_
.erase(entries_
.begin() + index
);
45 entries_
.insert(entries_
.begin() + target_index
, entry
);
48 void ViewModel::MoveViewOnly(int index
, int target_index
) {
49 if (index
== target_index
)
51 if (target_index
< index
) {
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
;
57 View
* view
= entries_
[index
].view
;
58 for (int i
= index
; i
< target_index
; ++i
)
59 entries_
[i
].view
= entries_
[i
+ 1].view
;
60 entries_
[target_index
].view
= view
;
64 void ViewModel::Clear() {
66 entries
.swap(entries_
);
67 for (size_t i
= 0; i
< entries
.size(); ++i
)
68 delete entries
[i
].view
;
71 int ViewModel::GetIndexOfView(const View
* view
) const {
72 for (size_t i
= 0; i
< entries_
.size(); ++i
) {
73 if (entries_
[i
].view
== view
)
74 return static_cast<int>(i
);