1.2.2
by Bartosz Fenski
Import upstream version 0.6.3 |
1 |
#include "SignalsPanel.h" |
2 |
#include "Panel.h" |
|
3 |
#include "SignalItem.h" |
|
4 |
#include "RichString.h" |
|
5 |
||
6 |
#include "debug.h" |
|
7 |
#include <assert.h> |
|
8 |
||
9 |
#include <ctype.h> |
|
10 |
||
11 |
/*{
|
|
12 |
||
13 |
typedef struct SignalsPanel_ {
|
|
14 |
Panel super;
|
|
15 |
||
16 |
int state;
|
|
17 |
Signal** signals;
|
|
18 |
} SignalsPanel;
|
|
19 |
||
20 |
}*/
|
|
21 |
||
22 |
static HandlerResult SignalsPanel_eventHandler(Panel* super, int ch) { |
|
1.1.11
by David Futcher
Import upstream version 0.8 |
23 |
SignalsPanel* this = (SignalsPanel*) super; |
1.2.2
by Bartosz Fenski
Import upstream version 0.6.3 |
24 |
|
25 |
int size = Panel_getSize(super); |
|
26 |
||
27 |
if (ch <= 255 && isdigit(ch)) { |
|
28 |
int signal = ch-48 + this->state; |
|
29 |
for (int i = 0; i < size; i++) |
|
30 |
if (((Signal*) Panel_get(super, i))->number == signal) { |
|
31 |
Panel_setSelected(super, i); |
|
32 |
break; |
|
33 |
}
|
|
34 |
this->state = signal * 10; |
|
35 |
if (this->state > 100) |
|
36 |
this->state = 0; |
|
37 |
return HANDLED; |
|
38 |
} else { |
|
39 |
this->state = 0; |
|
40 |
}
|
|
41 |
if (ch == 13) { |
|
42 |
return BREAK_LOOP; |
|
43 |
}
|
|
44 |
return IGNORED; |
|
45 |
}
|
|
46 |
||
1.1.11
by David Futcher
Import upstream version 0.8 |
47 |
static void SignalsPanel_delete(Object* object) { |
48 |
Panel* super = (Panel*) object; |
|
49 |
SignalsPanel* this = (SignalsPanel*) object; |
|
50 |
Panel_done(super); |
|
51 |
free(this->signals); |
|
52 |
free(this); |
|
53 |
}
|
|
54 |
||
55 |
SignalsPanel* SignalsPanel_new(int x, int y, int w, int h) { |
|
56 |
SignalsPanel* this = (SignalsPanel*) malloc(sizeof(SignalsPanel)); |
|
57 |
Panel* super = (Panel*) this; |
|
58 |
Panel_init(super, x, y, w, h, SIGNAL_CLASS, true); |
|
59 |
((Object*)this)->delete = SignalsPanel_delete; |
|
60 |
||
61 |
this->signals = Signal_getSignalTable(); |
|
62 |
super->eventHandler = SignalsPanel_eventHandler; |
|
63 |
int sigCount = Signal_getSignalCount(); |
|
64 |
for(int i = 0; i < sigCount; i++) |
|
65 |
Panel_set(super, i, (Object*) this->signals[i]); |
|
66 |
SignalsPanel_reset(this); |
|
67 |
return this; |
|
68 |
}
|
|
69 |
||
70 |
void SignalsPanel_reset(SignalsPanel* this) { |
|
71 |
Panel* super = (Panel*) this; |
|
72 |
||
73 |
Panel_setHeader(super, "Send signal:"); |
|
74 |
Panel_setSelected(super, 16); // 16th item is SIGTERM |
|
75 |
this->state = 0; |
|
76 |
}
|
|
77 |