radiogroup.h
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef RADIOGROUP_H
00024 #define RADIOGROUP_H
00025
00026 #include <cwidget/generic/util/ref_ptr.h>
00027
00028 #include <vector>
00029
00030 #include <sigc++/connection.h>
00031 #include <sigc++/trackable.h>
00032
00033 namespace cwidget
00034 {
00035 namespace widgets
00036 {
00037 class togglebutton;
00038
00039 class radiogroup:public sigc::trackable
00040 {
00041 struct item
00042 {
00043 util::ref_ptr<togglebutton> b;
00044 int id;
00045
00046
00047 sigc::connection destroyed_conn, pressed_conn;
00048
00049 item(const util::ref_ptr<togglebutton> &_b, int _id,
00050 const sigc::connection &_dconn, const sigc::connection &_pconn)
00051 :b(_b), id(_id), destroyed_conn(_dconn), pressed_conn(_pconn) {}
00052 };
00053
00054 typedef std::vector<item> itemlist;
00055
00056 itemlist items;
00057
00058
00059 itemlist::size_type selected;
00060
00061
00062
00063 void button_pressed(itemlist::size_type index);
00064 public:
00065 radiogroup();
00066 ~radiogroup();
00067
00068 void add_button(const util::ref_ptr<togglebutton> &b, int id);
00069 void rem_button(const util::ref_ptr<togglebutton> &b);
00070
00071 void rem_button_bare(togglebutton &b);
00072
00074 bool selection_valid();
00075
00077 int get_selected();
00078
00079
00080 void select(int id);
00081
00083 void destroy();
00084
00085
00086
00087 sigc::signal1<void, int> item_selected;
00088 };
00089 }
00090 }
00091
00092 #endif