aboutsummaryrefslogtreecommitdiffstats
path: root/Meter.h
diff options
context:
space:
mode:
Diffstat (limited to 'Meter.h')
-rw-r--r--Meter.h31
1 files changed, 22 insertions, 9 deletions
diff --git a/Meter.h b/Meter.h
index 2a78fd1..0e6b3f9 100644
--- a/Meter.h
+++ b/Meter.h
@@ -10,6 +10,7 @@ in the source distribution for its full text.
#include "config.h" // IWYU pragma: keep
#include <stdbool.h>
+#include <stddef.h>
#include <stdint.h>
#include <sys/time.h>
@@ -18,7 +19,8 @@ in the source distribution for its full text.
#include "ProcessList.h"
-#define METER_BUFFER_LEN 256
+#define METER_TXTBUFFER_LEN 256
+#define METER_GRAPHDATA_SIZE 256
#define METER_BUFFER_CHECK(buffer, size, written) \
do { \
@@ -49,16 +51,20 @@ typedef struct Meter_ Meter;
typedef void(*Meter_Init)(Meter*);
typedef void(*Meter_Done)(Meter*);
typedef void(*Meter_UpdateMode)(Meter*, int);
-typedef void(*Meter_UpdateValues)(Meter*, char*, size_t);
+typedef void(*Meter_UpdateValues)(Meter*);
typedef void(*Meter_Draw)(Meter*, int, int, int);
+typedef const char* (*Meter_GetCaption)(const Meter*);
+typedef void(*Meter_GetUiName)(const Meter*, char*, size_t);
typedef struct MeterClass_ {
const ObjectClass super;
const Meter_Init init;
const Meter_Done done;
const Meter_UpdateMode updateMode;
- const Meter_Draw draw;
const Meter_UpdateValues updateValues;
+ const Meter_Draw draw;
+ const Meter_GetCaption getCaption;
+ const Meter_GetUiName getUiName;
const int defaultMode;
const double total;
const int* const attributes;
@@ -67,6 +73,7 @@ typedef struct MeterClass_ {
const char* const caption; /* prefix in the actual header */
const char* const description; /* optional meter description in header setup menu */
const uint8_t maxItems;
+ const bool isMultiColumn; /* whether the meter draws multiple sub-columns (defaults to false) */
} MeterClass;
#define As_Meter(this_) ((const MeterClass*)((this_)->super.klass))
@@ -77,16 +84,20 @@ typedef struct MeterClass_ {
#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_updateValues(this_, buf_, sz_) \
- As_Meter(this_)->updateValues((Meter*)(this_), buf_, sz_)
+#define Meter_updateValues(this_) As_Meter(this_)->updateValues((Meter*)(this_))
+#define Meter_getUiNameFn(this_) As_Meter(this_)->getUiName
+#define Meter_getUiName(this_,n_,l_) As_Meter(this_)->getUiName((const Meter*)(this_),n_,l_)
+#define Meter_getCaptionFn(this_) As_Meter(this_)->getCaption
+#define Meter_getCaption(this_) (Meter_getCaptionFn(this_) ? As_Meter(this_)->getCaption((const Meter*)(this_)) : (this_)->caption)
#define Meter_defaultMode(this_) As_Meter(this_)->defaultMode
#define Meter_attributes(this_) As_Meter(this_)->attributes
#define Meter_name(this_) As_Meter(this_)->name
#define Meter_uiName(this_) As_Meter(this_)->uiName
+#define Meter_isMultiColumn(this_) As_Meter(this_)->isMultiColumn
typedef struct GraphData_ {
struct timeval time;
- double values[METER_BUFFER_LEN];
+ double values[METER_GRAPHDATA_SIZE];
} GraphData;
struct Meter_ {
@@ -95,12 +106,14 @@ struct Meter_ {
char* caption;
int mode;
- int param;
+ unsigned int param;
GraphData* drawData;
int h;
+ int columnWidthCount; /**< only used internally by the Header */
const ProcessList* pl;
uint8_t curItems;
const int* curAttributes;
+ char txtBuffer[METER_TXTBUFFER_LEN];
double* values;
double total;
void* meterData;
@@ -123,7 +136,7 @@ typedef enum {
extern const MeterClass Meter_class;
-Meter* Meter_new(const ProcessList* pl, int param, const MeterClass* type);
+Meter* Meter_new(const ProcessList* pl, unsigned int param, const MeterClass* type);
int Meter_humanUnit(char* buffer, unsigned long int value, size_t size);
@@ -133,7 +146,7 @@ void Meter_setCaption(Meter* this, const char* caption);
void Meter_setMode(Meter* this, int modeIndex);
-ListItem* Meter_toListItem(Meter* this, bool moving);
+ListItem* Meter_toListItem(const Meter* this, bool moving);
extern const MeterMode* const Meter_modes[];

© 2014-2024 Faster IT GmbH | imprint | privacy policy