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