From 00b324bfc162030b575e03795dcfcaac56bd0b4d Mon Sep 17 00:00:00 2001 From: Hisham Muhammad Date: Wed, 5 Dec 2012 15:12:20 +0000 Subject: Changes in object model: separate class objects to store vtable. Also, nicer UTF-8 display of big numbers. --- Meter.h | 96 +++++++++++++++++++++++++++++++---------------------------------- 1 file changed, 45 insertions(+), 51 deletions(-) (limited to 'Meter.h') diff --git a/Meter.h b/Meter.h index 08827240..64668c4b 100644 --- a/Meter.h +++ b/Meter.h @@ -9,54 +9,58 @@ Released under the GNU GPL, see the COPYING file in the source distribution for its full text. */ -#ifndef USE_FUNKY_MODES -#define USE_FUNKY_MODES 1 -#endif - #define METER_BUFFER_LEN 128 #include "ListItem.h" #include "ProcessList.h" typedef struct Meter_ Meter; -typedef struct MeterType_ MeterType; -typedef struct MeterMode_ MeterMode; -typedef void(*MeterType_Init)(Meter*); -typedef void(*MeterType_Done)(Meter*); -typedef void(*MeterType_SetMode)(Meter*, int); +typedef void(*Meter_Init)(Meter*); +typedef void(*Meter_Done)(Meter*); +typedef void(*Meter_UpdateMode)(Meter*, int); typedef void(*Meter_SetValues)(Meter*, char*, int); typedef void(*Meter_Draw)(Meter*, int, int, int); -struct MeterMode_ { - Meter_Draw draw; - const char* uiName; - int h; -}; - -struct MeterType_ { - Meter_SetValues setValues; - Object_Display display; - int mode; +typedef struct MeterClass_ { + ObjectClass super; + const Meter_Init init; + const Meter_Done done; + const Meter_UpdateMode updateMode; + const Meter_Draw draw; + const Meter_SetValues setValues; + const int defaultMode; int items; - double total; - int* attributes; + const double total; + const int* attributes; const char* name; const char* uiName; const char* caption; - MeterType_Init init; - MeterType_Done done; - MeterType_SetMode setMode; - Meter_Draw draw; -}; +} MeterClass; + +#define As_Meter(this_) ((MeterClass*)((this_)->super.klass)) +#define Meter_initFn(this_) As_Meter(this_)->init +#define Meter_init(this_) As_Meter(this_)->init((Meter*)(this_)) +#define Meter_done(this_) As_Meter(this_)->done((Meter*)(this_)) +#define Meter_updateModeFn(this_) As_Meter(this_)->updateMode +#define Meter_updateMode(this_, m_) As_Meter(this_)->updateMode((Meter*)(this_), m_) +#define Meter_drawFn(this_) As_Meter(this_)->draw +#define Meter_doneFn(this_) As_Meter(this_)->done +#define Meter_setValues(this_, c_, i_) As_Meter(this_)->setValues((Meter*)(this_), c_, i_) +#define Meter_defaultMode(this_) As_Meter(this_)->defaultMode +#define Meter_getItems(this_) As_Meter(this_)->items +#define Meter_setItems(this_, n_) As_Meter(this_)->items = (n_) +#define Meter_attributes(this_) As_Meter(this_)->attributes +#define Meter_name(this_) As_Meter(this_)->name +#define Meter_uiName(this_) As_Meter(this_)->uiName struct Meter_ { Object super; + Meter_Draw draw; + char* caption; - MeterType* type; int mode; int param; - Meter_Draw draw; void* drawData; int h; ProcessList* pl; @@ -64,24 +68,26 @@ struct Meter_ { double total; }; -#ifdef USE_FUNKY_MODES -typedef struct GraphData_ { - time_t time; - double values[METER_BUFFER_LEN]; -} GraphData; -#endif +typedef struct MeterMode_ { + Meter_Draw draw; + const char* uiName; + int h; +} MeterMode; typedef enum { CUSTOM_METERMODE = 0, BAR_METERMODE, TEXT_METERMODE, -#ifdef USE_FUNKY_MODES GRAPH_METERMODE, LED_METERMODE, -#endif LAST_METERMODE } MeterModeId; +typedef struct GraphData_ { + struct timeval time; + double values[METER_BUFFER_LEN]; +} GraphData; + #ifndef MIN #define MIN(a,b) ((a)<(b)?(a):(b)) @@ -90,15 +96,11 @@ typedef enum { #define MAX(a,b) ((a)>(b)?(a):(b)) #endif -#ifdef DEBUG -extern char* METER_CLASS; -#else -#define METER_CLASS NULL -#endif +extern MeterClass Meter_class; -extern MeterType* Meter_types[]; +extern MeterClass* Meter_types[]; -Meter* Meter_new(ProcessList* pl, int param, MeterType* type); +Meter* Meter_new(ProcessList* pl, int param, MeterClass* type); void Meter_delete(Object* cast); @@ -112,20 +114,12 @@ ListItem* Meter_toListItem(Meter* this); /* ---------- BarMeterMode ---------- */ -#ifdef USE_FUNKY_MODES - /* ---------- GraphMeterMode ---------- */ #define DrawDot(a,y,c) do { attrset(a); mvaddch(y, x+k, c); } while(0) /* ---------- LEDMeterMode ---------- */ -#endif - -#ifdef USE_FUNKY_MODES - -#endif - extern MeterMode* Meter_modes[]; #endif -- cgit v1.2.3