summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHisham Muhammad <hisham@gobolinux.org>2007-12-17 05:55:13 +0000
committerHisham Muhammad <hisham@gobolinux.org>2007-12-17 05:55:13 +0000
commit0cd4f69091c3e01a1432b520ddf79fb67d64622a (patch)
treed2b9a0f08fdf87caa2a0d936d3248a7bbd019d3e
parentb75b1a5818e8876ec761326fe9298dd788b31a47 (diff)
Added missing file
-rw-r--r--AffinityPanel.c48
1 files changed, 48 insertions, 0 deletions
diff --git a/AffinityPanel.c b/AffinityPanel.c
new file mode 100644
index 00000000..007b0590
--- /dev/null
+++ b/AffinityPanel.c
@@ -0,0 +1,48 @@
+
+#include "AffinityPanel.h"
+
+#include "Panel.h"
+#include "CheckItem.h"
+
+#include "debug.h"
+#include <assert.h>
+
+Panel* AffinityPanel_new(int processorCount, unsigned long mask) {
+ Panel* this = Panel_new(1, 1, 1, 1, CHECKITEM_CLASS, true, ListItem_compare);
+ this->eventHandler = AffinityPanel_eventHandler;
+
+ Panel_setHeader(this, "Use CPUs:");
+ for (int i = 0; i < processorCount; i++) {
+ char number[10];
+ snprintf(number, 9, "%d", i+1);
+ Panel_add(this, (Object*) CheckItem_new(String_copy(number), NULL, mask & (1 << i)));
+ }
+ return this;
+}
+
+unsigned long AffinityPanel_getAffinity(Panel* this) {
+ int size = Panel_getSize(this);
+ unsigned long mask = 0;
+ for (int i = 0; i < size; i++) {
+ if (CheckItem_get((CheckItem*)Panel_get(this, i)))
+ mask = mask | (1 << i);
+ }
+ return mask;
+}
+
+HandlerResult AffinityPanel_eventHandler(Panel* this, int ch) {
+ HandlerResult result = IGNORED;
+ CheckItem* selected = (CheckItem*) Panel_getSelected(this);
+ switch(ch) {
+ case ' ':
+ CheckItem_set(selected, ! (CheckItem_get(selected)) );
+ result = HANDLED;
+ break;
+ case 0x0a:
+ case 0x0d:
+ case KEY_ENTER:
+ result = BREAK_LOOP;
+ break;
+ }
+ return result;
+}

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