2011-12-26 21:35:57 +00:00
/*
htop - DisplayOptionsPanel . c
( C ) 2004 - 2011 Hisham H . Muhammad
2020-10-05 07:51:32 +00:00
Released under the GNU GPLv2 , see the COPYING file
2011-12-26 21:35:57 +00:00
in the source distribution for its full text .
*/
2006-03-04 18:16:49 +00:00
2020-09-19 11:55:23 +00:00
# include "config.h" // IWYU pragma: keep
2006-05-30 13:47:28 +00:00
# include "DisplayOptionsPanel.h"
2006-03-04 18:16:49 +00:00
2020-09-19 11:55:23 +00:00
# include <stdbool.h>
2011-12-26 21:35:57 +00:00
# include <stdlib.h>
2006-03-04 18:16:49 +00:00
2020-09-19 18:22:34 +00:00
# include "CRT.h"
2020-09-19 11:55:23 +00:00
# include "FunctionBar.h"
# include "Header.h"
# include "Object.h"
2020-11-21 20:40:08 +00:00
# include "OptionItem.h"
2020-09-19 11:55:23 +00:00
# include "ProvideCurses.h"
2020-09-19 18:22:34 +00:00
2006-03-04 18:16:49 +00:00
2017-07-23 02:41:19 +00:00
static const char * const DisplayOptionsFunctions [ ] = { " " , " " , " " , " " , " " , " " , " " , " " , " " , " Done " , NULL } ;
2015-03-23 18:26:56 +00:00
2008-03-09 08:58:38 +00:00
static void DisplayOptionsPanel_delete ( Object * object ) {
2006-05-30 13:47:28 +00:00
Panel * super = ( Panel * ) object ;
DisplayOptionsPanel * this = ( DisplayOptionsPanel * ) object ;
Panel_done ( super ) ;
2006-03-04 18:16:49 +00:00
free ( this ) ;
}
2008-03-09 08:58:38 +00:00
static HandlerResult DisplayOptionsPanel_eventHandler ( Panel * super , int ch ) {
2006-05-30 13:47:28 +00:00
DisplayOptionsPanel * this = ( DisplayOptionsPanel * ) super ;
2019-07-12 20:01:29 +00:00
2006-03-04 18:16:49 +00:00
HandlerResult result = IGNORED ;
2020-11-21 20:40:08 +00:00
OptionItem * selected = ( OptionItem * ) Panel_getSelected ( super ) ;
2006-03-04 18:16:49 +00:00
2020-11-21 20:40:08 +00:00
switch ( ch ) {
case ' \n ' :
case ' \r ' :
2006-03-04 18:16:49 +00:00
case KEY_ENTER :
2008-05-07 23:01:45 +00:00
case KEY_MOUSE :
2015-08-27 21:42:35 +00:00
case KEY_RECLICK :
2006-03-04 18:16:49 +00:00
case ' ' :
2020-11-21 20:40:08 +00:00
switch ( OptionItem_kind ( selected ) ) {
case OPTION_ITEM_CHECK :
CheckItem_toggle ( ( CheckItem * ) selected ) ;
result = HANDLED ;
break ;
case OPTION_ITEM_NUMBER :
NumberItem_toggle ( ( NumberItem * ) selected ) ;
result = HANDLED ;
break ;
}
break ;
case ' - ' :
if ( OptionItem_kind ( selected ) = = OPTION_ITEM_NUMBER ) {
NumberItem_decrease ( ( NumberItem * ) selected ) ;
result = HANDLED ;
}
break ;
case ' + ' :
if ( OptionItem_kind ( selected ) = = OPTION_ITEM_NUMBER ) {
NumberItem_increase ( ( NumberItem * ) selected ) ;
result = HANDLED ;
}
break ;
2006-03-04 18:16:49 +00:00
}
if ( result = = HANDLED ) {
this - > settings - > changed = true ;
2020-09-23 12:15:51 +00:00
Header * header = this - > scr - > header ;
Header_calculateHeight ( header ) ;
Header_reinit ( header ) ;
2021-02-08 15:38:49 +00:00
Header_updateData ( header ) ;
2006-03-04 18:16:49 +00:00
Header_draw ( header ) ;
2021-08-21 18:42:04 +00:00
ScreenManager_resize ( this - > scr ) ;
2006-03-04 18:16:49 +00:00
}
return result ;
}
2020-10-05 11:19:50 +00:00
const PanelClass DisplayOptionsPanel_class = {
2012-12-05 15:12:20 +00:00
. super = {
. extends = Class ( Panel ) ,
. delete = DisplayOptionsPanel_delete
} ,
. eventHandler = DisplayOptionsPanel_eventHandler
} ;
2008-03-09 08:58:38 +00:00
DisplayOptionsPanel * DisplayOptionsPanel_new ( Settings * settings , ScreenManager * scr ) {
2012-12-05 15:12:20 +00:00
DisplayOptionsPanel * this = AllocThis ( DisplayOptionsPanel ) ;
2008-03-09 08:58:38 +00:00
Panel * super = ( Panel * ) this ;
2015-03-23 18:26:56 +00:00
FunctionBar * fuBar = FunctionBar_new ( DisplayOptionsFunctions , NULL , NULL ) ;
2020-11-21 20:40:08 +00:00
Panel_init ( super , 1 , 1 , 1 , 1 , Class ( OptionItem ) , true , fuBar ) ;
2008-03-09 08:58:38 +00:00
this - > settings = settings ;
this - > scr = scr ;
Panel_setHeader ( super , " Display options " ) ;
2020-11-21 20:40:08 +00:00
Panel_add ( super , ( Object * ) CheckItem_newByRef ( " Tree view " , & ( settings - > treeView ) ) ) ;
2020-12-17 22:08:56 +00:00
Panel_add ( super , ( Object * ) CheckItem_newByRef ( " - Tree view is always sorted by PID (htop 2 behavior) " , & ( settings - > treeViewAlwaysByPID ) ) ) ;
2021-02-12 17:48:09 +00:00
Panel_add ( super , ( Object * ) CheckItem_newByRef ( " - Tree view is collapsed by default " , & ( settings - > allBranchesCollapsed ) ) ) ;
2020-11-21 20:40:08 +00:00
Panel_add ( super , ( Object * ) CheckItem_newByRef ( " Shadow other users' processes " , & ( settings - > shadowOtherUsers ) ) ) ;
Panel_add ( super , ( Object * ) CheckItem_newByRef ( " Hide kernel threads " , & ( settings - > hideKernelThreads ) ) ) ;
Panel_add ( super , ( Object * ) CheckItem_newByRef ( " Hide userland process threads " , & ( settings - > hideUserlandThreads ) ) ) ;
Panel_add ( super , ( Object * ) CheckItem_newByRef ( " Display threads in a different color " , & ( settings - > highlightThreads ) ) ) ;
Panel_add ( super , ( Object * ) CheckItem_newByRef ( " Show custom thread names " , & ( settings - > showThreadNames ) ) ) ;
Panel_add ( super , ( Object * ) CheckItem_newByRef ( " Show program path " , & ( settings - > showProgramPath ) ) ) ;
Panel_add ( super , ( Object * ) CheckItem_newByRef ( " Highlight program \" basename \" " , & ( settings - > highlightBaseName ) ) ) ;
2020-12-19 15:46:00 +00:00
Panel_add ( super , ( Object * ) CheckItem_newByRef ( " Highlight out-dated/removed programs " , & ( settings - > highlightDeletedExe ) ) ) ;
2020-11-21 20:40:08 +00:00
Panel_add ( super , ( Object * ) CheckItem_newByRef ( " Merge exe, comm and cmdline in Command " , & ( settings - > showMergedCommand ) ) ) ;
Panel_add ( super , ( Object * ) CheckItem_newByRef ( " - Try to find comm in cmdline (when Command is merged) " , & ( settings - > findCommInCmdline ) ) ) ;
Panel_add ( super , ( Object * ) CheckItem_newByRef ( " - Try to strip exe from cmdline (when Command is merged) " , & ( settings - > stripExeFromCmdline ) ) ) ;
Panel_add ( super , ( Object * ) CheckItem_newByRef ( " Highlight large numbers in memory counters " , & ( settings - > highlightMegabytes ) ) ) ;
Panel_add ( super , ( Object * ) CheckItem_newByRef ( " Leave a margin around header " , & ( settings - > headerMargin ) ) ) ;
Panel_add ( super , ( Object * ) CheckItem_newByRef ( " Detailed CPU time (System/IO-Wait/Hard-IRQ/Soft-IRQ/Steal/Guest) " , & ( settings - > detailedCPUTime ) ) ) ;
Panel_add ( super , ( Object * ) CheckItem_newByRef ( " Count CPUs from 1 instead of 0 " , & ( settings - > countCPUsFromOne ) ) ) ;
Panel_add ( super , ( Object * ) CheckItem_newByRef ( " Update process names on every refresh " , & ( settings - > updateProcessNames ) ) ) ;
Panel_add ( super , ( Object * ) CheckItem_newByRef ( " Add guest time in CPU meter percentage " , & ( settings - > accountGuestInCPUMeter ) ) ) ;
Panel_add ( super , ( Object * ) CheckItem_newByRef ( " Also show CPU percentage numerically " , & ( settings - > showCPUUsage ) ) ) ;
Panel_add ( super , ( Object * ) CheckItem_newByRef ( " Also show CPU frequency " , & ( settings - > showCPUFrequency ) ) ) ;
2020-12-22 19:02:01 +00:00
# ifdef BUILD_WITH_CPU_TEMP
Panel_add ( super , ( Object * ) CheckItem_newByRef (
2021-03-20 10:21:20 +00:00
# if defined(HTOP_LINUX)
2020-12-22 19:02:01 +00:00
" Also show CPU temperature (requires libsensors) " ,
# elif defined(HTOP_FREEBSD)
" Also show CPU temperature " ,
# else
# error Unknown temperature implementation!
# endif
& ( settings - > showCPUTemperature ) ) ) ;
2020-11-21 20:40:08 +00:00
Panel_add ( super , ( Object * ) CheckItem_newByRef ( " - Show temperature in degree Fahrenheit instead of Celsius " , & ( settings - > degreeFahrenheit ) ) ) ;
2020-09-10 17:56:33 +00:00
# endif
2021-07-14 19:07:43 +00:00
# ifdef HAVE_GETMOUSE
2020-11-21 20:40:08 +00:00
Panel_add ( super , ( Object * ) CheckItem_newByRef ( " Enable the mouse " , & ( settings - > enableMouse ) ) ) ;
2021-07-14 19:07:43 +00:00
# endif
2020-11-21 20:40:08 +00:00
Panel_add ( super , ( Object * ) NumberItem_newByRef ( " Update interval (in seconds) " , & ( settings - > delay ) , - 1 , 1 , 255 ) ) ;
Panel_add ( super , ( Object * ) CheckItem_newByRef ( " Highlight new and old processes " , & ( settings - > highlightChanges ) ) ) ;
2021-07-14 17:18:27 +00:00
Panel_add ( super , ( Object * ) NumberItem_newByRef ( " - Highlight time (in seconds) " , & ( settings - > highlightDelaySecs ) , 0 , 1 , 24 * 60 * 60 ) ) ;
2021-01-11 12:50:34 +00:00
Panel_add ( super , ( Object * ) NumberItem_newByRef ( " Hide main function bar (0 - off, 1 - on ESC until next input, 2 - permanently) " , & ( settings - > hideFunctionBar ) , 0 , 0 , 2 ) ) ;
2020-08-26 00:15:00 +00:00
# ifdef HAVE_LIBHWLOC
2020-11-21 20:40:08 +00:00
Panel_add ( super , ( Object * ) CheckItem_newByRef ( " Show topology when selecting affinity by default " , & ( settings - > topologyAffinity ) ) ) ;
2020-08-26 00:15:00 +00:00
# endif
2008-03-09 08:58:38 +00:00
return this ;
}