1 /*
2 * button.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 __button
10 #define __button
11 
12 #include "widget.h"
13 #include "label.h"
14 
15 #include <string>
16 
17 struct button;
18 
19 struct click_listener : voiddata {
20   virtual void clicked (button& b) = 0;
21 };
22 
23 struct button : label {
24 
25   int click;
26 
27   int click_repeat;
28   double start_time, repeat_time;
29 	double first_repeat_time, subsequent_repeat_time;
30 
31   button ();
32 
33   int handle_input ();
34 	click_listener *lsnr;
35 
set_listenerbutton36 	void set_listener (click_listener* l) {lsnr = l;}
37 	int call_listener ();
38 
39   void draw ();
40 
41 };
42 
43 #define DECL_CLICK_LISTENER(name) \
44 struct name : click_listener { \
45 	void clicked (button& b);\
46 };\
47 
48 #define MAKE_CLICK_LISTENER(name,var) \
49 struct name : click_listener {\
50 	void clicked (button& b);\
51 };\
52 name var;\
53 
54 #define CLICKED_BUTTON(scope,name) void scope::name::clicked (button& b)
55 
56 #endif
57