1 #ifndef MSP_GLTK_CONTAINER_H_
2 #define MSP_GLTK_CONTAINER_H_
6 #include <sigc++/trackable.h>
12 class hierarchy_error: public std::logic_error
15 hierarchy_error(const std::string &);
16 virtual ~hierarchy_error() throw() { }
20 class Container: virtual public Widget
23 struct Child: public sigc::trackable
27 Time::TimeDelta time_since_animate;
29 Child(Container &, Widget *);
32 void visibility_changed(bool);
35 void ungrab_pointer();
36 void request_animation(const Time::TimeDelta &);
39 std::list<Child *> children;
41 unsigned click_button;
42 Widget *pointer_focus;
45 Widget *saved_input_focus;
53 void remove(Widget &);
55 virtual Child *create_child(Widget *);
56 Geometry determine_child_geometry(const Widget &, const Part &) const;
57 void autosize_child(const Widget &, const Part &, Geometry &) const;
58 void reposition_child(Widget &, const Part &) const;
60 std::list<Widget *> get_children() const;
61 Widget *get_child_at(int, int) const;
62 Widget *get_descendant_at(int, int) const;
66 void set_pointer_focus(Widget *, bool = false);
67 void set_input_focus(Widget *);
69 Widget *get_input_focus() const { return input_focus; }
70 Widget *get_final_input_focus() const;
73 void check_animation_interval();
76 virtual void button_press(int, int, unsigned);
77 virtual void button_release(int, int, unsigned);
78 virtual void pointer_motion(int, int);
80 Widget *get_pointer_target(int, int, bool) const;
82 virtual void pointer_leave();
83 virtual void touch_press(int, int, unsigned);
84 virtual void touch_release(int, int, unsigned);
85 virtual void touch_motion(int, int, unsigned);
86 virtual bool key_press(unsigned, unsigned);
87 virtual bool key_release(unsigned, unsigned);
88 virtual bool character(wchar_t);
89 virtual void focus_in();
90 virtual void focus_out();
91 virtual bool navigate(Navigation);
92 virtual void animate(const Time::TimeDelta &);
94 virtual void on_reparent();
95 virtual void on_child_added(Widget &) { }
96 virtual void on_child_removed(Widget &) { }
97 virtual void on_input_focus_changed(Widget *);