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 |