aboutsummaryrefslogtreecommitdiff
path: root/src/ui/content_control.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui/content_control.cpp')
-rw-r--r--src/ui/content_control.cpp30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/ui/content_control.cpp b/src/ui/content_control.cpp
new file mode 100644
index 00000000..d5abca1c
--- /dev/null
+++ b/src/ui/content_control.cpp
@@ -0,0 +1,30 @@
+#include "content_control.hpp"
+
+#include "window.hpp"
+
+namespace cru::ui {
+ContentControl::ContentControl()
+ : child_vector_{nullptr}, child_(child_vector_[0]) {}
+
+ContentControl::~ContentControl() { delete child_; }
+
+void ContentControl::SetChild(Control* child) {
+ assert(!dynamic_cast<Window*>(child)); // Can't add a window as child.
+ if (child == child_) return;
+
+ const auto window = GetWindow();
+ const auto old_child = child_;
+ child_ = child;
+ if (old_child) {
+ old_child->_SetParent(nullptr);
+ old_child->_SetDescendantWindow(nullptr);
+ }
+ if (child) {
+ child->_SetParent(this);
+ child->_SetDescendantWindow(window);
+ }
+ OnChildChanged(old_child, child);
+}
+
+void ContentControl::OnChildChanged(Control* old_child, Control* new_child) {}
+} // namespace cru::ui