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 |