mirror of https://github.com/xzeldon/htop.git
Add support to change numeric options in settings screen
Like delay or highlightDelaySecs
This commit is contained in:
parent
adf9185209
commit
267014cbfe
12
CRT.c
12
CRT.c
|
@ -72,7 +72,7 @@ bool CRT_utf8 = false;
|
||||||
|
|
||||||
const char* const* CRT_treeStr = CRT_treeStrAscii;
|
const char* const* CRT_treeStr = CRT_treeStrAscii;
|
||||||
|
|
||||||
int CRT_delay;
|
static const int* CRT_delay;
|
||||||
|
|
||||||
const char* CRT_degreeSign;
|
const char* CRT_degreeSign;
|
||||||
|
|
||||||
|
@ -654,10 +654,10 @@ static struct sigaction old_sig_handler[32];
|
||||||
|
|
||||||
// TODO: pass an instance of Settings instead.
|
// TODO: pass an instance of Settings instead.
|
||||||
|
|
||||||
void CRT_init(int delay, int colorScheme, bool allowUnicode) {
|
void CRT_init(const int* delay, int colorScheme, bool allowUnicode) {
|
||||||
initscr();
|
initscr();
|
||||||
noecho();
|
noecho();
|
||||||
CRT_delay = CLAMP(delay, 1, 255);
|
CRT_delay = delay;
|
||||||
CRT_colors = CRT_colorSchemes[colorScheme];
|
CRT_colors = CRT_colorSchemes[colorScheme];
|
||||||
CRT_colorScheme = colorScheme;
|
CRT_colorScheme = colorScheme;
|
||||||
|
|
||||||
|
@ -666,7 +666,7 @@ void CRT_init(int delay, int colorScheme, bool allowUnicode) {
|
||||||
CRT_colorSchemes[COLORSCHEME_BROKENGRAY][i] = color == (A_BOLD | ColorPairGrayBlack) ? ColorPair(White, Black) : color;
|
CRT_colorSchemes[COLORSCHEME_BROKENGRAY][i] = color == (A_BOLD | ColorPairGrayBlack) ? ColorPair(White, Black) : color;
|
||||||
}
|
}
|
||||||
|
|
||||||
halfdelay(CRT_delay);
|
halfdelay(*CRT_delay);
|
||||||
nonl();
|
nonl();
|
||||||
intrflush(stdscr, false);
|
intrflush(stdscr, false);
|
||||||
keypad(stdscr, true);
|
keypad(stdscr, true);
|
||||||
|
@ -774,7 +774,7 @@ int CRT_readKey() {
|
||||||
cbreak();
|
cbreak();
|
||||||
nodelay(stdscr, FALSE);
|
nodelay(stdscr, FALSE);
|
||||||
int ret = getch();
|
int ret = getch();
|
||||||
halfdelay(CRT_delay);
|
halfdelay(*CRT_delay);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -785,7 +785,7 @@ void CRT_disableDelay() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void CRT_enableDelay() {
|
void CRT_enableDelay() {
|
||||||
halfdelay(CRT_delay);
|
halfdelay(*CRT_delay);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CRT_setColors(int colorScheme) {
|
void CRT_setColors(int colorScheme) {
|
||||||
|
|
4
CRT.h
4
CRT.h
|
@ -142,8 +142,6 @@ extern bool CRT_utf8;
|
||||||
|
|
||||||
extern const char* const* CRT_treeStr;
|
extern const char* const* CRT_treeStr;
|
||||||
|
|
||||||
extern int CRT_delay;
|
|
||||||
|
|
||||||
extern const int* CRT_colors;
|
extern const int* CRT_colors;
|
||||||
|
|
||||||
extern int CRT_colorSchemes[LAST_COLORSCHEME][LAST_COLORELEMENT];
|
extern int CRT_colorSchemes[LAST_COLORSCHEME][LAST_COLORELEMENT];
|
||||||
|
@ -175,7 +173,7 @@ static inline void CRT_restorePrivileges(void) { }
|
||||||
|
|
||||||
#endif /* HAVE_SETUID_ENABLED */
|
#endif /* HAVE_SETUID_ENABLED */
|
||||||
|
|
||||||
void CRT_init(int delay, int colorScheme, bool allowUnicode);
|
void CRT_init(const int* delay, int colorScheme, bool allowUnicode);
|
||||||
|
|
||||||
void CRT_done(void);
|
void CRT_done(void);
|
||||||
|
|
||||||
|
|
73
CheckItem.c
73
CheckItem.c
|
@ -1,73 +0,0 @@
|
||||||
/*
|
|
||||||
htop - CheckItem.c
|
|
||||||
(C) 2004-2011 Hisham H. Muhammad
|
|
||||||
Released under the GNU GPLv2, see the COPYING file
|
|
||||||
in the source distribution for its full text.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "CheckItem.h"
|
|
||||||
|
|
||||||
#include <assert.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
#include "CRT.h"
|
|
||||||
#include "RichString.h"
|
|
||||||
|
|
||||||
|
|
||||||
static void CheckItem_delete(Object* cast) {
|
|
||||||
CheckItem* this = (CheckItem*)cast;
|
|
||||||
assert (this != NULL);
|
|
||||||
|
|
||||||
free(this->text);
|
|
||||||
free(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void CheckItem_display(const Object* cast, RichString* out) {
|
|
||||||
const CheckItem* this = (const CheckItem*)cast;
|
|
||||||
assert (this != NULL);
|
|
||||||
RichString_write(out, CRT_colors[CHECK_BOX], "[");
|
|
||||||
if (CheckItem_get(this)) {
|
|
||||||
RichString_append(out, CRT_colors[CHECK_MARK], "x");
|
|
||||||
} else {
|
|
||||||
RichString_append(out, CRT_colors[CHECK_MARK], " ");
|
|
||||||
}
|
|
||||||
RichString_append(out, CRT_colors[CHECK_BOX], "] ");
|
|
||||||
RichString_append(out, CRT_colors[CHECK_TEXT], this->text);
|
|
||||||
}
|
|
||||||
|
|
||||||
const ObjectClass CheckItem_class = {
|
|
||||||
.display = CheckItem_display,
|
|
||||||
.delete = CheckItem_delete
|
|
||||||
};
|
|
||||||
|
|
||||||
CheckItem* CheckItem_newByRef(char* text, bool* ref) {
|
|
||||||
CheckItem* this = AllocThis(CheckItem);
|
|
||||||
this->text = text;
|
|
||||||
this->value = false;
|
|
||||||
this->ref = ref;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
CheckItem* CheckItem_newByVal(char* text, bool value) {
|
|
||||||
CheckItem* this = AllocThis(CheckItem);
|
|
||||||
this->text = text;
|
|
||||||
this->value = value;
|
|
||||||
this->ref = NULL;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CheckItem_set(CheckItem* this, bool value) {
|
|
||||||
if (this->ref) {
|
|
||||||
*(this->ref) = value;
|
|
||||||
} else {
|
|
||||||
this->value = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CheckItem_get(const CheckItem* this) {
|
|
||||||
if (this->ref) {
|
|
||||||
return *(this->ref);
|
|
||||||
} else {
|
|
||||||
return this->value;
|
|
||||||
}
|
|
||||||
}
|
|
31
CheckItem.h
31
CheckItem.h
|
@ -1,31 +0,0 @@
|
||||||
#ifndef HEADER_CheckItem
|
|
||||||
#define HEADER_CheckItem
|
|
||||||
/*
|
|
||||||
htop - CheckItem.h
|
|
||||||
(C) 2004-2011 Hisham H. Muhammad
|
|
||||||
Released under the GNU GPLv2, see the COPYING file
|
|
||||||
in the source distribution for its full text.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdbool.h>
|
|
||||||
|
|
||||||
#include "Object.h"
|
|
||||||
|
|
||||||
typedef struct CheckItem_ {
|
|
||||||
Object super;
|
|
||||||
char* text;
|
|
||||||
bool* ref;
|
|
||||||
bool value;
|
|
||||||
} CheckItem;
|
|
||||||
|
|
||||||
extern const ObjectClass CheckItem_class;
|
|
||||||
|
|
||||||
CheckItem* CheckItem_newByRef(char* text, bool* ref);
|
|
||||||
|
|
||||||
CheckItem* CheckItem_newByVal(char* text, bool value);
|
|
||||||
|
|
||||||
void CheckItem_set(CheckItem* this, bool value);
|
|
||||||
|
|
||||||
bool CheckItem_get(const CheckItem* this);
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -10,11 +10,11 @@ in the source distribution for its full text.
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
#include "CheckItem.h"
|
|
||||||
#include "CRT.h"
|
#include "CRT.h"
|
||||||
#include "FunctionBar.h"
|
#include "FunctionBar.h"
|
||||||
#include "Header.h"
|
#include "Header.h"
|
||||||
#include "Object.h"
|
#include "Object.h"
|
||||||
|
#include "OptionItem.h"
|
||||||
#include "ProvideCurses.h"
|
#include "ProvideCurses.h"
|
||||||
#include "RichString.h"
|
#include "RichString.h"
|
||||||
#include "Vector.h"
|
#include "Vector.h"
|
||||||
|
@ -103,7 +103,7 @@ ColorsPanel* ColorsPanel_new(Settings* settings, ScreenManager* scr) {
|
||||||
|
|
||||||
Panel_setHeader(super, "Colors");
|
Panel_setHeader(super, "Colors");
|
||||||
for (int i = 0; ColorSchemeNames[i] != NULL; i++) {
|
for (int i = 0; ColorSchemeNames[i] != NULL; i++) {
|
||||||
Panel_add(super, (Object*) CheckItem_newByVal(xStrdup(ColorSchemeNames[i]), false));
|
Panel_add(super, (Object*) CheckItem_newByVal(ColorSchemeNames[i], false));
|
||||||
}
|
}
|
||||||
CheckItem_set((CheckItem*)Panel_get(super, settings->colorScheme), true);
|
CheckItem_set((CheckItem*)Panel_get(super, settings->colorScheme), true);
|
||||||
return this;
|
return this;
|
||||||
|
|
|
@ -12,11 +12,11 @@ in the source distribution for its full text.
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
#include "CheckItem.h"
|
|
||||||
#include "CRT.h"
|
#include "CRT.h"
|
||||||
#include "FunctionBar.h"
|
#include "FunctionBar.h"
|
||||||
#include "Header.h"
|
#include "Header.h"
|
||||||
#include "Object.h"
|
#include "Object.h"
|
||||||
|
#include "OptionItem.h"
|
||||||
#include "ProvideCurses.h"
|
#include "ProvideCurses.h"
|
||||||
#include "XUtils.h"
|
#include "XUtils.h"
|
||||||
|
|
||||||
|
@ -34,17 +34,38 @@ static HandlerResult DisplayOptionsPanel_eventHandler(Panel* super, int ch) {
|
||||||
DisplayOptionsPanel* this = (DisplayOptionsPanel*) super;
|
DisplayOptionsPanel* this = (DisplayOptionsPanel*) super;
|
||||||
|
|
||||||
HandlerResult result = IGNORED;
|
HandlerResult result = IGNORED;
|
||||||
CheckItem* selected = (CheckItem*) Panel_getSelected(super);
|
OptionItem* selected = (OptionItem*) Panel_getSelected(super);
|
||||||
|
|
||||||
switch (ch) {
|
switch (ch) {
|
||||||
case 0x0a:
|
case '\n':
|
||||||
case 0x0d:
|
case '\r':
|
||||||
case KEY_ENTER:
|
case KEY_ENTER:
|
||||||
case KEY_MOUSE:
|
case KEY_MOUSE:
|
||||||
case KEY_RECLICK:
|
case KEY_RECLICK:
|
||||||
case ' ':
|
case ' ':
|
||||||
CheckItem_set(selected, !CheckItem_get(selected));
|
switch (OptionItem_kind(selected)) {
|
||||||
|
case OPTION_ITEM_CHECK:
|
||||||
|
CheckItem_toggle((CheckItem*)selected);
|
||||||
result = HANDLED;
|
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (result == HANDLED) {
|
if (result == HANDLED) {
|
||||||
|
@ -70,39 +91,41 @@ DisplayOptionsPanel* DisplayOptionsPanel_new(Settings* settings, ScreenManager*
|
||||||
DisplayOptionsPanel* this = AllocThis(DisplayOptionsPanel);
|
DisplayOptionsPanel* this = AllocThis(DisplayOptionsPanel);
|
||||||
Panel* super = (Panel*) this;
|
Panel* super = (Panel*) this;
|
||||||
FunctionBar* fuBar = FunctionBar_new(DisplayOptionsFunctions, NULL, NULL);
|
FunctionBar* fuBar = FunctionBar_new(DisplayOptionsFunctions, NULL, NULL);
|
||||||
Panel_init(super, 1, 1, 1, 1, Class(CheckItem), true, fuBar);
|
Panel_init(super, 1, 1, 1, 1, Class(OptionItem), true, fuBar);
|
||||||
|
|
||||||
this->settings = settings;
|
this->settings = settings;
|
||||||
this->scr = scr;
|
this->scr = scr;
|
||||||
|
|
||||||
Panel_setHeader(super, "Display options");
|
Panel_setHeader(super, "Display options");
|
||||||
Panel_add(super, (Object*) CheckItem_newByRef(xStrdup("Tree view"), &(settings->treeView)));
|
Panel_add(super, (Object*) CheckItem_newByRef("Tree view", &(settings->treeView)));
|
||||||
Panel_add(super, (Object*) CheckItem_newByRef(xStrdup("Shadow other users' processes"), &(settings->shadowOtherUsers)));
|
Panel_add(super, (Object*) CheckItem_newByRef("Shadow other users' processes", &(settings->shadowOtherUsers)));
|
||||||
Panel_add(super, (Object*) CheckItem_newByRef(xStrdup("Hide kernel threads"), &(settings->hideKernelThreads)));
|
Panel_add(super, (Object*) CheckItem_newByRef("Hide kernel threads", &(settings->hideKernelThreads)));
|
||||||
Panel_add(super, (Object*) CheckItem_newByRef(xStrdup("Hide userland process threads"), &(settings->hideUserlandThreads)));
|
Panel_add(super, (Object*) CheckItem_newByRef("Hide userland process threads", &(settings->hideUserlandThreads)));
|
||||||
Panel_add(super, (Object*) CheckItem_newByRef(xStrdup("Display threads in a different color"), &(settings->highlightThreads)));
|
Panel_add(super, (Object*) CheckItem_newByRef("Display threads in a different color", &(settings->highlightThreads)));
|
||||||
Panel_add(super, (Object*) CheckItem_newByRef(xStrdup("Show custom thread names"), &(settings->showThreadNames)));
|
Panel_add(super, (Object*) CheckItem_newByRef("Show custom thread names", &(settings->showThreadNames)));
|
||||||
Panel_add(super, (Object*) CheckItem_newByRef(xStrdup("Show program path"), &(settings->showProgramPath)));
|
Panel_add(super, (Object*) CheckItem_newByRef("Show program path", &(settings->showProgramPath)));
|
||||||
Panel_add(super, (Object*) CheckItem_newByRef(xStrdup("Highlight program \"basename\""), &(settings->highlightBaseName)));
|
Panel_add(super, (Object*) CheckItem_newByRef("Highlight program \"basename\"", &(settings->highlightBaseName)));
|
||||||
Panel_add(super, (Object*) CheckItem_newByRef(xStrdup("Merge exe, comm and cmdline in Command"), &(settings->showMergedCommand)));
|
Panel_add(super, (Object*) CheckItem_newByRef("Merge exe, comm and cmdline in Command", &(settings->showMergedCommand)));
|
||||||
Panel_add(super, (Object*) CheckItem_newByRef(xStrdup("- Try to find comm in cmdline (when Command is merged)"), &(settings->findCommInCmdline)));
|
Panel_add(super, (Object*) CheckItem_newByRef("- Try to find comm in cmdline (when Command is merged)", &(settings->findCommInCmdline)));
|
||||||
Panel_add(super, (Object*) CheckItem_newByRef(xStrdup("- Try to strip exe from cmdline (when Command is merged)"), &(settings->stripExeFromCmdline)));
|
Panel_add(super, (Object*) CheckItem_newByRef("- Try to strip exe from cmdline (when Command is merged)", &(settings->stripExeFromCmdline)));
|
||||||
Panel_add(super, (Object*) CheckItem_newByRef(xStrdup("Highlight large numbers in memory counters"), &(settings->highlightMegabytes)));
|
Panel_add(super, (Object*) CheckItem_newByRef("Highlight large numbers in memory counters", &(settings->highlightMegabytes)));
|
||||||
Panel_add(super, (Object*) CheckItem_newByRef(xStrdup("Leave a margin around header"), &(settings->headerMargin)));
|
Panel_add(super, (Object*) CheckItem_newByRef("Leave a margin around header", &(settings->headerMargin)));
|
||||||
Panel_add(super, (Object*) CheckItem_newByRef(xStrdup("Detailed CPU time (System/IO-Wait/Hard-IRQ/Soft-IRQ/Steal/Guest)"), &(settings->detailedCPUTime)));
|
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(xStrdup("Count CPUs from 1 instead of 0"), &(settings->countCPUsFromOne)));
|
Panel_add(super, (Object*) CheckItem_newByRef("Count CPUs from 1 instead of 0", &(settings->countCPUsFromOne)));
|
||||||
Panel_add(super, (Object*) CheckItem_newByRef(xStrdup("Update process names on every refresh"), &(settings->updateProcessNames)));
|
Panel_add(super, (Object*) CheckItem_newByRef("Update process names on every refresh", &(settings->updateProcessNames)));
|
||||||
Panel_add(super, (Object*) CheckItem_newByRef(xStrdup("Add guest time in CPU meter percentage"), &(settings->accountGuestInCPUMeter)));
|
Panel_add(super, (Object*) CheckItem_newByRef("Add guest time in CPU meter percentage", &(settings->accountGuestInCPUMeter)));
|
||||||
Panel_add(super, (Object*) CheckItem_newByRef(xStrdup("Also show CPU percentage numerically"), &(settings->showCPUUsage)));
|
Panel_add(super, (Object*) CheckItem_newByRef("Also show CPU percentage numerically", &(settings->showCPUUsage)));
|
||||||
Panel_add(super, (Object*) CheckItem_newByRef(xStrdup("Also show CPU frequency"), &(settings->showCPUFrequency)));
|
Panel_add(super, (Object*) CheckItem_newByRef("Also show CPU frequency", &(settings->showCPUFrequency)));
|
||||||
#ifdef HAVE_LIBSENSORS
|
#ifdef HAVE_LIBSENSORS
|
||||||
Panel_add(super, (Object*) CheckItem_newByRef(xStrdup("Also show CPU temperature"), &(settings->showCPUTemperature)));
|
Panel_add(super, (Object*) CheckItem_newByRef("Also show CPU temperature", &(settings->showCPUTemperature)));
|
||||||
Panel_add(super, (Object*) CheckItem_newByRef(xStrdup("- Show temperature in degree Fahrenheit instead of Celsius"), &(settings->degreeFahrenheit)));
|
Panel_add(super, (Object*) CheckItem_newByRef("- Show temperature in degree Fahrenheit instead of Celsius", &(settings->degreeFahrenheit)));
|
||||||
#endif
|
#endif
|
||||||
Panel_add(super, (Object*) CheckItem_newByRef(xStrdup("Enable the mouse"), &(settings->enableMouse)));
|
Panel_add(super, (Object*) CheckItem_newByRef("Enable the mouse", &(settings->enableMouse)));
|
||||||
Panel_add(super, (Object*) CheckItem_newByRef(xStrdup("Highlight new and old processes"), &(settings->highlightChanges)));
|
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)));
|
||||||
|
Panel_add(super, (Object*) NumberItem_newByRef("- Highlight time (in seconds)", &(settings->highlightDelaySecs), 0, 1, 24*60*60));
|
||||||
#ifdef HAVE_LIBHWLOC
|
#ifdef HAVE_LIBHWLOC
|
||||||
Panel_add(super, (Object*) CheckItem_newByRef(xStrdup("Show topology when selecting affinity by default"), &(settings->topologyAffinity)));
|
Panel_add(super, (Object*) CheckItem_newByRef("Show topology when selecting affinity by default", &(settings->topologyAffinity)));
|
||||||
#endif
|
#endif
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,7 +21,6 @@ myhtopsources = \
|
||||||
AvailableMetersPanel.c \
|
AvailableMetersPanel.c \
|
||||||
BatteryMeter.c \
|
BatteryMeter.c \
|
||||||
CategoriesPanel.c \
|
CategoriesPanel.c \
|
||||||
CheckItem.c \
|
|
||||||
ClockMeter.c \
|
ClockMeter.c \
|
||||||
ColorsPanel.c \
|
ColorsPanel.c \
|
||||||
ColumnsPanel.c \
|
ColumnsPanel.c \
|
||||||
|
@ -50,6 +49,7 @@ myhtopsources = \
|
||||||
NetworkIOMeter.c \
|
NetworkIOMeter.c \
|
||||||
Object.c \
|
Object.c \
|
||||||
OpenFilesScreen.c \
|
OpenFilesScreen.c \
|
||||||
|
OptionItem.c \
|
||||||
Panel.c \
|
Panel.c \
|
||||||
Process.c \
|
Process.c \
|
||||||
ProcessList.c \
|
ProcessList.c \
|
||||||
|
@ -76,7 +76,6 @@ myhtopheaders = \
|
||||||
CPUMeter.h \
|
CPUMeter.h \
|
||||||
CRT.h \
|
CRT.h \
|
||||||
CategoriesPanel.h \
|
CategoriesPanel.h \
|
||||||
CheckItem.h \
|
|
||||||
ClockMeter.h \
|
ClockMeter.h \
|
||||||
ColorsPanel.h \
|
ColorsPanel.h \
|
||||||
ColumnsPanel.h \
|
ColumnsPanel.h \
|
||||||
|
@ -103,6 +102,7 @@ myhtopheaders = \
|
||||||
NetworkIOMeter.h \
|
NetworkIOMeter.h \
|
||||||
Object.h \
|
Object.h \
|
||||||
OpenFilesScreen.h \
|
OpenFilesScreen.h \
|
||||||
|
OptionItem.h \
|
||||||
Panel.h \
|
Panel.h \
|
||||||
Process.h \
|
Process.h \
|
||||||
ProcessList.h \
|
ProcessList.h \
|
||||||
|
|
3
Meter.c
3
Meter.c
|
@ -305,7 +305,8 @@ static void GraphMeterMode_draw(Meter* this, int x, int y, int w) {
|
||||||
struct timeval now;
|
struct timeval now;
|
||||||
gettimeofday(&now, NULL);
|
gettimeofday(&now, NULL);
|
||||||
if (!timercmp(&now, &(data->time), <)) {
|
if (!timercmp(&now, &(data->time), <)) {
|
||||||
struct timeval delay = { .tv_sec = CRT_delay / 10, .tv_usec = (CRT_delay - ((CRT_delay / 10) * 10)) * 100000 };
|
int globalDelay = this->pl->settings->delay;
|
||||||
|
struct timeval delay = { .tv_sec = globalDelay / 10, .tv_usec = (globalDelay - ((globalDelay / 10) * 10)) * 100000 };
|
||||||
timeradd(&now, &delay, &(data->time));
|
timeradd(&now, &delay, &(data->time));
|
||||||
|
|
||||||
for (int i = 0; i < nValues - 1; i++)
|
for (int i = 0; i < nValues - 1; i++)
|
||||||
|
|
|
@ -0,0 +1,189 @@
|
||||||
|
/*
|
||||||
|
htop - OptionItem.c
|
||||||
|
(C) 2004-2011 Hisham H. Muhammad
|
||||||
|
Released under the GNU GPLv2, see the COPYING file
|
||||||
|
in the source distribution for its full text.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "OptionItem.h"
|
||||||
|
|
||||||
|
#include <assert.h>
|
||||||
|
#include <math.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#include "CRT.h"
|
||||||
|
#include "RichString.h"
|
||||||
|
|
||||||
|
|
||||||
|
static void OptionItem_delete(Object* cast) {
|
||||||
|
OptionItem* this = (OptionItem*)cast;
|
||||||
|
assert (this != NULL);
|
||||||
|
|
||||||
|
free(this->text);
|
||||||
|
free(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void CheckItem_display(const Object* cast, RichString* out) {
|
||||||
|
const CheckItem* this = (const CheckItem*)cast;
|
||||||
|
assert (this != NULL);
|
||||||
|
|
||||||
|
RichString_write(out, CRT_colors[CHECK_BOX], "[");
|
||||||
|
if (CheckItem_get(this)) {
|
||||||
|
RichString_append(out, CRT_colors[CHECK_MARK], "x");
|
||||||
|
} else {
|
||||||
|
RichString_append(out, CRT_colors[CHECK_MARK], " ");
|
||||||
|
}
|
||||||
|
RichString_append(out, CRT_colors[CHECK_BOX], "] ");
|
||||||
|
RichString_append(out, CRT_colors[CHECK_TEXT], this->super.text);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void NumberItem_display(const Object* cast, RichString* out) {
|
||||||
|
const NumberItem* this = (const NumberItem*)cast;
|
||||||
|
assert (this != NULL);
|
||||||
|
|
||||||
|
char buffer[12];
|
||||||
|
RichString_write(out, CRT_colors[CHECK_BOX], "[");
|
||||||
|
int written;
|
||||||
|
if (this->scale < 0) {
|
||||||
|
written = xSnprintf(buffer, sizeof(buffer), "%.*f", -this->scale, pow(10, this->scale) * NumberItem_get(this));
|
||||||
|
} else if (this->scale > 0) {
|
||||||
|
written = xSnprintf(buffer, sizeof(buffer), "%d", (int) (pow(10, this->scale) * NumberItem_get(this)));
|
||||||
|
} else {
|
||||||
|
written = xSnprintf(buffer, sizeof(buffer), "%d", NumberItem_get(this));
|
||||||
|
}
|
||||||
|
RichString_append(out, CRT_colors[CHECK_MARK], buffer);
|
||||||
|
RichString_append(out, CRT_colors[CHECK_BOX], "]");
|
||||||
|
for (int i = written; i < 5; i++) {
|
||||||
|
RichString_append(out, CRT_colors[CHECK_BOX], " ");
|
||||||
|
}
|
||||||
|
RichString_append(out, CRT_colors[CHECK_TEXT], this->super.text);
|
||||||
|
}
|
||||||
|
|
||||||
|
const OptionItemClass OptionItem_class = {
|
||||||
|
.super = {
|
||||||
|
.extends = Class(Object),
|
||||||
|
.delete = OptionItem_delete
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const OptionItemClass CheckItem_class = {
|
||||||
|
.super = {
|
||||||
|
.extends = Class(OptionItem),
|
||||||
|
.delete = OptionItem_delete,
|
||||||
|
.display = CheckItem_display
|
||||||
|
},
|
||||||
|
.kind = OPTION_ITEM_CHECK
|
||||||
|
};
|
||||||
|
|
||||||
|
const OptionItemClass NumberItem_class = {
|
||||||
|
.super = {
|
||||||
|
.extends = Class(OptionItem),
|
||||||
|
.delete = OptionItem_delete,
|
||||||
|
.display = NumberItem_display
|
||||||
|
},
|
||||||
|
.kind = OPTION_ITEM_NUMBER
|
||||||
|
};
|
||||||
|
|
||||||
|
CheckItem* CheckItem_newByRef(const char* text, bool* ref) {
|
||||||
|
CheckItem* this = AllocThis(CheckItem);
|
||||||
|
this->super.text = xStrdup(text);
|
||||||
|
this->value = false;
|
||||||
|
this->ref = ref;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
CheckItem* CheckItem_newByVal(const char* text, bool value) {
|
||||||
|
CheckItem* this = AllocThis(CheckItem);
|
||||||
|
this->super.text = xStrdup(text);
|
||||||
|
this->value = value;
|
||||||
|
this->ref = NULL;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CheckItem_get(const CheckItem* this) {
|
||||||
|
if (this->ref) {
|
||||||
|
return *(this->ref);
|
||||||
|
} else {
|
||||||
|
return this->value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CheckItem_set(CheckItem* this, bool value) {
|
||||||
|
if (this->ref) {
|
||||||
|
*(this->ref) = value;
|
||||||
|
} else {
|
||||||
|
this->value = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CheckItem_toggle(CheckItem* this) {
|
||||||
|
if (this->ref) {
|
||||||
|
*(this->ref) = !*(this->ref);
|
||||||
|
} else {
|
||||||
|
this->value = !this->value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
NumberItem* NumberItem_newByRef(const char* text, int* ref, int scale, int min, int max) {
|
||||||
|
assert(min <= max);
|
||||||
|
|
||||||
|
NumberItem* this = AllocThis(NumberItem);
|
||||||
|
this->super.text = xStrdup(text);
|
||||||
|
this->value = 0;
|
||||||
|
this->ref = ref;
|
||||||
|
this->scale = scale;
|
||||||
|
this->min = min;
|
||||||
|
this->max = max;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
NumberItem* NumberItem_newByVal(const char* text, int value, int scale, int min, int max) {
|
||||||
|
assert(min <= max);
|
||||||
|
|
||||||
|
NumberItem* this = AllocThis(NumberItem);
|
||||||
|
this->super.text = xStrdup(text);
|
||||||
|
this->value = CLAMP(value, min, max);
|
||||||
|
this->ref = NULL;
|
||||||
|
this->scale = scale;
|
||||||
|
this->min = min;
|
||||||
|
this->max = max;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
int NumberItem_get(const NumberItem* this) {
|
||||||
|
if (this->ref) {
|
||||||
|
return *(this->ref);
|
||||||
|
} else {
|
||||||
|
return this->value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void NumberItem_decrease(NumberItem* this) {
|
||||||
|
if (this->ref) {
|
||||||
|
*(this->ref) = CLAMP(*(this->ref) - 1, this->min, this->max);
|
||||||
|
} else {
|
||||||
|
this->value = CLAMP(this->value - 1, this->min, this->max);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void NumberItem_increase(NumberItem* this) {
|
||||||
|
if (this->ref) {
|
||||||
|
*(this->ref) = CLAMP(*(this->ref) + 1, this->min, this->max);
|
||||||
|
} else {
|
||||||
|
this->value = CLAMP(this->value + 1, this->min, this->max);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void NumberItem_toggle(NumberItem* this) {
|
||||||
|
if (this->ref) {
|
||||||
|
if (*(this->ref) >= this->max)
|
||||||
|
*(this->ref) = this->min;
|
||||||
|
else
|
||||||
|
*(this->ref) += 1;
|
||||||
|
} else {
|
||||||
|
if (this->value >= this->max)
|
||||||
|
this->value = this->min;
|
||||||
|
else
|
||||||
|
this->value += 1;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,70 @@
|
||||||
|
#ifndef HEADER_OptionItem
|
||||||
|
#define HEADER_OptionItem
|
||||||
|
/*
|
||||||
|
htop - OptionItem.h
|
||||||
|
(C) 2004-2011 Hisham H. Muhammad
|
||||||
|
Released under the GNU GPLv2, see the COPYING file
|
||||||
|
in the source distribution for its full text.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdbool.h>
|
||||||
|
|
||||||
|
#include "Object.h"
|
||||||
|
|
||||||
|
|
||||||
|
enum OptionItemType {
|
||||||
|
OPTION_ITEM_CHECK,
|
||||||
|
OPTION_ITEM_NUMBER,
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct OptionItemClass_ {
|
||||||
|
const ObjectClass super;
|
||||||
|
|
||||||
|
enum OptionItemType kind;
|
||||||
|
} OptionItemClass;
|
||||||
|
|
||||||
|
#define As_OptionItem(this_) ((const OptionItemClass*)((this_)->super.klass))
|
||||||
|
#define OptionItem_kind(this_) As_OptionItem(this_)->kind
|
||||||
|
|
||||||
|
typedef struct OptionItem_ {
|
||||||
|
Object super;
|
||||||
|
|
||||||
|
char* text;
|
||||||
|
} OptionItem;
|
||||||
|
|
||||||
|
typedef struct CheckItem_ {
|
||||||
|
OptionItem super;
|
||||||
|
|
||||||
|
bool* ref;
|
||||||
|
bool value;
|
||||||
|
} CheckItem;
|
||||||
|
|
||||||
|
typedef struct NumberItem_ {
|
||||||
|
OptionItem super;
|
||||||
|
|
||||||
|
char* text;
|
||||||
|
int* ref;
|
||||||
|
int value;
|
||||||
|
int scale;
|
||||||
|
int min;
|
||||||
|
int max;
|
||||||
|
} NumberItem;
|
||||||
|
|
||||||
|
extern const OptionItemClass OptionItem_class;
|
||||||
|
extern const OptionItemClass CheckItem_class;
|
||||||
|
extern const OptionItemClass NumberItem_class;
|
||||||
|
|
||||||
|
CheckItem* CheckItem_newByRef(const char* text, bool* ref);
|
||||||
|
CheckItem* CheckItem_newByVal(const char* text, bool value);
|
||||||
|
bool CheckItem_get(const CheckItem* this);
|
||||||
|
void CheckItem_set(CheckItem* this, bool value);
|
||||||
|
void CheckItem_toggle(CheckItem* this);
|
||||||
|
|
||||||
|
NumberItem* NumberItem_newByRef(const char* text, int* ref, int scale, int min, int max);
|
||||||
|
NumberItem* NumberItem_newByVal(const char* text, int value, int scale, int min, int max);
|
||||||
|
int NumberItem_get(const NumberItem* this);
|
||||||
|
void NumberItem_decrease(NumberItem* this);
|
||||||
|
void NumberItem_increase(NumberItem* this);
|
||||||
|
void NumberItem_toggle(NumberItem* this);
|
||||||
|
|
||||||
|
#endif
|
|
@ -160,7 +160,7 @@ static bool Settings_read(Settings* this, const char* fileName, int initialCpuCo
|
||||||
} else if (String_eq(option[0], "highlight_changes")) {
|
} else if (String_eq(option[0], "highlight_changes")) {
|
||||||
this->highlightChanges = atoi(option[1]);
|
this->highlightChanges = atoi(option[1]);
|
||||||
} else if (String_eq(option[0], "highlight_changes_delay_secs")) {
|
} else if (String_eq(option[0], "highlight_changes_delay_secs")) {
|
||||||
this->highlightDelaySecs = atoi(option[1]);
|
this->highlightDelaySecs = CLAMP(atoi(option[1]), 1, 24*60*60);
|
||||||
} else if (String_eq(option[0], "find_comm_in_cmdline")) {
|
} else if (String_eq(option[0], "find_comm_in_cmdline")) {
|
||||||
this->findCommInCmdline = atoi(option[1]);
|
this->findCommInCmdline = atoi(option[1]);
|
||||||
} else if (String_eq(option[0], "strip_exe_from_cmdline")) {
|
} else if (String_eq(option[0], "strip_exe_from_cmdline")) {
|
||||||
|
@ -194,7 +194,7 @@ static bool Settings_read(Settings* this, const char* fileName, int initialCpuCo
|
||||||
} else if (String_eq(option[0], "account_guest_in_cpu_meter")) {
|
} else if (String_eq(option[0], "account_guest_in_cpu_meter")) {
|
||||||
this->accountGuestInCPUMeter = atoi(option[1]);
|
this->accountGuestInCPUMeter = atoi(option[1]);
|
||||||
} else if (String_eq(option[0], "delay")) {
|
} else if (String_eq(option[0], "delay")) {
|
||||||
this->delay = atoi(option[1]);
|
this->delay = CLAMP(atoi(option[1]), 1, 255);
|
||||||
} else if (String_eq(option[0], "color_scheme")) {
|
} else if (String_eq(option[0], "color_scheme")) {
|
||||||
this->colorScheme = atoi(option[1]);
|
this->colorScheme = atoi(option[1]);
|
||||||
if (this->colorScheme < 0 || this->colorScheme >= LAST_COLORSCHEME) {
|
if (this->colorScheme < 0 || this->colorScheme >= LAST_COLORSCHEME) {
|
||||||
|
|
2
htop.c
2
htop.c
|
@ -304,7 +304,7 @@ int main(int argc, char** argv) {
|
||||||
settings->direction = 1;
|
settings->direction = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
CRT_init(settings->delay, settings->colorScheme, flags.allowUnicode);
|
CRT_init(&(settings->delay), settings->colorScheme, flags.allowUnicode);
|
||||||
|
|
||||||
MainPanel* panel = MainPanel_new();
|
MainPanel* panel = MainPanel_new();
|
||||||
ProcessList_setPanel(pl, (Panel*) panel);
|
ProcessList_setPanel(pl, (Panel*) panel);
|
||||||
|
|
Loading…
Reference in New Issue