From 73de9f1ed4fad1c55a1116c411a1e8bb13c0ae72 Mon Sep 17 00:00:00 2001 From: Hisham Muhammad Date: Tue, 30 May 2006 13:52:12 +0000 Subject: Rename ListBox'es to Panel's, matching dit. --- SignalsPanel.c | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 SignalsPanel.c (limited to 'SignalsPanel.c') diff --git a/SignalsPanel.c b/SignalsPanel.c new file mode 100644 index 00000000..cb9382ea --- /dev/null +++ b/SignalsPanel.c @@ -0,0 +1,77 @@ + +#include "SignalsPanel.h" +#include "Panel.h" +#include "SignalItem.h" +#include "RichString.h" + +#include "debug.h" +#include + +#include + +/*{ + +typedef struct SignalsPanel_ { + Panel super; + + int state; + Signal** signals; +} SignalsPanel; + +}*/ + +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_delete(Object* object) { + Panel* super = (Panel*) object; + SignalsPanel* this = (SignalsPanel*) object; + Panel_done(super); + free(this->signals); + free(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; +} + +HandlerResult SignalsPanel_EventHandler(Panel* super, int ch) { + SignalsPanel* this = (SignalsPanel*) super; + + int size = Panel_getSize(super); + + if (ch <= 255 && isdigit(ch)) { + int signal = ch-48 + this->state; + for (int i = 0; i < size; i++) + if (((Signal*) Panel_get(super, i))->number == signal) { + Panel_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; +} -- cgit v1.2.3