00001
00002
00003
00004
00005
00006 #ifndef TOGGLEBUTTON_H
00007 #define TOGGLEBUTTON_H
00008
00009 #include "button.h"
00010
00011 #include <sigc++/functors/mem_fun.h>
00012
00013 namespace cwidget
00014 {
00015 namespace widgets
00016 {
00017 class togglebutton:public button
00018 {
00019 bool checked;
00020 char bracketl, mark, bracketr;
00021
00022 void paint_check(int row);
00023
00024 protected:
00025 void silent_set_checked(bool _checked);
00026
00027
00028
00029 togglebutton(char _bracketl, char _mark, char _bracketr,
00030 fragment *_label, bool _checked);
00031
00032 togglebutton(char _bracketl, char _mark, char _bracketr,
00033 const std::string &_label, bool _checked);
00034
00035 public:
00036 static util::ref_ptr<togglebutton>
00037 create(char bracketl, char mark, char bracketr,
00038 fragment *label, bool checked = false)
00039 {
00040 util::ref_ptr<togglebutton>
00041 rval(new togglebutton(bracketl, mark, bracketr,
00042 label, checked));
00043 rval->decref();
00044 return rval;
00045 }
00046
00047 static util::ref_ptr<togglebutton>
00048 create(char bracketl, char mark, char bracketr,
00049 const std::string &label, bool checked = false)
00050 {
00051 util::ref_ptr<togglebutton>
00052 rval(new togglebutton(bracketl, mark, bracketr,
00053 label, checked));
00054 rval->decref();
00055 return rval;
00056 }
00057
00058 point get_cursorloc();
00059
00060 void paint(const style &st);
00061
00062 bool get_checked() {return checked;}
00063 void set_checked(bool _checked)
00064 {
00065 if(checked!=_checked)
00066 do_toggle();
00067 }
00068
00069
00070 void do_toggle();
00071
00072 sigc::signal0<void> toggled;
00073 };
00074
00075 class checkbutton:public togglebutton
00076 {
00077 protected:
00078 checkbutton(fragment *_label, bool _checked)
00079 :togglebutton('[', 'X', ']', _label, _checked)
00080 {
00081 pressed.connect(sigc::mem_fun(*this, &togglebutton::do_toggle));
00082 }
00083
00084 checkbutton(const std::string &_label, bool _checked)
00085 :togglebutton('[', 'X', ']', _label, _checked)
00086 {
00087 pressed.connect(sigc::mem_fun(*this, &togglebutton::do_toggle));
00088 }
00089
00090 checkbutton(char bracketr, char mark, char bracketl,
00091 fragment *_label, bool _checked)
00092 :togglebutton(bracketr, mark, bracketl, _label, _checked)
00093 {
00094 pressed.connect(sigc::mem_fun(*this, &togglebutton::do_toggle));
00095 }
00096
00097 checkbutton(char bracketr, char mark, char bracketl,
00098 const std::string &_label, bool _checked)
00099 :togglebutton(bracketr, mark, bracketl, _label, _checked)
00100 {
00101 pressed.connect(sigc::mem_fun(*this, &togglebutton::do_toggle));
00102 }
00103
00104 public:
00105 static util::ref_ptr<checkbutton>
00106 create(fragment *label, bool checked = false)
00107 {
00108 return new checkbutton(label, checked);
00109 }
00110
00111 static util::ref_ptr<checkbutton>
00112 create(const std::string &label, bool checked = false)
00113 {
00114 return new checkbutton(label, checked);
00115 }
00116
00117 static util::ref_ptr<checkbutton>
00118 create(char bracketr, char mark, char bracketl,
00119 fragment *label, bool checked = false)
00120 {
00121 return new checkbutton(bracketr, mark, bracketl,
00122 label, checked);
00123 }
00124
00125 static util::ref_ptr<checkbutton>
00126 create(char bracketr, char mark, char bracketl,
00127 const std::string &label, bool checked = false)
00128 {
00129 return new checkbutton(bracketr, mark, bracketl,
00130 label, checked);
00131 }
00132 };
00133
00134 class radiobutton:public togglebutton
00135 {
00136 protected:
00137 radiobutton(fragment *_label, bool _checked)
00138 :togglebutton('(', '*', ')', _label, _checked)
00139 {
00140 }
00141
00142 radiobutton(const std::string &_label, bool _checked)
00143 :togglebutton('(', '*', ')', _label, _checked)
00144 {
00145 }
00146
00147 public:
00148 static util::ref_ptr<radiobutton>
00149 create(fragment *label, bool checked = false)
00150 {
00151 return new radiobutton(label, checked);
00152 }
00153
00154 static util::ref_ptr<radiobutton>
00155 create(const std::string &label, bool checked = false)
00156 {
00157 return new radiobutton(label, checked);
00158 }
00159 };
00160
00161 typedef util::ref_ptr<togglebutton> togglebutton_ref;
00162 typedef util::ref_ptr<checkbutton> checkbutton_ref;
00163 typedef util::ref_ptr<radiobutton> radiobutton_ref;
00164 }
00165 }
00166
00167 #endif