Chromium Code Reviews| Index: ash/devtools/ui_element.cc |
| diff --git a/ash/devtools/ui_element.cc b/ash/devtools/ui_element.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..8b8421341f1cec5d545837652e6e89ddf265bb9c |
| --- /dev/null |
| +++ b/ash/devtools/ui_element.cc |
| @@ -0,0 +1,78 @@ |
| +// Copyright 2017 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 "ash/devtools/ui_element.h" |
| + |
| +#include <algorithm> |
| + |
| +#include "ash/devtools/ui_element_delegate.h" |
| +#include "ash/devtools/view_element.h" |
| +#include "ash/devtools/widget_element.h" |
| +#include "ash/devtools/window_element.h" |
| + |
| +namespace ash { |
| +namespace devtools { |
| +namespace { |
| + |
| +static int node_ids = 0; |
| + |
| +} // namespace |
| + |
| +std::string UIElement::GetTypeName() const { |
| + switch (type_) { |
| + case UIElementType::WINDOW: |
| + return "Window"; |
| + case UIElementType::WIDGET: |
| + return "Widget"; |
| + case UIElementType::VIEW: |
| + return "View"; |
| + } |
| +} |
| + |
| +void UIElement::AddChild(UIElement* child, UIElement* before) { |
| + if (before) { |
| + auto iter = std::find(children_.begin(), children_.end(), before); |
| + DCHECK(iter != children_.end()); |
| + children_.insert(iter, child); |
| + } else { |
| + children_.push_back(child); |
| + } |
| + delegate_->OnUIElementAdded(this, child); |
| +} |
| + |
| +void UIElement::RemoveChild(UIElement* child) { |
| + delegate()->OnUIElementRemoved(child); |
| + auto iter = std::find(children_.begin(), children_.end(), child); |
| + if (iter != children_.end()) |
|
sadrul
2017/05/17 21:54:13
Can this be a DCHECK()? i.e. DCHECK(iter != childr
thanhph
2017/05/18 14:28:15
Done. Also changed to use DCHECK in ReOrder.
|
| + children_.erase(iter); |
| +} |
| + |
| +void UIElement::ReorderChild(UIElement* child, int new_index) { |
| + // Remove |child| out of vector |children_|. |
| + auto iter = std::find(children_.begin(), children_.end(), child); |
| + if (iter != children_.end()) |
| + children_.erase(iter); |
| + |
| + // Move child to new position |new_index| in vector |children_|. |
| + new_index = std::min(children_.size() - 1, static_cast<size_t>(new_index)); |
| + iter = children_.begin() + new_index; |
| + children_.insert(iter, child); |
| + delegate()->OnUIElementReordered(child->parent(), child); |
| +} |
| + |
| +UIElement::UIElement(const UIElementType type, |
| + UIElementDelegate* delegate, |
| + UIElement* parent) |
| + : node_id_(++node_ids), type_(type), parent_(parent), delegate_(delegate) { |
| + delegate_->OnUIElementAdded(0, this); |
| +} |
| + |
| +UIElement::~UIElement() { |
| + for (auto* child : children_) |
| + delete child; |
| + children_.clear(); |
| +} |
| + |
| +} // namespace devtools |
| +} // namespace ash |