-/* $Id$
-
-This file is part of libmspgltk
-Copyright © 2009 Mikko Rasa, Mikkosoft Productions
-Distributed under the LGPL
-*/
-
#include "container.h"
using namespace std;
namespace Msp {
namespace GLtk {
+hierarchy_error::hierarchy_error(const string &w):
+ logic_error(w)
+{ }
+
+
Container::Container():
click_focus(0),
click_button(0)
void Container::add(Widget &wdg)
{
- set_parent(wdg, this);
+ wdg.set_parent(this);
children.push_back(create_child(&wdg));
+ on_child_added(wdg);
}
void Container::remove(Widget &wdg)
for(list<Child *>::iterator i=children.begin(); i!=children.end(); ++i)
if((*i)->widget==&wdg)
{
- set_parent(wdg, 0);
+ wdg.set_parent(0);
delete *i;
children.erase(i);
+ on_child_removed(wdg);
return;
}
- throw InvalidState("That Widget is not in this Container");
+ throw hierarchy_error("widget not in container");
+}
+
+Container::Child *Container::create_child(Widget *wdg)
+{
+ return new Child(*this, wdg);
}
list<Widget *> Container::get_children() const
click_focus = 0;
}
-Container::Child *Container::create_child(Widget *wdg)
-{
- return new Child(*this, wdg);
-}
-
void Container::on_reparent()
{
for(list<Child *>::iterator i=children.begin(); i!=children.end(); ++i)
{
if(Container *c = dynamic_cast<Container *>((*i)->widget))
c->on_reparent();
- update_style(*(*i)->widget);
+ (*i)->widget->update_style();
}
}