htop/SignalsPanel.c

78 lines
1.8 KiB
C
Raw Permalink Normal View History

2006-03-04 18:16:49 +00:00
2006-05-30 13:47:28 +00:00
#include "SignalsPanel.h"
#include "Panel.h"
2006-03-04 18:16:49 +00:00
#include "SignalItem.h"
#include "RichString.h"
#include "debug.h"
#include <assert.h>
#include <ctype.h>
/*{
2006-05-30 13:47:28 +00:00
typedef struct SignalsPanel_ {
Panel super;
2006-03-04 18:16:49 +00:00
int state;
Signal** signals;
2006-05-30 13:47:28 +00:00
} SignalsPanel;
2006-03-04 18:16:49 +00:00
}*/
static HandlerResult SignalsPanel_eventHandler(Panel* super, int ch) {
2006-05-30 13:47:28 +00:00
SignalsPanel* this = (SignalsPanel*) super;
2006-03-04 18:16:49 +00:00
2006-05-30 13:47:28 +00:00
int size = Panel_getSize(super);
2006-03-04 18:16:49 +00:00
if (ch <= 255 && isdigit(ch)) {
int signal = ch-48 + this->state;
for (int i = 0; i < size; i++)
2006-05-30 13:47:28 +00:00
if (((Signal*) Panel_get(super, i))->number == signal) {
Panel_setSelected(super, i);
2006-03-04 18:16:49 +00:00
break;
}
this->state = signal * 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;
}