-Panel::Panel(const Resources &r):
- Widget(r),
- Container(r),
- pointer_focus(0),
- pointer_grabbed(false),
- input_focus(0)
-{
- update_style();
-}
-
-void Panel::raise(Widget &wdg)
-{
- for(list<Container::Child *>::iterator i=children.begin(); i!=children.end(); ++i)
- if((*i)->widget==&wdg)
- {
- children.splice(children.end(), children, i);
- return;
- }
-
- throw InvalidState("That Widget is not in this Panel");
-}
-
-void Panel::button_press(int x, int y, unsigned btn)
-{
- if(pointer_grabbed)
- {
- const Geometry &cgeom=pointer_focus->get_geometry();
- pointer_focus->button_press(x-cgeom.x, y-cgeom.y, btn);
- }
- else
- {
- if(Widget *wdg=get_child_at(x, y))
- {
- set_pointer_focus(wdg);
- set_input_focus(wdg);
- }
- Container::button_press(x, y, btn);
- }
-}
-
-void Panel::button_release(int x, int y, unsigned btn)
-{
- if(pointer_grabbed)
- {
- const Geometry &cgeom=pointer_focus->get_geometry();
- pointer_focus->button_release(x-cgeom.x, y-cgeom.y, btn);
- }
- else
- Container::button_release(x, y, btn);
-}
-
-void Panel::pointer_motion(int x, int y)
-{
- if(pointer_grabbed)
- {
- const Geometry &cgeom=pointer_focus->get_geometry();
- pointer_focus->pointer_motion(x-cgeom.x, y-cgeom.y);
- }
- else
- {
- set_pointer_focus(get_child_at(x, y));
- Container::pointer_motion(x, y);
- }
-}
-
-void Panel::pointer_leave()
-{
- Container::pointer_leave();
- set_pointer_focus(0);
-}