Skip to content

Commit

Permalink
Changes in object model: separate class objects to store vtable. Also…
Browse files Browse the repository at this point in the history
…, nicer UTF-8 display of big numbers.
  • Loading branch information
hishamhm committed Dec 5, 2012
1 parent 2a73405 commit 00b324b
Show file tree
Hide file tree
Showing 64 changed files with 662 additions and 566 deletions.
27 changes: 27 additions & 0 deletions Affinity.h
Original file line number Diff line number Diff line change
@@ -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
12 changes: 10 additions & 2 deletions AffinityPanel.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
2 changes: 2 additions & 0 deletions AffinityPanel.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
14 changes: 10 additions & 4 deletions AvailableColumnsPanel.c
Original file line number Diff line number Diff line change
Expand Up @@ -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");

Expand Down
2 changes: 2 additions & 0 deletions AvailableColumnsPanel.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ typedef struct AvailableColumnsPanel_ {
} AvailableColumnsPanel;


extern PanelClass AvailableColumnsPanel_class;

AvailableColumnsPanel* AvailableColumnsPanel_new(Settings* settings, Panel* columns, ScreenManager* scr);

#endif
22 changes: 14 additions & 8 deletions AvailableMetersPanel.c
Original file line number Diff line number Diff line change
Expand Up @@ -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));
}
Expand Down Expand Up @@ -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));
Expand Down
2 changes: 2 additions & 0 deletions AvailableMetersPanel.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ typedef struct AvailableMetersPanel_ {
} AvailableMetersPanel;


extern PanelClass AvailableMetersPanel_class;

AvailableMetersPanel* AvailableMetersPanel_new(Settings* settings, Panel* leftMeters, Panel* rightMeters, ScreenManager* scr);

#endif
9 changes: 6 additions & 3 deletions BatteryMeter.c
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
2 changes: 1 addition & 1 deletion BatteryMeter.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,6 @@ typedef enum ACPresence_ {

extern int BatteryMeter_attributes[];

extern MeterType BatteryMeter;
extern MeterClass BatteryMeter_class;

#endif
92 changes: 63 additions & 29 deletions CPUMeter.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand All @@ -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;
Expand All @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -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,
Expand All @@ -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,
Expand All @@ -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,
Expand All @@ -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,
Expand All @@ -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,
Expand All @@ -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,
Expand All @@ -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,
Expand All @@ -307,7 +341,7 @@ MeterType RightCPUs2Meter = {
.caption = "CPU",
.draw = DualColCPUsMeter_draw,
.init = AllCPUsMeter_init,
.setMode = AllCPUsMeter_setMode,
.updateMode = AllCPUsMeter_updateMode,
.done = AllCPUsMeter_done
};

Loading

0 comments on commit 00b324b

Please sign in to comment.