summaryrefslogtreecommitdiffstats
path: root/SignalsPanel.c
diff options
context:
space:
mode:
authorHisham Muhammad <hisham@gobolinux.org>2006-05-30 13:52:12 +0000
committerHisham Muhammad <hisham@gobolinux.org>2006-05-30 13:52:12 +0000
commit73de9f1ed4fad1c55a1116c411a1e8bb13c0ae72 (patch)
treefdf44194175e52255dd9bd6130062b2fdbb3fa7e /SignalsPanel.c
parentc2cdcd0c1d2950291243b3a8645b5f061a0cdb2a (diff)
Rename ListBox'es to Panel's, matching dit.
Diffstat (limited to 'SignalsPanel.c')
-rw-r--r--SignalsPanel.c77
1 files changed, 77 insertions, 0 deletions
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 <assert.h>
+
+#include <ctype.h>
+
+/*{
+
+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;
+}

© 2014-2024 Faster IT GmbH | imprint | privacy policy