OLD | NEW |
| (Empty) |
1 // Copyright 2017 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 "ash/devtools/ui_element.h" | |
6 | |
7 #include <algorithm> | |
8 | |
9 #include "ash/devtools/ui_element_delegate.h" | |
10 #include "ash/devtools/view_element.h" | |
11 #include "ash/devtools/widget_element.h" | |
12 #include "ash/devtools/window_element.h" | |
13 | |
14 namespace ash { | |
15 namespace devtools { | |
16 namespace { | |
17 | |
18 static int node_ids = 0; | |
19 | |
20 } // namespace | |
21 | |
22 UIElement::~UIElement() { | |
23 for (auto* child : children_) | |
24 delete child; | |
25 children_.clear(); | |
26 } | |
27 | |
28 std::string UIElement::GetTypeName() const { | |
29 switch (type_) { | |
30 case UIElementType::WINDOW: | |
31 return "Window"; | |
32 case UIElementType::WIDGET: | |
33 return "Widget"; | |
34 case UIElementType::VIEW: | |
35 return "View"; | |
36 } | |
37 NOTREACHED(); | |
38 return std::string(); | |
39 } | |
40 | |
41 void UIElement::AddChild(UIElement* child, UIElement* before) { | |
42 if (before) { | |
43 auto iter = std::find(children_.begin(), children_.end(), before); | |
44 DCHECK(iter != children_.end()); | |
45 children_.insert(iter, child); | |
46 } else { | |
47 children_.push_back(child); | |
48 } | |
49 delegate_->OnUIElementAdded(this, child); | |
50 } | |
51 | |
52 void UIElement::RemoveChild(UIElement* child) { | |
53 delegate()->OnUIElementRemoved(child); | |
54 auto iter = std::find(children_.begin(), children_.end(), child); | |
55 DCHECK(iter != children_.end()); | |
56 children_.erase(iter); | |
57 } | |
58 | |
59 void UIElement::ReorderChild(UIElement* child, int new_index) { | |
60 // Remove |child| out of vector |children_|. | |
61 auto iter = std::find(children_.begin(), children_.end(), child); | |
62 DCHECK(iter != children_.end()); | |
63 children_.erase(iter); | |
64 | |
65 // Move child to new position |new_index| in vector |children_|. | |
66 new_index = std::min(children_.size() - 1, static_cast<size_t>(new_index)); | |
67 iter = children_.begin() + new_index; | |
68 children_.insert(iter, child); | |
69 delegate()->OnUIElementReordered(child->parent(), child); | |
70 } | |
71 | |
72 UIElement::UIElement(const UIElementType type, | |
73 UIElementDelegate* delegate, | |
74 UIElement* parent) | |
75 : node_id_(++node_ids), type_(type), parent_(parent), delegate_(delegate) { | |
76 delegate_->OnUIElementAdded(0, this); | |
77 } | |
78 | |
79 } // namespace devtools | |
80 } // namespace ash | |
OLD | NEW |