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;
|
||||
|
||||
int CRT_delay;
|
||||
static const int* CRT_delay;
|
||||
|
||||
const char* CRT_degreeSign;
|
||||
|
||||
|
@ -654,10 +654,10 @@ static struct sigaction old_sig_handler[32];
|
|||
|
||||
// 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();
|
||||
noecho();
|
||||
CRT_delay = CLAMP(delay, 1, 255);
|
||||
CRT_delay = delay;
|
||||
CRT_colors = CRT_colorSchemes[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;
|
||||
}
|
||||
|
||||
halfdelay(CRT_delay);
|
||||
halfdelay(*CRT_delay);
|
||||
nonl();
|
||||
intrflush(stdscr, false);
|
||||
keypad(stdscr, true);
|
||||
|
@ -774,7 +774,7 @@ int CRT_readKey() {
|
|||
cbreak();
|
||||
nodelay(stdscr, FALSE);
|
||||
int ret = getch();
|
||||
halfdelay(CRT_delay);
|
||||
halfdelay(*CRT_delay);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -785,7 +785,7 @@ void CRT_disableDelay() {
|
|||
}
|
||||
|
||||
void CRT_enableDelay() {
|
||||
halfdelay(CRT_delay);
|
||||
halfdelay(*CRT_delay);
|
||||
}
|
||||
|
||||
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 int CRT_delay;
|
||||
|
||||
extern const int* CRT_colors;
|
||||
|
||||
extern int CRT_colorSchemes[LAST_COLORSCHEME][LAST_COLORELEMENT];
|
||||
|
@ -175,7 +173,7 @@ static inline void CRT_restorePrivileges(void) { }
|
|||
|
||||
#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);
|
||||
|
||||
|
|
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 <stdlib.h>
|
||||
|
||||
#include "CheckItem.h"
|
||||
#include "CRT.h"
|
||||
#include "FunctionBar.h"
|
||||
#include "Header.h"
|
||||
#include "Object.h"
|
||||
#include "OptionItem.h"
|
||||
#include "ProvideCurses.h"
|
||||
#include "RichString.h"
|
||||
#include "Vector.h"
|
||||
|
@ -103,7 +103,7 @@ ColorsPanel* ColorsPanel_new(Settings* settings, ScreenManager* scr) {
|
|||
|
||||
Panel_setHeader(super, "Colors");
|
||||
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);
|
||||
return this;
|
||||
|
|
|
@ -12,11 +12,11 @@ in the source distribution for its full text.
|
|||
#include <stdbool.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "CheckItem.h"
|
||||
#include "CRT.h"
|
||||
#include "FunctionBar.h"
|
||||
#include "Header.h"
|
||||
#include "Object.h"
|
||||
#include "OptionItem.h"
|
||||
#include "ProvideCurses.h"
|
||||
#include "XUtils.h"
|
||||
|
||||
|
@ -34,17 +34,38 @@ static HandlerResult DisplayOptionsPanel_eventHandler(Panel* super, int ch) {
|
|||
DisplayOptionsPanel* this = (DisplayOptionsPanel*) super;
|
||||
|
||||
HandlerResult result = IGNORED;
|
||||
CheckItem* selected = (CheckItem*) Panel_getSelected(super);
|
||||
OptionItem* selected = (OptionItem*) Panel_getSelected(super);
|
||||
|
||||
switch(ch) {
|
||||
case 0x0a:
|
||||
case 0x0d:
|
||||
switch (ch) {
|
||||
case '\n':
|
||||
case '\r':
|
||||
case KEY_ENTER:
|
||||
case KEY_MOUSE:
|
||||
case KEY_RECLICK:
|
||||
case ' ':
|
||||
CheckItem_set(selected, !CheckItem_get(selected));
|
||||
result = HANDLED;
|
||||
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;
|
||||
}
|
||||
|
||||
if (result == HANDLED) {
|
||||
|
@ -70,39 +91,41 @@ DisplayOptionsPanel* DisplayOptionsPanel_new(Settings* settings, ScreenManager*
|
|||
DisplayOptionsPanel* this = AllocThis(DisplayOptionsPanel);
|
||||
Panel* super = (Panel*) this;
|
||||
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->scr = scr;
|
||||
|
||||
Panel_setHeader(super, "Display options");
|
||||
Panel_add(super, (Object*) CheckItem_newByRef(xStrdup("Tree view"), &(settings->treeView)));
|
||||
Panel_add(super, (Object*) CheckItem_newByRef(xStrdup("Shadow other users' processes"), &(settings->shadowOtherUsers)));
|
||||
Panel_add(super, (Object*) CheckItem_newByRef(xStrdup("Hide kernel threads"), &(settings->hideKernelThreads)));
|
||||
Panel_add(super, (Object*) CheckItem_newByRef(xStrdup("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(xStrdup("Show custom thread names"), &(settings->showThreadNames)));
|
||||
Panel_add(super, (Object*) CheckItem_newByRef(xStrdup("Show program path"), &(settings->showProgramPath)));
|
||||
Panel_add(super, (Object*) CheckItem_newByRef(xStrdup("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(xStrdup("- 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(xStrdup("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(xStrdup("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(xStrdup("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(xStrdup("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("Tree view", &(settings->treeView)));
|
||||
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)));
|
||||
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)));
|
||||
#ifdef HAVE_LIBSENSORS
|
||||
Panel_add(super, (Object*) CheckItem_newByRef(xStrdup("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("Also show CPU temperature", &(settings->showCPUTemperature)));
|
||||
Panel_add(super, (Object*) CheckItem_newByRef("- Show temperature in degree Fahrenheit instead of Celsius", &(settings->degreeFahrenheit)));
|
||||
#endif
|
||||
Panel_add(super, (Object*) CheckItem_newByRef(xStrdup("Enable the mouse"), &(settings->enableMouse)));
|
||||
Panel_add(super, (Object*) CheckItem_newByRef(xStrdup("Highlight new and old processes"), &(settings->highlightChanges)));
|
||||
Panel_add(super, (Object*) CheckItem_newByRef("Enable the mouse", &(settings->enableMouse)));
|
||||
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
|
||||
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
|
||||
return this;
|
||||
}
|
||||
|
|
|
@ -21,7 +21,6 @@ myhtopsources = \
|
|||
AvailableMetersPanel.c \
|
||||
BatteryMeter.c \
|
||||
CategoriesPanel.c \
|
||||
CheckItem.c \
|
||||
ClockMeter.c \
|
||||
ColorsPanel.c \
|
||||
ColumnsPanel.c \
|
||||
|
@ -50,6 +49,7 @@ myhtopsources = \
|
|||
NetworkIOMeter.c \
|
||||
Object.c \
|
||||
OpenFilesScreen.c \
|
||||
OptionItem.c \
|
||||
Panel.c \
|
||||
Process.c \
|
||||
ProcessList.c \
|
||||
|
@ -76,7 +76,6 @@ myhtopheaders = \
|
|||
CPUMeter.h \
|
||||
CRT.h \
|
||||
CategoriesPanel.h \
|
||||
CheckItem.h \
|
||||
ClockMeter.h \
|
||||
ColorsPanel.h \
|
||||
ColumnsPanel.h \
|
||||
|
@ -103,6 +102,7 @@ myhtopheaders = \
|
|||
NetworkIOMeter.h \
|
||||
Object.h \
|
||||
OpenFilesScreen.h \
|
||||
OptionItem.h \
|
||||
Panel.h \
|
||||
Process.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;
|
||||
gettimeofday(&now, NULL);
|
||||
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));
|
||||
|
||||
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")) {
|
||||
this->highlightChanges = atoi(option[1]);
|
||||
} 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")) {
|
||||
this->findCommInCmdline = atoi(option[1]);
|
||||
} 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")) {
|
||||
this->accountGuestInCPUMeter = atoi(option[1]);
|
||||
} 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")) {
|
||||
this->colorScheme = atoi(option[1]);
|
||||
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;
|
||||
}
|
||||
|
||||
CRT_init(settings->delay, settings->colorScheme, flags.allowUnicode);
|
||||
CRT_init(&(settings->delay), settings->colorScheme, flags.allowUnicode);
|
||||
|
||||
MainPanel* panel = MainPanel_new();
|
||||
ProcessList_setPanel(pl, (Panel*) panel);
|
||||
|
|
Loading…
Reference in New Issue