summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHisham Muhammad <hisham@gobolinux.org>2012-12-05 15:12:20 +0000
committerHisham Muhammad <hisham@gobolinux.org>2012-12-05 15:12:20 +0000
commit00b324bfc162030b575e03795dcfcaac56bd0b4d (patch)
treefbaada243839b0b67351856e2d02a2e8184bf65f
parent2a73405cd060b543d56987650327b18078a137d7 (diff)
Changes in object model: separate class objects to store vtable. Also, nicer UTF-8 display of big numbers.
-rw-r--r--Affinity.h27
-rw-r--r--AffinityPanel.c12
-rw-r--r--AffinityPanel.h2
-rw-r--r--AvailableColumnsPanel.c14
-rw-r--r--AvailableColumnsPanel.h2
-rw-r--r--AvailableMetersPanel.c22
-rw-r--r--AvailableMetersPanel.h2
-rw-r--r--BatteryMeter.c9
-rw-r--r--BatteryMeter.h2
-rw-r--r--CPUMeter.c92
-rw-r--r--CPUMeter.h14
-rw-r--r--CRT.c10
-rw-r--r--CRT.h4
-rw-r--r--CategoriesPanel.c14
-rw-r--r--CategoriesPanel.h2
-rw-r--r--CheckItem.c16
-rw-r--r--CheckItem.h6
-rw-r--r--ClockMeter.c9
-rw-r--r--ClockMeter.h2
-rw-r--r--ColorsPanel.c16
-rw-r--r--ColorsPanel.h2
-rw-r--r--ColumnsPanel.c14
-rw-r--r--ColumnsPanel.h2
-rw-r--r--DisplayOptionsPanel.c14
-rw-r--r--DisplayOptionsPanel.h2
-rw-r--r--FunctionBar.c14
-rw-r--r--FunctionBar.h6
-rw-r--r--Header.c41
-rw-r--r--Header.h2
-rw-r--r--HostnameMeter.c9
-rw-r--r--HostnameMeter.h2
-rw-r--r--IOPriorityPanel.c2
-rw-r--r--ListItem.c16
-rw-r--r--ListItem.h6
-rw-r--r--LoadAverageMeter.c20
-rw-r--r--LoadAverageMeter.h4
-rw-r--r--MemoryMeter.c10
-rw-r--r--MemoryMeter.h2
-rw-r--r--Meter.c223
-rw-r--r--Meter.h96
-rw-r--r--MetersPanel.c14
-rw-r--r--MetersPanel.h2
-rw-r--r--Object.c59
-rw-r--r--Object.h39
-rw-r--r--OpenFilesScreen.c5
-rw-r--r--Panel.c51
-rw-r--r--Panel.h25
-rw-r--r--Process.c17
-rw-r--r--Process.h8
-rw-r--r--ProcessList.c15
-rw-r--r--ProcessList.h6
-rw-r--r--ScreenManager.c8
-rw-r--r--SignalsPanel.c33
-rw-r--r--SignalsPanel.h9
-rw-r--r--SwapMeter.c10
-rw-r--r--SwapMeter.h2
-rw-r--r--TasksMeter.c10
-rw-r--r--TasksMeter.h2
-rw-r--r--TraceScreen.c13
-rw-r--r--UptimeMeter.c9
-rw-r--r--UptimeMeter.h2
-rw-r--r--Vector.c39
-rw-r--r--Vector.h5
-rw-r--r--htop.c81
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
diff --git a/CPUMeter.c b/CPUMeter.c
index 90555ff6..b9d888ce 100644
--- a/CPUMeter.c
+++ b/CPUMeter.c
@@ -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
};
diff --git a/CPUMeter.h b/CPUMeter.h
index 251fbdc4..f91c7597 100644
--- a/CPUMeter.h
+++ b/CPUMeter.h
@@ -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
diff --git a/CRT.c b/CRT.c
index 6cc979f7..3a1eb913 100644
--- a/CRT.c
+++ b/CRT.c
@@ -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) {
diff --git a/CRT.h b/CRT.h
index 7916b16d..f7d4d723 100644
--- a/CRT.h
+++ b/CRT.h
@@ -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) {