00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef STACKED_H
00010 #define STACKED_H
00011
00012 #include "passthrough.h"
00013
00014 #include <sigc++/connection.h>
00015
00016 namespace cwidget
00017 {
00018 namespace widgets
00019 {
00020 class stacked : public passthrough
00021 {
00022
00023
00024 struct child_info
00025 {
00026 widget_ref w;
00027
00028 sigc::connection shown_conn, hidden_conn;
00029
00030 child_info(const widget_ref &_w,
00031 SigC::Connection &_shown_conn,
00032 SigC::Connection &_hidden_conn)
00033 :w(_w), shown_conn(_shown_conn),
00034 hidden_conn(_hidden_conn)
00035 {
00036 }
00037 };
00038
00039 typedef std::list<child_info> childlist;
00040
00041 childlist children;
00042
00043 int req_w, req_h;
00044
00045 void layout_me();
00046
00047 void hide_widget();
00048 protected:
00049 void paint(const style &st);
00050
00051
00052
00053 stacked(int w, int h);
00054 public:
00055 ~stacked();
00056
00057 void destroy();
00058
00059 static util::ref_ptr<stacked> create(int w=0, int h=0)
00060 {
00061 util::ref_ptr<stacked> rval(new stacked(w, h));
00062 rval->decref();
00063 return rval;
00064 }
00065
00066 void add_widget(const widget_ref &w);
00067 void rem_widget(const widget_ref &w);
00068 void raise_widget(const widget_ref &w);
00069 void lower_widget(const widget_ref &w);
00070
00071 void raise_widget_bare(widget &w)
00072 {
00073 raise_widget(widget_ref(&w));
00074 }
00075 void lower_widget_bare(widget &w)
00076 {
00077 lower_widget(widget_ref(&w));
00078 }
00079
00080 void dispatch_mouse(short id, int x, int y, int z, mmask_t bstate);
00081
00082 widget_ref get_focus();
00083
00084 void show_all();
00085
00086 int width_request();
00087 int height_request(int w);
00088 };
00089
00090 typedef util::ref_ptr<stacked> stacked_ref;
00091 }
00092 }
00093
00094 #endif