You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
77 lines
1.8 KiB
77 lines
1.8 KiB
|
|
#include "SignalsPanel.h" |
|
#include "Panel.h" |
|
#include "SignalItem.h" |
|
#include "RichString.h" |
|
|
|
#include "debug.h" |
|
#include <assert.h> |
|
|
|
#include <ctype.h> |
|
|
|
/*{ |
|
|
|
typedef struct SignalsPanel_ { |
|
Panel super; |
|
|
|
int state; |
|
Signal** signals; |
|
} SignalsPanel; |
|
|
|
}*/ |
|
|
|
static HandlerResult SignalsPanel_eventHandler(Panel* super, int ch) { |
|
SignalsPanel* this = (SignalsPanel*) super; |
|
|
|
int size = Panel_size(super); |
|
|
|
if (ch <= 255 && isdigit(ch)) { |
|
int sgn = ch-48 + this->state; |
|
for (int i = 0; i < size; i++) |
|
if (((Signal*) Panel_get(super, i))->number == sgn) { |
|
Panel_setSelected(super, i); |
|
break; |
|
} |
|
this->state = sgn * 10; |
|
if (this->state > 100) |
|
this->state = 0; |
|
return HANDLED; |
|
} else { |
|
this->state = 0; |
|
} |
|
if (ch == 13) { |
|
return BREAK_LOOP; |
|
} |
|
return IGNORED; |
|
} |
|
|
|
static void SignalsPanel_delete(Object* object) { |
|
Panel* super = (Panel*) object; |
|
SignalsPanel* this = (SignalsPanel*) object; |
|
Panel_done(super); |
|
free(this->signals); |
|
free(this); |
|
} |
|
|
|
SignalsPanel* SignalsPanel_new(int x, int y, int w, int h) { |
|
SignalsPanel* this = (SignalsPanel*) malloc(sizeof(SignalsPanel)); |
|
Panel* super = (Panel*) this; |
|
Panel_init(super, x, y, w, h, SIGNAL_CLASS, true); |
|
((Object*)this)->delete = SignalsPanel_delete; |
|
|
|
this->signals = Signal_getSignalTable(); |
|
super->eventHandler = SignalsPanel_eventHandler; |
|
int sigCount = Signal_getSignalCount(); |
|
for(int i = 0; i < sigCount; i++) |
|
Panel_set(super, i, (Object*) this->signals[i]); |
|
SignalsPanel_reset(this); |
|
return this; |
|
} |
|
|
|
void SignalsPanel_reset(SignalsPanel* this) { |
|
Panel* super = (Panel*) this; |
|
|
|
Panel_setHeader(super, "Send signal:"); |
|
Panel_setSelected(super, 16); // 16th item is SIGTERM |
|
this->state = 0; |
|
}
|
|
|