cwidget  0.5.17
togglebutton.h
1 // togglebutton.h -*-c++-*-
2 //
3 // I like having a "togglable" button which doesn't force a particular
4 // policy..it makes radio buttons much easier to do right.
5 
6 #ifndef TOGGLEBUTTON_H
7 #define TOGGLEBUTTON_H
8 
9 #include "button.h"
10 
11 #include <sigc++/functors/mem_fun.h>
12 
13 namespace cwidget
14 {
15  namespace widgets
16  {
17  class togglebutton:public button
18  {
19  bool checked;
20  char bracketl, mark, bracketr;
21 
22  void paint_check(int row);
23 
24  protected:
25  void silent_set_checked(bool _checked);
26  // to be used mainly to avoid emitting signals (eg, if you're trying to
27  // coordinate a togglebutton with an underlying option)
28 
29  togglebutton(char _bracketl, char _mark, char _bracketr,
30  fragment *_label, bool _checked);
31 
32  togglebutton(char _bracketl, char _mark, char _bracketr,
33  const std::string &_label, bool _checked);
34 
35  public:
37  create(char bracketl, char mark, char bracketr,
38  fragment *label, bool checked = false)
39  {
41  rval(new togglebutton(bracketl, mark, bracketr,
42  label, checked));
43  rval->decref();
44  return rval;
45  }
46 
48  create(char bracketl, char mark, char bracketr,
49  const std::string &label, bool checked = false)
50  {
52  rval(new togglebutton(bracketl, mark, bracketr,
53  label, checked));
54  rval->decref();
55  return rval;
56  }
57 
58  point get_cursorloc();
59 
60  void paint(const style &st);
61 
62  bool get_checked() {return checked;}
63  void set_checked(bool _checked)
64  {
65  if(checked!=_checked)
66  do_toggle();
67  }
68 
69  // named "do_toggle" to avoid typos wrt "toggled"
70  void do_toggle();
71 
72  sigc::signal0<void> toggled;
73  };
74 
76  {
77  protected:
78  checkbutton(fragment *_label, bool _checked)
79  :togglebutton('[', 'X', ']', _label, _checked)
80  {
81  pressed.connect(sigc::mem_fun(*this, &togglebutton::do_toggle));
82  }
83 
84  checkbutton(const std::string &_label, bool _checked)
85  :togglebutton('[', 'X', ']', _label, _checked)
86  {
87  pressed.connect(sigc::mem_fun(*this, &togglebutton::do_toggle));
88  }
89 
90  checkbutton(char bracketr, char mark, char bracketl,
91  fragment *_label, bool _checked)
92  :togglebutton(bracketr, mark, bracketl, _label, _checked)
93  {
94  pressed.connect(sigc::mem_fun(*this, &togglebutton::do_toggle));
95  }
96 
97  checkbutton(char bracketr, char mark, char bracketl,
98  const std::string &_label, bool _checked)
99  :togglebutton(bracketr, mark, bracketl, _label, _checked)
100  {
101  pressed.connect(sigc::mem_fun(*this, &togglebutton::do_toggle));
102  }
103 
104  public:
106  create(fragment *label, bool checked = false)
107  {
108  return new checkbutton(label, checked);
109  }
110 
112  create(const std::string &label, bool checked = false)
113  {
114  return new checkbutton(label, checked);
115  }
116 
118  create(char bracketr, char mark, char bracketl,
119  fragment *label, bool checked = false)
120  {
121  return new checkbutton(bracketr, mark, bracketl,
122  label, checked);
123  }
124 
126  create(char bracketr, char mark, char bracketl,
127  const std::string &label, bool checked = false)
128  {
129  return new checkbutton(bracketr, mark, bracketl,
130  label, checked);
131  }
132  };
133 
135  {
136  protected:
137  radiobutton(fragment *_label, bool _checked)
138  :togglebutton('(', '*', ')', _label, _checked)
139  {
140  }
141 
142  radiobutton(const std::string &_label, bool _checked)
143  :togglebutton('(', '*', ')', _label, _checked)
144  {
145  }
146 
147  public:
149  create(fragment *label, bool checked = false)
150  {
151  return new radiobutton(label, checked);
152  }
153 
155  create(const std::string &label, bool checked = false)
156  {
157  return new radiobutton(label, checked);
158  }
159  };
160 
164  }
165 }
166 
167 #endif
A "style" is a setting to be applied to a display element (widget, text, etc).
Definition: style.h:51
Definition: widget.h:89
Definition: ref_ptr.h:19
void paint(const style &st)
Display this widget.
Definition: togglebutton.cc:48
The namespace containing everything defined by cwidget.
Definition: columnify.cc:26
This class represents a push-button.
Definition: button.h:23
label widgets display some (possibly formatted) text statically.
Definition: label.h:24
Definition: togglebutton.h:75
Definition: togglebutton.h:17
Definition: togglebutton.h:134
A fragment represents a logical unit of text.
Definition: fragment.h:37