1 /*
2 * checkbutton.h
3 * DIN Is Noise is copyright (c) 2006-2021 Jagannathan Sampath
4 * DIN Is Noise is released under GNU Public License 2.0
5 * For more information, please visit https://dinisnoise.org/
6 */
7 
8 
9 #ifndef __checkbutton
10 #define __checkbutton
11 
12 #define DONT_CALL_LISTENER 0
13 
14 #include "button.h"
15 
16 struct state_listener;
17 
18 struct checkbutton : button, click_listener {
19 
20 	int state; // 0 = off, 1 = on
21 	state_listener* lsnr;
22 
23 	int colorize_;
24   static color on_color, off_color;
25 
26 	checkbutton ();
27 
28 	void set_state (int s, int call_listener = 1);
is_oncheckbutton29 	int is_on () const {return state;}
30 	void turn_on (int call_listener = 1);
31 	void turn_off (int call_listener = 1);
32 	void toggle ();
33 
set_listenercheckbutton34   inline void set_listener (state_listener* sl) {lsnr = sl;}
35 
36 	void blend_on_off_color (float blend);
colorizecheckbutton37 	int colorize () const {return colorize_;}
colorizecheckbutton38 	void colorize (int clr) {colorize_ = clr;}
39   void clicked (button& b);
40 
setcheckbutton41 	void set (const std::string& l, state_listener* ls) {
42 		set_text (l);
43 		set_listener (ls);
44 	}
45 
46 };
47 
48 struct state_listener : voiddata {
49 	virtual void changed (checkbutton& cb) = 0;
50 };
51 
52 #define DECL_STATE_LISTENER(name) struct name : state_listener { void changed (checkbutton& cb); };
53 #define MAKE_STATE_LISTENER(name,var) struct name : state_listener { void changed (checkbutton& cb); }; name var;
54 #define CLICKED_CHECKBUTTON(scope,name) void scope::name::changed (checkbutton& cb)
55 
56 #endif
57