blob: c4d00396eae0fba8f1b37376a14ee600247347e8 [file] [log] [blame]
Hisham Muhammadd6231ba2006-03-04 18:16:49 +00001#ifndef HEADER_Meter
2#define HEADER_Meter
3/*
Hisham Muhammadf6e0b7d2006-06-06 20:28:42 +00004htop - Meter.h
Hisham Muhammad300caa02011-05-26 16:35:07 +00005(C) 2004-2011 Hisham H. Muhammad
Hisham Muhammadd6231ba2006-03-04 18:16:49 +00006Released under the GNU GPL, see the COPYING file
7in the source distribution for its full text.
8*/
9
Hisham Muhammad84281bd2011-12-26 21:35:57 +000010#include "ListItem.h"
Hisham Muhammad3383d8e2015-01-21 23:27:31 -020011#include <sys/time.h>
Hisham Muhammadd6231ba2006-03-04 18:16:49 +000012
Hugo Musso Gualandi92074012020-09-12 18:25:25 -030013#define METER_BUFFER_LEN 256
14
Hisham Muhammadd6231ba2006-03-04 18:16:49 +000015typedef struct Meter_ Meter;
16
Hisham Muhammad00b324b2012-12-05 15:12:20 +000017typedef void(*Meter_Init)(Meter*);
18typedef void(*Meter_Done)(Meter*);
19typedef void(*Meter_UpdateMode)(Meter*, int);
Explorer099dea20e2016-05-04 13:39:26 +080020typedef void(*Meter_UpdateValues)(Meter*, char*, int);
Hisham Muhammadd6231ba2006-03-04 18:16:49 +000021typedef void(*Meter_Draw)(Meter*, int, int, int);
22
Hisham Muhammad00b324b2012-12-05 15:12:20 +000023typedef struct MeterClass_ {
24 ObjectClass super;
25 const Meter_Init init;
26 const Meter_Done done;
27 const Meter_UpdateMode updateMode;
28 const Meter_Draw draw;
Explorer099dea20e2016-05-04 13:39:26 +080029 const Meter_UpdateValues updateValues;
Hisham Muhammad00b324b2012-12-05 15:12:20 +000030 const int defaultMode;
Hisham Muhammad00b324b2012-12-05 15:12:20 +000031 const double total;
32 const int* attributes;
Hisham Muhammad02a30bf2010-02-25 01:43:18 +000033 const char* name;
34 const char* uiName;
35 const char* caption;
Hisham Muhammad14bd77c2015-02-03 22:31:44 +010036 const char* description;
Hisham Muhammadc1e0f6e2014-01-16 01:40:47 -020037 const char maxItems;
38 char curItems;
Hisham Muhammad00b324b2012-12-05 15:12:20 +000039} MeterClass;
40
41#define As_Meter(this_) ((MeterClass*)((this_)->super.klass))
42#define Meter_initFn(this_) As_Meter(this_)->init
43#define Meter_init(this_) As_Meter(this_)->init((Meter*)(this_))
44#define Meter_done(this_) As_Meter(this_)->done((Meter*)(this_))
45#define Meter_updateModeFn(this_) As_Meter(this_)->updateMode
46#define Meter_updateMode(this_, m_) As_Meter(this_)->updateMode((Meter*)(this_), m_)
47#define Meter_drawFn(this_) As_Meter(this_)->draw
48#define Meter_doneFn(this_) As_Meter(this_)->done
Explorer099dea20e2016-05-04 13:39:26 +080049#define Meter_updateValues(this_, buf_, sz_) \
50 As_Meter(this_)->updateValues((Meter*)(this_), buf_, sz_)
Hisham Muhammad00b324b2012-12-05 15:12:20 +000051#define Meter_defaultMode(this_) As_Meter(this_)->defaultMode
Hisham Muhammadc1e0f6e2014-01-16 01:40:47 -020052#define Meter_getItems(this_) As_Meter(this_)->curItems
53#define Meter_setItems(this_, n_) As_Meter(this_)->curItems = (n_)
Hisham Muhammad00b324b2012-12-05 15:12:20 +000054#define Meter_attributes(this_) As_Meter(this_)->attributes
55#define Meter_name(this_) As_Meter(this_)->name
56#define Meter_uiName(this_) As_Meter(this_)->uiName
Hisham Muhammadd6231ba2006-03-04 18:16:49 +000057
58struct Meter_ {
59 Object super;
Hisham Muhammad00b324b2012-12-05 15:12:20 +000060 Meter_Draw draw;
Daniel Flanagandd334442019-10-31 11:39:12 -050061
Hisham Muhammad33113fe2006-04-10 20:40:38 +000062 char* caption;
Hisham Muhammad33113fe2006-04-10 20:40:38 +000063 int mode;
64 int param;
Hisham Muhammada9c0ea32011-03-22 20:37:08 +000065 void* drawData;
Hisham Muhammad33113fe2006-04-10 20:40:38 +000066 int h;
Hisham Muhammad3383d8e2015-01-21 23:27:31 -020067 struct ProcessList_* pl;
Hisham Muhammadd6231ba2006-03-04 18:16:49 +000068 double* values;
69 double total;
Hisham Muhammadd6231ba2006-03-04 18:16:49 +000070};
71
Hisham Muhammad00b324b2012-12-05 15:12:20 +000072typedef struct MeterMode_ {
73 Meter_Draw draw;
74 const char* uiName;
75 int h;
76} MeterMode;
Hisham Muhammada9c0ea32011-03-22 20:37:08 +000077
Hisham Muhammad33113fe2006-04-10 20:40:38 +000078typedef enum {
79 CUSTOM_METERMODE = 0,
80 BAR_METERMODE,
81 TEXT_METERMODE,
Hisham Muhammad33113fe2006-04-10 20:40:38 +000082 GRAPH_METERMODE,
83 LED_METERMODE,
Hisham Muhammad33113fe2006-04-10 20:40:38 +000084 LAST_METERMODE
85} MeterModeId;
86
Hisham Muhammad00b324b2012-12-05 15:12:20 +000087typedef struct GraphData_ {
88 struct timeval time;
89 double values[METER_BUFFER_LEN];
90} GraphData;
91
Hisham Muhammad00b324b2012-12-05 15:12:20 +000092extern MeterClass Meter_class;
Hisham Muhammadd6231ba2006-03-04 18:16:49 +000093
Zev Weiss7b7822b2020-09-02 02:38:44 -050094Meter* Meter_new(struct ProcessList_* pl, int param, MeterClass* type);
Hisham Muhammadd6231ba2006-03-04 18:16:49 +000095
Zev Weiss7b7822b2020-09-02 02:38:44 -050096int Meter_humanUnit(char* buffer, unsigned long int value, int size);
Christian Hesse6f58fbc2015-06-12 09:50:55 +020097
Zev Weiss7b7822b2020-09-02 02:38:44 -050098void Meter_delete(Object* cast);
Hisham Muhammadd6231ba2006-03-04 18:16:49 +000099
Zev Weiss7b7822b2020-09-02 02:38:44 -0500100void Meter_setCaption(Meter* this, const char* caption);
Hisham Muhammadd6231ba2006-03-04 18:16:49 +0000101
Zev Weiss7b7822b2020-09-02 02:38:44 -0500102void Meter_setMode(Meter* this, int modeIndex);
Hisham Muhammadd6231ba2006-03-04 18:16:49 +0000103
Zev Weiss7b7822b2020-09-02 02:38:44 -0500104ListItem* Meter_toListItem(Meter* this, bool moving);
Hisham Muhammadd6231ba2006-03-04 18:16:49 +0000105
Hisham Muhammadda23c8c2008-03-09 08:58:38 +0000106extern MeterMode* Meter_modes[];
107
Hisham Muhammad6d90e582014-02-27 16:35:22 -0300108extern int BlankMeter_attributes[];
109
110extern MeterClass BlankMeter_class;
111
Hisham Muhammadd6231ba2006-03-04 18:16:49 +0000112#endif