aboutsummaryrefslogtreecommitdiffstats
path: root/SignalsPanel.c
diff options
context:
space:
mode:
authorDaniel Lange <DLange@git.local>2016-04-11 13:00:20 +0200
committerDaniel Lange <DLange@git.local>2016-04-11 13:00:20 +0200
commit85bb4ad9cb820ac3b8e935a930084a06cbfd2847 (patch)
tree681fd9b2d9fa80931b2a8bec4bb6667865b7c569 /SignalsPanel.c
parentea859f50d9438bc61ae96721a4d255b49de78653 (diff)
downloaddebian_htop-85bb4ad9cb820ac3b8e935a930084a06cbfd2847.tar.gz
debian_htop-85bb4ad9cb820ac3b8e935a930084a06cbfd2847.tar.bz2
debian_htop-85bb4ad9cb820ac3b8e935a930084a06cbfd2847.zip
Imported Upstream version 0.6.3upstream/0.6.3
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 0000000..cb9382e
--- /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