]> git.lyx.org Git - lyx.git/blob - src/Timeout.C
change Timeout to use signals some changes because of this
[lyx.git] / src / Timeout.C
1 #include <config.h>
2
3 #include FORMS_H_LOCATION
4
5 #include "Timeout.h"
6 #include "debug.h"
7
8 using std::endl;
9
10 extern "C" {
11         static
12         void C_intern_timeout_cb(int, void * data) 
13         {
14                 Timeout * to = static_cast<Timeout*>(data);
15                 to->emit();
16         }
17 }
18
19
20 Timeout::Timeout()
21         : type(ONETIME), timeout_ms(0), timeout_id(-1)
22 {}
23
24
25 Timeout::Timeout(int msec, Type t)
26         : type(t), timeout_ms(msec), timeout_id(-1)
27 {}
28
29
30 Timeout::~Timeout() 
31 {
32         stop();
33 }
34
35
36 void Timeout::restart()
37 {
38         stop();
39         start();
40 }
41
42
43 void Timeout::start()
44 {
45         if (timeout_id != -1)
46                 lyxerr << "Timeout::start: already running!" << endl;
47         timeout_id = fl_add_timeout(timeout_ms,
48                                     C_intern_timeout_cb, this);
49 }
50         
51
52 void Timeout::stop()
53 {
54         if (timeout_id != -1) {
55                 fl_remove_timeout(timeout_id);
56                 timeout_id = -1;
57         }
58 }
59
60
61 void Timeout::emit()
62 {
63         timeout_id = -1;
64         timeout.emit();
65         if (type == CONTINOUS)
66                 start();
67 }
68         
69
70 void Timeout::setType(Type t)
71 {
72         type = t;
73 }
74
75
76 void Timeout::setTimeout(int msec)
77 {
78         timeout_ms = msec;
79 }