From d86a71f79afe0e4dac768f61d6bff690567aca5b Mon Sep 17 00:00:00 2001 From: crupest Date: Sun, 24 May 2020 01:40:02 +0800 Subject: ... --- src/ui/LayoutControl.cpp | 53 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 src/ui/LayoutControl.cpp (limited to 'src/ui/LayoutControl.cpp') diff --git a/src/ui/LayoutControl.cpp b/src/ui/LayoutControl.cpp new file mode 100644 index 00000000..4813566b --- /dev/null +++ b/src/ui/LayoutControl.cpp @@ -0,0 +1,53 @@ +#include "cru/ui/LayoutControl.hpp" + +#include "cru/ui/Window.hpp" + +namespace cru::ui { +LayoutControl::~LayoutControl() { + for (const auto child : children_) delete child; +} + +void LayoutControl::AddChild(Control* control, const Index position) { + Expects(control->GetParent() == + nullptr); // The control already has a parent. + Expects(!dynamic_cast(control)); // Can't add a window as child. + Expects(position >= 0); + Expects(position <= + static_cast( + this->children_.size())); // The position is out of range. + + children_.insert(this->children_.cbegin() + position, control); + + control->_SetParent(this); + control->_SetDescendantUiHost(GetUiHost()); + + OnAddChild(control, position); +} + +void LayoutControl::RemoveChild(const Index position) { + Expects(position >= 0); + Expects(position < + static_cast( + this->children_.size())); // The position is out of range. + + const auto i = children_.cbegin() + position; + const auto child = *i; + + children_.erase(i); + + child->_SetParent(nullptr); + child->_SetDescendantUiHost(nullptr); + + OnRemoveChild(child, position); +} + +void LayoutControl::OnAddChild(Control* child, const Index position) { + CRU_UNUSED(child) + CRU_UNUSED(position) +} + +void LayoutControl::OnRemoveChild(Control* child, const Index position) { + CRU_UNUSED(child) + CRU_UNUSED(position) +} +} // namespace cru::ui -- cgit v1.2.3