blob: c2c0d33eca116ef343a3ffa0a07e4c79478d03a5 [file] [log] [blame]
Hisham Muhammadd6231ba2006-03-04 18:16:49 +00001
Hisham Muhammadc2cdcd02006-05-30 13:47:28 +00002#include "DisplayOptionsPanel.h"
Hisham Muhammadd6231ba2006-03-04 18:16:49 +00003
Hisham Muhammadc2cdcd02006-05-30 13:47:28 +00004#include "Panel.h"
Hisham Muhammadd6231ba2006-03-04 18:16:49 +00005#include "CheckItem.h"
6#include "Settings.h"
7#include "ScreenManager.h"
8
9#include "debug.h"
10#include <assert.h>
11
12/*{
13
Hisham Muhammadc2cdcd02006-05-30 13:47:28 +000014typedef struct DisplayOptionsPanel_ {
15 Panel super;
Hisham Muhammadd6231ba2006-03-04 18:16:49 +000016
17 Settings* settings;
18 ScreenManager* scr;
Hisham Muhammadc2cdcd02006-05-30 13:47:28 +000019} DisplayOptionsPanel;
Hisham Muhammadd6231ba2006-03-04 18:16:49 +000020
21}*/
22
Hisham Muhammadda23c8c2008-03-09 08:58:38 +000023static void DisplayOptionsPanel_delete(Object* object) {
Hisham Muhammadc2cdcd02006-05-30 13:47:28 +000024 Panel* super = (Panel*) object;
25 DisplayOptionsPanel* this = (DisplayOptionsPanel*) object;
26 Panel_done(super);
Hisham Muhammadd6231ba2006-03-04 18:16:49 +000027 free(this);
28}
29
Hisham Muhammadda23c8c2008-03-09 08:58:38 +000030static HandlerResult DisplayOptionsPanel_eventHandler(Panel* super, int ch) {
Hisham Muhammadc2cdcd02006-05-30 13:47:28 +000031 DisplayOptionsPanel* this = (DisplayOptionsPanel*) super;
Hisham Muhammadd6231ba2006-03-04 18:16:49 +000032
33 HandlerResult result = IGNORED;
Hisham Muhammadc2cdcd02006-05-30 13:47:28 +000034 CheckItem* selected = (CheckItem*) Panel_getSelected(super);
Hisham Muhammadd6231ba2006-03-04 18:16:49 +000035
36 switch(ch) {
37 case 0x0a:
38 case 0x0d:
39 case KEY_ENTER:
Hisham Muhammad15ab0ad2008-05-07 23:01:45 +000040 case KEY_MOUSE:
Hisham Muhammadd6231ba2006-03-04 18:16:49 +000041 case ' ':
Hisham Muhammada7c2aed2007-11-08 23:23:01 +000042 CheckItem_set(selected, ! (CheckItem_get(selected)) );
Hisham Muhammadd6231ba2006-03-04 18:16:49 +000043 result = HANDLED;
44 }
45
46 if (result == HANDLED) {
47 this->settings->changed = true;
48 Header* header = this->settings->header;
49 Header_calculateHeight(header);
Hisham Muhammada9c0ea32011-03-22 20:37:08 +000050 Header_reinit(header);
Hisham Muhammadd6231ba2006-03-04 18:16:49 +000051 Header_draw(header);
52 ScreenManager_resize(this->scr, this->scr->x1, header->height, this->scr->x2, this->scr->y2);
53 }
54 return result;
55}
56
Hisham Muhammadda23c8c2008-03-09 08:58:38 +000057DisplayOptionsPanel* DisplayOptionsPanel_new(Settings* settings, ScreenManager* scr) {
58 DisplayOptionsPanel* this = (DisplayOptionsPanel*) malloc(sizeof(DisplayOptionsPanel));
59 Panel* super = (Panel*) this;
60 Panel_init(super, 1, 1, 1, 1, CHECKITEM_CLASS, true);
61 ((Object*)this)->delete = DisplayOptionsPanel_delete;
62
63 this->settings = settings;
64 this->scr = scr;
65 super->eventHandler = DisplayOptionsPanel_eventHandler;
66
67 Panel_setHeader(super, "Display options");
Hisham Muhammad81e44312011-12-25 20:23:53 +000068 Panel_add(super, (Object*) CheckItem_new(strdup("Tree view"), &(settings->pl->treeView), false));
69 Panel_add(super, (Object*) CheckItem_new(strdup("Shadow other users' processes"), &(settings->pl->shadowOtherUsers), false));
70 Panel_add(super, (Object*) CheckItem_new(strdup("Hide kernel threads"), &(settings->pl->hideKernelThreads), false));
71 Panel_add(super, (Object*) CheckItem_new(strdup("Hide userland threads"), &(settings->pl->hideUserlandThreads), false));
72 Panel_add(super, (Object*) CheckItem_new(strdup("Display threads in a different color"), &(settings->pl->highlightThreads), false));
73 Panel_add(super, (Object*) CheckItem_new(strdup("Show custom thread names"), &(settings->pl->showThreadNames), false));
74 Panel_add(super, (Object*) CheckItem_new(strdup("Highlight program \"basename\""), &(settings->pl->highlightBaseName), false));
75 Panel_add(super, (Object*) CheckItem_new(strdup("Highlight large numbers in memory counters"), &(settings->pl->highlightMegabytes), false));
76 Panel_add(super, (Object*) CheckItem_new(strdup("Leave a margin around header"), &(settings->header->margin), false));
77 Panel_add(super, (Object*) CheckItem_new(strdup("Detailed CPU time (System/IO-Wait/Hard-IRQ/Soft-IRQ/Steal/Guest)"), &(settings->pl->detailedCPUTime), false));
78 Panel_add(super, (Object*) CheckItem_new(strdup("Count CPUs from 0 instead of 1"), &(settings->pl->countCPUsFromZero), false));
Hisham Muhammadda23c8c2008-03-09 08:58:38 +000079 return this;
80}