1 #ifndef MSP_GLTK_CONTAINER_H_
2 #define MSP_GLTK_CONTAINER_H_
6 #include <sigc++/trackable.h>
7 #include "mspgltk_api.h"
13 class MSPGLTK_API hierarchy_error: public std::logic_error
16 hierarchy_error(const std::string &);
17 virtual ~hierarchy_error() throw() { }
21 class MSPGLTK_API Container: virtual public Widget
24 struct Child: public sigc::trackable
28 Time::TimeDelta time_since_animate;
30 Child(Container &, Widget *);
33 void visibility_changed(bool);
36 void ungrab_pointer();
37 void request_animation(const Time::TimeDelta &);
38 void rebuild_needed();
41 std::list<Child *> children;
43 unsigned click_button;
44 Widget *pointer_focus;
47 Widget *saved_input_focus;
49 bool children_rebuild_needed;
56 void remove(Widget &);
58 virtual Child *create_child(Widget *);
59 Geometry determine_child_geometry(const Widget &, const Part &) const;
60 void autosize_child(const Widget &, const Part &, Geometry &) const;
61 void reposition_child(Widget &, const Part &) const;
63 std::list<Widget *> get_children() const;
64 Widget *get_child_at(int, int) const;
65 Widget *get_descendant_at(int, int) const;
69 void set_pointer_focus(Widget *, bool = false);
70 void set_input_focus(Widget *);
72 Widget *get_input_focus() const { return input_focus; }
73 Widget *get_final_input_focus() const;
76 void check_animation_interval();
79 virtual void rebuild_hierarchy();
82 virtual void button_press(int, int, unsigned);
83 virtual void button_release(int, int, unsigned);
84 virtual void pointer_motion(int, int);
86 Widget *get_pointer_target(int, int, bool) const;
88 virtual void pointer_leave();
89 virtual void touch_press(int, int, unsigned);
90 virtual void touch_release(int, int, unsigned);
91 virtual void touch_motion(int, int, unsigned);
92 virtual bool key_press(unsigned, unsigned);
93 virtual bool key_release(unsigned, unsigned);
94 virtual bool character(wchar_t);
95 virtual void focus_in();
96 virtual void focus_out();
97 virtual bool navigate(Navigation);
98 virtual void animate(const Time::TimeDelta &);
100 virtual void on_reparent();
101 virtual void on_child_added(Widget &) { }
102 virtual void on_child_removed(Widget &) { }
103 virtual void on_input_focus_changed(Widget *);