aboutsummaryrefslogtreecommitdiffstats
path: root/Meter.h
diff options
context:
space:
mode:
Diffstat (limited to 'Meter.h')
-rw-r--r--Meter.h128
1 files changed, 56 insertions, 72 deletions
diff --git a/Meter.h b/Meter.h
index 7e6f80c..437491a 100644
--- a/Meter.h
+++ b/Meter.h
@@ -4,101 +4,91 @@
#define HEADER_Meter
/*
htop - Meter.h
-(C) 2004-2010 Hisham H. Muhammad
+(C) 2004-2011 Hisham H. Muhammad
Released under the GNU GPL, see the COPYING file
in the source distribution for its full text.
*/
-#define _GNU_SOURCE
-#include "RichString.h"
-#include "Object.h"
-#include "CRT.h"
-#include "ListItem.h"
-#include "String.h"
-#include "ProcessList.h"
-
-#include <math.h>
-#include <string.h>
-#include <stdlib.h>
-#include <stdarg.h>
-
-#include "debug.h"
-#include <assert.h>
-
-#ifndef USE_FUNKY_MODES
-#define USE_FUNKY_MODES 1
-#endif
-
#define METER_BUFFER_LEN 128
+#include <sys/time.h>
+#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;
- int items;
- double total;
- int* attributes;
+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;
+ 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;
-};
+ const char maxItems;
+ char curItems;
+} 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_)->curItems
+#define Meter_setItems(this_, n_) As_Meter(this_)->curItems = (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* drawBuffer;
+ void* drawData;
int h;
ProcessList* pl;
double* values;
double total;
};
+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;
-
-#include "CPUMeter.h"
-#include "MemoryMeter.h"
-#include "SwapMeter.h"
-#include "TasksMeter.h"
-#include "LoadAverageMeter.h"
-#include "UptimeMeter.h"
-#include "BatteryMeter.h"
-#include "ClockMeter.h"
-#include "HostnameMeter.h"
+typedef struct GraphData_ {
+ struct timeval time;
+ double values[METER_BUFFER_LEN];
+} GraphData;
#ifndef MIN
@@ -108,15 +98,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);
@@ -130,20 +116,18 @@ 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
+extern MeterMode* Meter_modes[];
-#ifdef USE_FUNKY_MODES
+/* Blank meter */
-#endif
+extern int BlankMeter_attributes[];
-extern MeterMode* Meter_modes[];
+extern MeterClass BlankMeter_class;
#endif