cwidget 0.5.18
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
13namespace 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 fragment represents a logical unit of text.
Definition fragment.h:38
A "style" is a setting to be applied to a display element (widget, text, etc).
Definition style.h:52
Definition ref_ptr.h:20
This class represents a push-button.
Definition button.h:24
Definition togglebutton.h:76
label widgets display some (possibly formatted) text statically.
Definition label.h:25
Definition togglebutton.h:135
Definition togglebutton.h:18
void paint(const style &st)
Display this widget.
Definition togglebutton.cc:48
The namespace containing everything defined by cwidget.
Definition columnify.cc:28
Definition widget.h:89