blob: a895125dbe989f5c36ce5f3eed3241d6dd8fe258 [file] [log] [blame]
Hisham Muhammad84281bd2011-12-26 21:35:57 +00001/*
2htop - DisplayOptionsPanel.c
3(C) 2004-2011 Hisham H. Muhammad
4Released under the GNU GPL, see the COPYING file
5in the source distribution for its full text.
6*/
Hisham Muhammadd6231ba2006-03-04 18:16:49 +00007
Hisham Muhammadc2cdcd02006-05-30 13:47:28 +00008#include "DisplayOptionsPanel.h"
Hisham Muhammadd6231ba2006-03-04 18:16:49 +00009
Hisham Muhammadd6231ba2006-03-04 18:16:49 +000010#include "CheckItem.h"
Hisham Muhammadd6231ba2006-03-04 18:16:49 +000011#include "debug.h"
Hisham Muhammad84281bd2011-12-26 21:35:57 +000012
Hisham Muhammadd6231ba2006-03-04 18:16:49 +000013#include <assert.h>
Hisham Muhammad84281bd2011-12-26 21:35:57 +000014#include <stdlib.h>
15#include <string.h>
Hisham Muhammadd6231ba2006-03-04 18:16:49 +000016
17/*{
Hisham Muhammad84281bd2011-12-26 21:35:57 +000018#include "Panel.h"
19#include "Settings.h"
20#include "ScreenManager.h"
Hisham Muhammadd6231ba2006-03-04 18:16:49 +000021
Hisham Muhammadc2cdcd02006-05-30 13:47:28 +000022typedef struct DisplayOptionsPanel_ {
23 Panel super;
Hisham Muhammadd6231ba2006-03-04 18:16:49 +000024
25 Settings* settings;
26 ScreenManager* scr;
Hisham Muhammadc2cdcd02006-05-30 13:47:28 +000027} DisplayOptionsPanel;
Hisham Muhammadd6231ba2006-03-04 18:16:49 +000028
29}*/
30
Hisham Muhammadda23c8c2008-03-09 08:58:38 +000031static void DisplayOptionsPanel_delete(Object* object) {
Hisham Muhammadc2cdcd02006-05-30 13:47:28 +000032 Panel* super = (Panel*) object;
33 DisplayOptionsPanel* this = (DisplayOptionsPanel*) object;
34 Panel_done(super);
Hisham Muhammadd6231ba2006-03-04 18:16:49 +000035 free(this);
36}
37
Hisham Muhammadda23c8c2008-03-09 08:58:38 +000038static HandlerResult DisplayOptionsPanel_eventHandler(Panel* super, int ch) {
Hisham Muhammadc2cdcd02006-05-30 13:47:28 +000039 DisplayOptionsPanel* this = (DisplayOptionsPanel*) super;
Hisham Muhammadd6231ba2006-03-04 18:16:49 +000040
41 HandlerResult result = IGNORED;
Hisham Muhammadc2cdcd02006-05-30 13:47:28 +000042 CheckItem* selected = (CheckItem*) Panel_getSelected(super);
Hisham Muhammadd6231ba2006-03-04 18:16:49 +000043
44 switch(ch) {
45 case 0x0a:
46 case 0x0d:
47 case KEY_ENTER:
Hisham Muhammad15ab0ad2008-05-07 23:01:45 +000048 case KEY_MOUSE:
Hisham Muhammadd6231ba2006-03-04 18:16:49 +000049 case ' ':
Hisham Muhammada7c2aed2007-11-08 23:23:01 +000050 CheckItem_set(selected, ! (CheckItem_get(selected)) );
Hisham Muhammadd6231ba2006-03-04 18:16:49 +000051 result = HANDLED;
52 }
53
54 if (result == HANDLED) {
55 this->settings->changed = true;
56 Header* header = this->settings->header;
57 Header_calculateHeight(header);
Hisham Muhammada9c0ea32011-03-22 20:37:08 +000058 Header_reinit(header);
Hisham Muhammadd6231ba2006-03-04 18:16:49 +000059 Header_draw(header);
60 ScreenManager_resize(this->scr, this->scr->x1, header->height, this->scr->x2, this->scr->y2);
61 }
62 return result;
63}
64
Hisham Muhammadda23c8c2008-03-09 08:58:38 +000065DisplayOptionsPanel* DisplayOptionsPanel_new(Settings* settings, ScreenManager* scr) {
66 DisplayOptionsPanel* this = (DisplayOptionsPanel*) malloc(sizeof(DisplayOptionsPanel));
67 Panel* super = (Panel*) this;
68 Panel_init(super, 1, 1, 1, 1, CHECKITEM_CLASS, true);
69 ((Object*)this)->delete = DisplayOptionsPanel_delete;
70
71 this->settings = settings;
72 this->scr = scr;
73 super->eventHandler = DisplayOptionsPanel_eventHandler;
74
75 Panel_setHeader(super, "Display options");
Hisham Muhammad81e44312011-12-25 20:23:53 +000076 Panel_add(super, (Object*) CheckItem_new(strdup("Tree view"), &(settings->pl->treeView), false));
77 Panel_add(super, (Object*) CheckItem_new(strdup("Shadow other users' processes"), &(settings->pl->shadowOtherUsers), false));
78 Panel_add(super, (Object*) CheckItem_new(strdup("Hide kernel threads"), &(settings->pl->hideKernelThreads), false));
79 Panel_add(super, (Object*) CheckItem_new(strdup("Hide userland threads"), &(settings->pl->hideUserlandThreads), false));
80 Panel_add(super, (Object*) CheckItem_new(strdup("Display threads in a different color"), &(settings->pl->highlightThreads), false));
81 Panel_add(super, (Object*) CheckItem_new(strdup("Show custom thread names"), &(settings->pl->showThreadNames), false));
82 Panel_add(super, (Object*) CheckItem_new(strdup("Highlight program \"basename\""), &(settings->pl->highlightBaseName), false));
83 Panel_add(super, (Object*) CheckItem_new(strdup("Highlight large numbers in memory counters"), &(settings->pl->highlightMegabytes), false));
84 Panel_add(super, (Object*) CheckItem_new(strdup("Leave a margin around header"), &(settings->header->margin), false));
85 Panel_add(super, (Object*) CheckItem_new(strdup("Detailed CPU time (System/IO-Wait/Hard-IRQ/Soft-IRQ/Steal/Guest)"), &(settings->pl->detailedCPUTime), false));
86 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 +000087 return this;
88}