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 &);
37 void rebuild_needed();
40 std::list<Child *> children;
42 unsigned click_button;
43 Widget *pointer_focus;
46 Widget *saved_input_focus;
48 bool children_rebuild_needed;
55 void remove(Widget &);
57 virtual Child *create_child(Widget *);
58 Geometry determine_child_geometry(const Widget &, const Part &) const;
59 void autosize_child(const Widget &, const Part &, Geometry &) const;
60 void reposition_child(Widget &, const Part &) const;
62 std::list<Widget *> get_children() const;
63 Widget *get_child_at(int, int) const;
64 Widget *get_descendant_at(int, int) const;
68 void set_pointer_focus(Widget *, bool = false);
69 void set_input_focus(Widget *);
71 Widget *get_input_focus() const { return input_focus; }
72 Widget *get_final_input_focus() const;
75 void check_animation_interval();
78 virtual void rebuild_hierarchy();
81 virtual void button_press(int, int, unsigned);
82 virtual void button_release(int, int, unsigned);
83 virtual void pointer_motion(int, int);
85 Widget *get_pointer_target(int, int, bool) const;
87 virtual void pointer_leave();
88 virtual void touch_press(int, int, unsigned);
89 virtual void touch_release(int, int, unsigned);
90 virtual void touch_motion(int, int, unsigned);
91 virtual bool key_press(unsigned, unsigned);
92 virtual bool key_release(unsigned, unsigned);
93 virtual bool character(wchar_t);
94 virtual void focus_in();
95 virtual void focus_out();
96 virtual bool navigate(Navigation);
97 virtual void animate(const Time::TimeDelta &);
99 virtual void on_reparent();
100 virtual void on_child_added(Widget &) { }
101 virtual void on_child_removed(Widget &) { }
102 virtual void on_input_focus_changed(Widget *);