blob: 2c01b5ef5f70e2f40002dc5a6657a9cff8e08e44 [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 Muhammad84281bd2011-12-26 21:35:57 +000011
Hisham Muhammadd6231ba2006-03-04 18:16:49 +000012#include <assert.h>
Hisham Muhammad84281bd2011-12-26 21:35:57 +000013#include <stdlib.h>
14#include <string.h>
Hisham Muhammadd6231ba2006-03-04 18:16:49 +000015
16/*{
Hisham Muhammad84281bd2011-12-26 21:35:57 +000017#include "Panel.h"
18#include "Settings.h"
19#include "ScreenManager.h"
Hisham Muhammadd6231ba2006-03-04 18:16:49 +000020
Hisham Muhammadc2cdcd02006-05-30 13:47:28 +000021typedef struct DisplayOptionsPanel_ {
22 Panel super;
Hisham Muhammadd6231ba2006-03-04 18:16:49 +000023
24 Settings* settings;
25 ScreenManager* scr;
Hisham Muhammadc2cdcd02006-05-30 13:47:28 +000026} DisplayOptionsPanel;
Hisham Muhammadd6231ba2006-03-04 18:16:49 +000027
28}*/
29
Hisham Muhammadda23c8c2008-03-09 08:58:38 +000030static void DisplayOptionsPanel_delete(Object* object) {
Hisham Muhammadc2cdcd02006-05-30 13:47:28 +000031 Panel* super = (Panel*) object;
32 DisplayOptionsPanel* this = (DisplayOptionsPanel*) object;
33 Panel_done(super);
Hisham Muhammadd6231ba2006-03-04 18:16:49 +000034 free(this);
35}
36
Hisham Muhammadda23c8c2008-03-09 08:58:38 +000037static HandlerResult DisplayOptionsPanel_eventHandler(Panel* super, int ch) {
Hisham Muhammadc2cdcd02006-05-30 13:47:28 +000038 DisplayOptionsPanel* this = (DisplayOptionsPanel*) super;
Hisham Muhammadd6231ba2006-03-04 18:16:49 +000039
40 HandlerResult result = IGNORED;
Hisham Muhammadc2cdcd02006-05-30 13:47:28 +000041 CheckItem* selected = (CheckItem*) Panel_getSelected(super);
Hisham Muhammadd6231ba2006-03-04 18:16:49 +000042
43 switch(ch) {
44 case 0x0a:
45 case 0x0d:
46 case KEY_ENTER:
Hisham Muhammad15ab0ad2008-05-07 23:01:45 +000047 case KEY_MOUSE:
Hisham Muhammadd6231ba2006-03-04 18:16:49 +000048 case ' ':
Hisham Muhammada7c2aed2007-11-08 23:23:01 +000049 CheckItem_set(selected, ! (CheckItem_get(selected)) );
Hisham Muhammadd6231ba2006-03-04 18:16:49 +000050 result = HANDLED;
51 }
52
53 if (result == HANDLED) {
54 this->settings->changed = true;
55 Header* header = this->settings->header;
56 Header_calculateHeight(header);
Hisham Muhammada9c0ea32011-03-22 20:37:08 +000057 Header_reinit(header);
Hisham Muhammadd6231ba2006-03-04 18:16:49 +000058 Header_draw(header);
59 ScreenManager_resize(this->scr, this->scr->x1, header->height, this->scr->x2, this->scr->y2);
60 }
61 return result;
62}
63
Hisham Muhammad00b324b2012-12-05 15:12:20 +000064PanelClass DisplayOptionsPanel_class = {
65 .super = {
66 .extends = Class(Panel),
67 .delete = DisplayOptionsPanel_delete
68 },
69 .eventHandler = DisplayOptionsPanel_eventHandler
70};
71
Hisham Muhammadda23c8c2008-03-09 08:58:38 +000072DisplayOptionsPanel* DisplayOptionsPanel_new(Settings* settings, ScreenManager* scr) {
Hisham Muhammad00b324b2012-12-05 15:12:20 +000073 DisplayOptionsPanel* this = AllocThis(DisplayOptionsPanel);
Hisham Muhammadda23c8c2008-03-09 08:58:38 +000074 Panel* super = (Panel*) this;
Hisham Muhammad00b324b2012-12-05 15:12:20 +000075 Panel_init(super, 1, 1, 1, 1, Class(CheckItem), true);
Hisham Muhammadda23c8c2008-03-09 08:58:38 +000076
77 this->settings = settings;
78 this->scr = scr;
Hisham Muhammadda23c8c2008-03-09 08:58:38 +000079
80 Panel_setHeader(super, "Display options");
Hisham Muhammad81e44312011-12-25 20:23:53 +000081 Panel_add(super, (Object*) CheckItem_new(strdup("Tree view"), &(settings->pl->treeView), false));
82 Panel_add(super, (Object*) CheckItem_new(strdup("Shadow other users' processes"), &(settings->pl->shadowOtherUsers), false));
83 Panel_add(super, (Object*) CheckItem_new(strdup("Hide kernel threads"), &(settings->pl->hideKernelThreads), false));
84 Panel_add(super, (Object*) CheckItem_new(strdup("Hide userland threads"), &(settings->pl->hideUserlandThreads), false));
85 Panel_add(super, (Object*) CheckItem_new(strdup("Display threads in a different color"), &(settings->pl->highlightThreads), false));
86 Panel_add(super, (Object*) CheckItem_new(strdup("Show custom thread names"), &(settings->pl->showThreadNames), false));
87 Panel_add(super, (Object*) CheckItem_new(strdup("Highlight program \"basename\""), &(settings->pl->highlightBaseName), false));
88 Panel_add(super, (Object*) CheckItem_new(strdup("Highlight large numbers in memory counters"), &(settings->pl->highlightMegabytes), false));
89 Panel_add(super, (Object*) CheckItem_new(strdup("Leave a margin around header"), &(settings->header->margin), false));
90 Panel_add(super, (Object*) CheckItem_new(strdup("Detailed CPU time (System/IO-Wait/Hard-IRQ/Soft-IRQ/Steal/Guest)"), &(settings->pl->detailedCPUTime), false));
91 Panel_add(super, (Object*) CheckItem_new(strdup("Count CPUs from 0 instead of 1"), &(settings->pl->countCPUsFromZero), false));
Hisham Muhammadf44a8f22012-10-20 00:43:25 +000092 Panel_add(super, (Object*) CheckItem_new(strdup("Update process names on every refresh"), &(settings->pl->updateProcessNames), false));
Hisham Muhammadda23c8c2008-03-09 08:58:38 +000093 return this;
94}