diff options
Diffstat (limited to 'src/menu/control.cpp')
-rw-r--r-- | src/menu/control.cpp | 35 |
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); } }; |