diff options
64 files changed, 662 insertions, 566 deletions
diff --git a/Affinity.h b/Affinity.h new file mode 100644 index 00000000..3a19ea49 --- /dev/null +++ b/Affinity.h @@ -0,0 +1,27 @@ +/* Do not edit this file. It was automatically generated. */ + +#ifndef HEADER_Affinity +#define HEADER_Affinity +/* +htop - Affinity.h +(C) 2004-2011 Hisham H. Muhammad +Released under the GNU GPL, see the COPYING file +in the source distribution for its full text. +*/ + + +typedef struct Affinity_ { + int size; + int used; + int* cpus; +} Affinity; + + +Affinity* Affinity_new(); + +void Affinity_delete(Affinity* this); + +void Affinity_add(Affinity* this, int id); + + +#endif diff --git a/AffinityPanel.c b/AffinityPanel.c index 8c406fb3..094a0104 100644 --- a/AffinityPanel.c +++ b/AffinityPanel.c @@ -34,9 +34,17 @@ static HandlerResult AffinityPanel_eventHandler(Panel* this, int ch) { return IGNORED; } +PanelClass AffinityPanel_class = { + .super = { + .extends = Class(Panel), + .delete = Panel_delete + }, + .eventHandler = AffinityPanel_eventHandler +}; + Panel* AffinityPanel_new(ProcessList* pl, Affinity* affinity) { - Panel* this = Panel_new(1, 1, 1, 1, CHECKITEM_CLASS, true, ListItem_compare); - this->eventHandler = AffinityPanel_eventHandler; + Panel* this = Panel_new(1, 1, 1, 1, true, Class(CheckItem)); + Object_setClass(this, Class(AffinityPanel)); Panel_setHeader(this, "Use CPUs:"); int curCpu = 0; diff --git a/AffinityPanel.h b/AffinityPanel.h index 392a2597..63283c51 100644 --- a/AffinityPanel.h +++ b/AffinityPanel.h @@ -14,6 +14,8 @@ in the source distribution for its full text. #include "ProcessList.h" #include "ListItem.h" +extern PanelClass AffinityPanel_class; + Panel* AffinityPanel_new(ProcessList* pl, Affinity* affinity); Affinity* AffinityPanel_getAffinity(Panel* this); diff --git a/AvailableColumnsPanel.c b/AvailableColumnsPanel.c index fce9880c..d954da8c 100644 --- a/AvailableColumnsPanel.c +++ b/AvailableColumnsPanel.c @@ -63,15 +63,21 @@ static HandlerResult AvailableColumnsPanel_eventHandler(Panel* super, int ch) { return result; } +PanelClass AvailableColumnsPanel_class = { + .super = { + .extends = Class(Panel), + .delete = AvailableColumnsPanel_delete + }, + .eventHandler = AvailableColumnsPanel_eventHandler +}; + AvailableColumnsPanel* AvailableColumnsPanel_new(Settings* settings, Panel* columns, ScreenManager* scr) { - AvailableColumnsPanel* this = (AvailableColumnsPanel*) malloc(sizeof(AvailableColumnsPanel)); + AvailableColumnsPanel* this = AllocThis(AvailableColumnsPanel); Panel* super = (Panel*) this; - Panel_init(super, 1, 1, 1, 1, LISTITEM_CLASS, true); - ((Object*)this)->delete = AvailableColumnsPanel_delete; + Panel_init(super, 1, 1, 1, 1, Class(ListItem), true); this->settings = settings; this->scr = scr; - super->eventHandler = AvailableColumnsPanel_eventHandler; Panel_setHeader(super, "Available Columns"); diff --git a/AvailableColumnsPanel.h b/AvailableColumnsPanel.h index 6a32f9fb..0a29e6a4 100644 --- a/AvailableColumnsPanel.h +++ b/AvailableColumnsPanel.h @@ -22,6 +22,8 @@ typedef struct AvailableColumnsPanel_ { } AvailableColumnsPanel; +extern PanelClass AvailableColumnsPanel_class; + AvailableColumnsPanel* AvailableColumnsPanel_new(Settings* settings, Panel* columns, ScreenManager* scr); #endif diff --git a/AvailableMetersPanel.c b/AvailableMetersPanel.c index 0cdb508f..f5828516 100644 --- a/AvailableMetersPanel.c +++ b/AvailableMetersPanel.c @@ -37,7 +37,7 @@ static void AvailableMetersPanel_delete(Object* object) { free(this); } -static inline void AvailableMetersPanel_addHeader(Header* header, Panel* panel, MeterType* type, int param, HeaderSide side) { +static inline void AvailableMetersPanel_addHeader(Header* header, Panel* panel, MeterClass* type, int param, HeaderSide side) { Meter* meter = (Meter*) Header_addMeter(header, type, param, side); Panel_add(panel, (Object*) Meter_toListItem(meter)); } @@ -78,26 +78,32 @@ static HandlerResult AvailableMetersPanel_eventHandler(Panel* super, int ch) { return result; } +PanelClass AvailableMetersPanel_class = { + .super = { + .extends = Class(Panel), + .delete = AvailableMetersPanel_delete + }, + .eventHandler = AvailableMetersPanel_eventHandler +}; + AvailableMetersPanel* AvailableMetersPanel_new(Settings* settings, Panel* leftMeters, Panel* rightMeters, ScreenManager* scr) { - AvailableMetersPanel* this = (AvailableMetersPanel*) malloc(sizeof(AvailableMetersPanel)); + AvailableMetersPanel* this = AllocThis(AvailableMetersPanel); Panel* super = (Panel*) this; - Panel_init(super, 1, 1, 1, 1, LISTITEM_CLASS, true); - ((Object*)this)->delete = AvailableMetersPanel_delete; + Panel_init(super, 1, 1, 1, 1, Class(ListItem), true); this->settings = settings; this->leftPanel = leftMeters; this->rightPanel = rightMeters; this->scr = scr; - super->eventHandler = AvailableMetersPanel_eventHandler; Panel_setHeader(super, "Available meters"); for (int i = 1; Meter_types[i]; i++) { - MeterType* type = Meter_types[i]; - if (type != &CPUMeter) { + MeterClass* type = Meter_types[i]; + if (type != &CPUMeter_class) { Panel_add(super, (Object*) ListItem_new(type->uiName, i << 16)); } } - MeterType* type = &CPUMeter; + MeterClass* type = &CPUMeter_class; int cpus = settings->pl->cpuCount; if (cpus > 1) { Panel_add(super, (Object*) ListItem_new("CPU average", 0)); diff --git a/AvailableMetersPanel.h b/AvailableMetersPanel.h index c34f0b2c..281e2857 100644 --- a/AvailableMetersPanel.h +++ b/AvailableMetersPanel.h @@ -23,6 +23,8 @@ typedef struct AvailableMetersPanel_ { } AvailableMetersPanel; +extern PanelClass AvailableMetersPanel_class; + AvailableMetersPanel* AvailableMetersPanel_new(Settings* settings, Panel* leftMeters, Panel* rightMeters, ScreenManager* scr); #endif diff --git a/BatteryMeter.c b/BatteryMeter.c index 071efd53..d2a4049d 100644 --- a/BatteryMeter.c +++ b/BatteryMeter.c @@ -328,10 +328,13 @@ static void BatteryMeter_setValues(Meter * this, char *buffer, int len) { return; } -MeterType BatteryMeter = { +MeterClass BatteryMeter_class = { + .super = { + .extends = Class(Meter), + .delete = Meter_delete + }, .setValues = BatteryMeter_setValues, - .display = NULL, - .mode = TEXT_METERMODE, + .defaultMode = TEXT_METERMODE, .items = 1, .total = 100.0, .attributes = BatteryMeter_attributes, diff --git a/BatteryMeter.h b/BatteryMeter.h index 56ed951e..25fd3c92 100644 --- a/BatteryMeter.h +++ b/BatteryMeter.h @@ -22,6 +22,6 @@ typedef enum ACPresence_ { extern int BatteryMeter_attributes[]; -extern MeterType BatteryMeter; +extern MeterClass BatteryMeter_class; #endif @@ -61,13 +61,13 @@ static void CPUMeter_setValues(Meter* this, char* buffer, int size) { this->values[5] = cpuData->ioWaitPeriod / total * 100.0; this->values[6] = cpuData->stealPeriod / total * 100.0; this->values[7] = cpuData->guestPeriod / total * 100.0; - this->type->items = 8; + Meter_setItems(this, 8); percent = MIN(100.0, MAX(0.0, (this->values[0]+this->values[1]+this->values[2]+ this->values[3]+this->values[4]))); } else { this->values[2] = cpuData->systemAllPeriod / total * 100.0; this->values[3] = (cpuData->stealPeriod + cpuData->guestPeriod) / total * 100.0; - this->type->items = 4; + Meter_setItems(this, 4); percent = MIN(100.0, MAX(0.0, (this->values[0]+this->values[1]+this->values[2]+this->values[3]))); } if (isnan(percent)) percent = 0.0; @@ -126,7 +126,7 @@ static void CPUMeter_display(Object* cast, RichString* out) { static void AllCPUsMeter_getRange(Meter* this, int* start, int* count) { int cpus = this->pl->cpuCount; - switch(this->type->name[0]) { + switch(Meter_name(this)[0]) { default: case 'A': // All *start = 0; @@ -152,13 +152,13 @@ static void AllCPUsMeter_init(Meter* this) { AllCPUsMeter_getRange(this, &start, &count); for (int i = 0; i < count; i++) { if (!meters[i]) - meters[i] = Meter_new(this->pl, start+i+1, &CPUMeter); - meters[i]->type->init(meters[i]); + meters[i] = Meter_new(this->pl, start+i+1, (MeterClass*) Class(CPUMeter)); + Meter_init(meters[i]); } if (this->mode == 0) this->mode = BAR_METERMODE; int h = Meter_modes[this->mode]->h; - if (strchr(this->type->name, '2')) + if (strchr(Meter_name(this), '2')) this->h = h * ((count+1) / 2); else this->h = h * count; @@ -172,7 +172,7 @@ static void AllCPUsMeter_done(Meter* this) { Meter_delete((Object*)meters[i]); } -static void AllCPUsMeter_setMode(Meter* this, int mode) { +static void AllCPUsMeter_updateMode(Meter* this, int mode) { Meter** meters = (Meter**) this->drawData; this->mode = mode; int h = Meter_modes[mode]->h; @@ -181,7 +181,7 @@ static void AllCPUsMeter_setMode(Meter* this, int mode) { for (int i = 0; i < count; i++) { Meter_setMode(meters[i], mode); } - if (strchr(this->type->name, '2')) + if (strchr(Meter_name(this), '2')) this->h = h * ((count+1) / 2); else this->h = h * count; @@ -214,10 +214,14 @@ static void SingleColCPUsMeter_draw(Meter* this, int x, int y, int w) { } } -MeterType CPUMeter = { +MeterClass CPUMeter_class = { + .super = { + .extends = Class(Meter), + .delete = Meter_delete, + .display = CPUMeter_display + }, .setValues = CPUMeter_setValues, - .display = CPUMeter_display, - .mode = BAR_METERMODE, + .defaultMode = BAR_METERMODE, .items = 8, .total = 100.0, .attributes = CPUMeter_attributes, @@ -227,8 +231,13 @@ MeterType CPUMeter = { .init = CPUMeter_init }; -MeterType AllCPUsMeter = { - .mode = 0, +MeterClass AllCPUsMeter_class = { + .super = { + .extends = Class(Meter), + .delete = Meter_delete, + .display = CPUMeter_display + }, + .defaultMode = CUSTOM_METERMODE, .items = 1, .total = 100.0, .attributes = CPUMeter_attributes, @@ -237,12 +246,17 @@ MeterType AllCPUsMeter = { .caption = "CPU", .draw = SingleColCPUsMeter_draw, .init = AllCPUsMeter_init, - .setMode = AllCPUsMeter_setMode, + .updateMode = AllCPUsMeter_updateMode, .done = AllCPUsMeter_done }; -MeterType AllCPUs2Meter = { - .mode = 0, +MeterClass AllCPUs2Meter_class = { + .super = { + .extends = Class(Meter), + .delete = Meter_delete, + .display = CPUMeter_display + }, + .defaultMode = CUSTOM_METERMODE, .items = 1, .total = 100.0, .attributes = CPUMeter_attributes, @@ -251,12 +265,17 @@ MeterType AllCPUs2Meter = { .caption = "CPU", .draw = DualColCPUsMeter_draw, .init = AllCPUsMeter_init, - .setMode = AllCPUsMeter_setMode, + .updateMode = AllCPUsMeter_updateMode, .done = AllCPUsMeter_done }; -MeterType LeftCPUsMeter = { - .mode = 0, +MeterClass LeftCPUsMeter_class = { + .super = { + .extends = Class(Meter), + .delete = Meter_delete, + .display = CPUMeter_display + }, + .defaultMode = CUSTOM_METERMODE, .items = 1, .total = 100.0, .attributes = CPUMeter_attributes, @@ -265,12 +284,17 @@ MeterType LeftCPUsMeter = { .caption = "CPU", .draw = SingleColCPUsMeter_draw, .init = AllCPUsMeter_init, - .setMode = AllCPUsMeter_setMode, + .updateMode = AllCPUsMeter_updateMode, .done = AllCPUsMeter_done }; -MeterType RightCPUsMeter = { - .mode = 0, +MeterClass RightCPUsMeter_class = { + .super = { + .extends = Class(Meter), + .delete = Meter_delete, + .display = CPUMeter_display + }, + .defaultMode = CUSTOM_METERMODE, .items = 1, .total = 100.0, .attributes = CPUMeter_attributes, @@ -279,12 +303,17 @@ MeterType RightCPUsMeter = { .caption = "CPU", .draw = SingleColCPUsMeter_draw, .init = AllCPUsMeter_init, - .setMode = AllCPUsMeter_setMode, + .updateMode = AllCPUsMeter_updateMode, .done = AllCPUsMeter_done }; -MeterType LeftCPUs2Meter = { - .mode = 0, +MeterClass LeftCPUs2Meter_class = { + .super = { + .extends = Class(Meter), + .delete = Meter_delete, + .display = CPUMeter_display + }, + .defaultMode = CUSTOM_METERMODE, .items = 1, .total = 100.0, .attributes = CPUMeter_attributes, @@ -293,12 +322,17 @@ MeterType LeftCPUs2Meter = { .caption = "CPU", .draw = DualColCPUsMeter_draw, .init = AllCPUsMeter_init, - .setMode = AllCPUsMeter_setMode, + .updateMode = AllCPUsMeter_updateMode, .done = AllCPUsMeter_done }; -MeterType RightCPUs2Meter = { - .mode = 0, +MeterClass RightCPUs2Meter_class = { + .super = { + .extends = Class(Meter), + .delete = Meter_delete, + .display = CPUMeter_display + }, + .defaultMode = CUSTOM_METERMODE, .items = 1, .total = 100.0, .attributes = CPUMeter_attributes, @@ -307,7 +341,7 @@ MeterType RightCPUs2Meter = { .caption = "CPU", .draw = DualColCPUsMeter_draw, .init = AllCPUsMeter_init, - .setMode = AllCPUsMeter_setMode, + .updateMode = AllCPUsMeter_updateMode, .done = AllCPUsMeter_done }; @@ -20,19 +20,19 @@ extern int CPUMeter_attributes[]; #define MAX(a,b) ((a)>(b)?(a):(b)) #endif -extern MeterType CPUMeter; +extern MeterClass CPUMeter_class; -extern MeterType AllCPUsMeter; +extern MeterClass AllCPUsMeter_class; -extern MeterType AllCPUs2Meter; +extern MeterClass AllCPUs2Meter_class; -extern MeterType LeftCPUsMeter; +extern MeterClass LeftCPUsMeter_class; -extern MeterType RightCPUsMeter; +extern MeterClass RightCPUsMeter_class; -extern MeterType LeftCPUs2Meter; +extern MeterClass LeftCPUs2Meter_class; -extern MeterType RightCPUs2Meter; +extern MeterClass RightCPUs2Meter_class; #endif @@ -112,10 +112,12 @@ typedef enum ColorElements_ { static bool CRT_hasColors; -int CRT_delay = 0; +static int CRT_delay = 0; int CRT_colorScheme = 0; +bool CRT_utf8 = false; + int CRT_colors[LAST_COLORELEMENT] = { 0 }; int CRT_cursorX = 0; @@ -158,7 +160,7 @@ void CRT_init(int delay, int colorScheme) { noecho(); CRT_delay = delay; CRT_colorScheme = colorScheme; - halfdelay(CRT_delay); + halfdelay(CRT_delay/2); nonl(); intrflush(stdscr, false); keypad(stdscr, true); @@ -212,7 +214,7 @@ int CRT_readKey() { cbreak(); nodelay(stdscr, FALSE); int ret = getch(); - halfdelay(CRT_delay); + halfdelay(CRT_delay/2); return ret; } @@ -223,7 +225,7 @@ void CRT_disableDelay() { } void CRT_enableDelay() { - halfdelay(CRT_delay); + halfdelay(CRT_delay/2); } void CRT_setColors(int colorScheme) { @@ -101,10 +101,10 @@ typedef enum ColorElements_ { // TODO: centralize these in Settings. -extern int CRT_delay; - extern int CRT_colorScheme; +extern bool CRT_utf8; + extern int CRT_colors[LAST_COLORELEMENT]; extern int CRT_cursorX; diff --git a/CategoriesPanel.c b/CategoriesPanel.c index 449a5be6..bf6ee543 100644 --- a/CategoriesPanel.c +++ b/CategoriesPanel.c @@ -132,15 +132,21 @@ static HandlerResult CategoriesPanel_eventHandler(Panel* super, int ch) { return result; } +PanelClass CategoriesPanel_class = { + .super = { + .extends = Class(Panel), + .delete = CategoriesPanel_delete + }, + .eventHandler = CategoriesPanel_eventHandler +}; + CategoriesPanel* CategoriesPanel_new(Settings* settings, ScreenManager* scr) { - CategoriesPanel* this = (CategoriesPanel*) malloc(sizeof(CategoriesPanel)); + CategoriesPanel* this = AllocThis(CategoriesPanel); Panel* super = (Panel*) this; - Panel_init(super, 1, 1, 1, 1, LISTITEM_CLASS, true); - ((Object*)this)->delete = CategoriesPanel_delete; + Panel_init(super, 1, 1, 1, 1, Class(ListItem), true); this->settings = settings; this->scr = scr; - super->eventHandler = CategoriesPanel_eventHandler; Panel_setHeader(super, "Setup"); Panel_add(super, (Object*) ListItem_new("Meters", 0)); Panel_add(super, (Object*) ListItem_new("Display options", 0)); diff --git a/CategoriesPanel.h b/CategoriesPanel.h index 1311fe2e..9d30330f 100644 --- a/CategoriesPanel.h +++ b/CategoriesPanel.h @@ -23,6 +23,8 @@ typedef struct CategoriesPanel_ { void CategoriesPanel_makeMetersPage(CategoriesPanel* this); +extern PanelClass CategoriesPanel_class; + CategoriesPanel* CategoriesPanel_new(Settings* settings, ScreenManager* scr); #endif diff --git a/CheckItem.c b/CheckItem.c index 0fb40cfd..8c05e38e 100644 --- a/CheckItem.c +++ b/CheckItem.c @@ -24,12 +24,6 @@ typedef struct CheckItem_ { }*/ -#ifdef DEBUG -char* CHECKITEM_CLASS = "CheckItem"; -#else -#define CHECKITEM_CLASS NULL -#endif - static void CheckItem_delete(Object* cast) { CheckItem* this = (CheckItem*)cast; assert (this != NULL); @@ -50,11 +44,13 @@ static void CheckItem_display(Object* cast, RichString* out) { RichString_append(out, CRT_colors[CHECK_TEXT], this->text); } +ObjectClass CheckItem_class = { + .display = CheckItem_display, + .delete = CheckItem_delete +}; + CheckItem* CheckItem_new(char* text, bool* ref, bool value) { - CheckItem* this = malloc(sizeof(CheckItem)); - Object_setClass(this, CHECKITEM_CLASS); - ((Object*)this)->display = CheckItem_display; - ((Object*)this)->delete = CheckItem_delete; + CheckItem* this = AllocThis(CheckItem); this->text = text; this->value = value; this->ref = ref; diff --git a/CheckItem.h b/CheckItem.h index 6c70790e..98ed17a1 100644 --- a/CheckItem.h +++ b/CheckItem.h @@ -19,11 +19,7 @@ typedef struct CheckItem_ { } CheckItem; -#ifdef DEBUG -extern char* CHECKITEM_CLASS; -#else -#define CHECKITEM_CLASS NULL -#endif +extern ObjectClass CheckItem_class; CheckItem* CheckItem_new(char* text, bool* ref, bool value); diff --git a/ClockMeter.c b/ClockMeter.c index 7edf5bf1..3b0911fe 100644 --- a/ClockMeter.c +++ b/ClockMeter.c @@ -26,10 +26,13 @@ static void ClockMeter_setValues(Meter* this, char* buffer, int size) { strftime(buffer, size, "%H:%M:%S", lt); } -MeterType ClockMeter = { +MeterClass ClockMeter_class = { + .super = { + .extends = Class(Meter), + .delete = Meter_delete + }, .setValues = ClockMeter_setValues, - .display = NULL, - .mode = TEXT_METERMODE, + .defaultMode = TEXT_METERMODE, .total = 100.0, .items = 1, .attributes = ClockMeter_attributes, diff --git a/ClockMeter.h b/ClockMeter.h index ed19786c..3e0aef53 100644 --- a/ClockMeter.h +++ b/ClockMeter.h @@ -13,6 +13,6 @@ in the source distribution for its fu |