#include "SignalsListBox.h" #include "ListBox.h" #include "SignalItem.h" #include "RichString.h" #include "debug.h" #include #include /*{ typedef struct SignalsListBox_ { ListBox super; int state; Signal** signals; } SignalsListBox; }*/ SignalsListBox* SignalsListBox_new(int x, int y, int w, int h) { SignalsListBox* this = (SignalsListBox*) malloc(sizeof(SignalsListBox)); ListBox* super = (ListBox*) this; ListBox_init(super, x, y, w, h, SIGNAL_CLASS, true); ((Object*)this)->delete = SignalsListBox_delete; this->signals = Signal_getSignalTable(); super->eventHandler = SignalsListBox_EventHandler; int sigCount = Signal_getSignalCount(); for(int i = 0; i < sigCount; i++) ListBox_set(super, i, (Object*) this->signals[i]); SignalsListBox_reset(this); return this; } void SignalsListBox_delete(Object* object) { ListBox* super = (ListBox*) object; SignalsListBox* this = (SignalsListBox*) object; ListBox_done(super); free(this->signals); free(this); } void SignalsListBox_reset(SignalsListBox* this) { ListBox* super = (ListBox*) this; ListBox_setHeader(super, "Send signal:"); ListBox_setSelected(super, 16); // 16th item is SIGTERM this->state = 0; } HandlerResult SignalsListBox_EventHandler(ListBox* super, int ch) { SignalsListBox* this = (SignalsListBox*) super; int size = ListBox_getSize(super); if (ch <= 255 && isdigit(ch)) { int signal = ch-48 + this->state; for (int i = 0; i < size; i++) if (((Signal*) ListBox_get(super, i))->number == signal) { ListBox_setSelected(super, i); 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; }