aboutsummaryrefslogtreecommitdiffstats
path: root/src/menu/control.cpp
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/menu/control.cpp35
1 files changed, 26 insertions, 9 deletions
diff --git a/src/menu/control.cpp b/src/menu/control.cpp
index 68b5c328..f9ea2a89 100644
--- a/src/menu/control.cpp
+++ b/src/menu/control.cpp
@@ -29,26 +29,43 @@
namespace usdx
{
- Control::Control(Control *parent)
- : parent(parent)
+ Control::Control(Control *owner)
+ : owner(owner)
{
+ owner->add(this);
}
Control::~Control()
{
- if (parent) {
- delete parent;
- parent = NULL;
+ for (std::list<Control*>::iterator it =
+ slaves.begin(); it != slaves.end(); it++) {
+ delete *it;
}
+
+ slaves.clear();
+ }
+
+ void Control::set_owner(Control *owner)
+ {
+ if (this->owner != owner) {
+ this->owner->remove(this);
+ this->owner = owner;
+ this->owner->add(this);
+ }
+ }
+
+ Control* Control::get_owner(void) const
+ {
+ return owner;
}
- void Control::set_parent(Control *parent)
+ void Control::add(Control *new_slave)
{
- this->parent = parent;
+ slaves.push_back(new_slave);
}
- Control* Control::get_parent(void) const
+ void Control::remove(Control *slave)
{
- return parent;
+ slaves.remove(slave);
}
};