]> git.tdb.fi Git - libs/gltk.git/blob - source/container.h
Strip copyright messages and id tags from individual files
[libs/gltk.git] / source / container.h
1 #ifndef MSP_GLTK_CONTAINER_H_
2 #define MSP_GLTK_CONTAINER_H_
3
4 #include <list>
5 #include <sigc++/trackable.h>
6 #include "widget.h"
7
8 namespace Msp {
9 namespace GLtk {
10
11 class Container: virtual public Widget
12 {
13 protected:
14         struct Child: public sigc::trackable
15         {
16                 Container &container;
17                 Widget *widget;
18
19                 Child(Container &, Widget *);
20                 virtual ~Child();
21
22                 void visibility_changed(bool);
23         };
24
25         std::list<Child *> children;
26         Widget *click_focus;
27         unsigned click_button;
28
29         Container();
30 public:
31         virtual ~Container();
32
33         void add(Widget &);
34         void remove(Widget &);
35 protected:
36         virtual Child *create_child(Widget *);
37 public:
38         std::list<Widget *> get_children() const;
39         Widget *get_child_at(int, int);
40         Widget *get_descendant_at(int, int);
41
42         virtual void button_press(int, int, unsigned);
43         virtual void button_release(int, int, unsigned);
44         virtual void pointer_motion(int, int);
45         virtual void pointer_leave();
46 protected:
47         virtual void on_reparent();
48         virtual void on_child_added(Widget &) { }
49         virtual void on_child_removed(Widget &) { }
50 };
51
52 } // namespace GLtk
53 } // namespace Msp
54
55 #endif