blob: 34f388f41c0470111b2722bb523ffa467bc7ae08 [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
Daniel Lange079c2ab2020-10-05 09:51:32 +02006Released under the GNU GPLv2, see the COPYING file
Hisham Muhammadd6231ba2006-03-04 18:16:49 +00007in the source distribution for its full text.
8*/
9
Hisham Muhammad3383d8e2015-01-21 23:27:31 -020010#include <sys/time.h>
Hisham Muhammadd6231ba2006-03-04 18:16:49 +000011
Benny Baumanne1c96872020-09-18 19:23:04 +020012#include "ListItem.h"
13
Hugo Musso Gualandi92074012020-09-12 18:25:25 -030014#define METER_BUFFER_LEN 256
15
Hisham Muhammadd6231ba2006-03-04 18:16:49 +000016typedef struct Meter_ Meter;
17
Hisham Muhammad00b324b2012-12-05 15:12:20 +000018typedef void(*Meter_Init)(Meter*);
19typedef void(*Meter_Done)(Meter*);
20typedef void(*Meter_UpdateMode)(Meter*, int);
Explorer099dea20e2016-05-04 13:39:26 +080021typedef void(*Meter_UpdateValues)(Meter*, char*, int);
Hisham Muhammadd6231ba2006-03-04 18:16:49 +000022typedef void(*Meter_Draw)(Meter*, int, int, int);
23
Hisham Muhammad00b324b2012-12-05 15:12:20 +000024typedef struct MeterClass_ {
Christian Göttsche08d85e62020-10-04 17:55:08 +020025 const ObjectClass super;
Hisham Muhammad00b324b2012-12-05 15:12:20 +000026 const Meter_Init init;
27 const Meter_Done done;
28 const Meter_UpdateMode updateMode;
29 const Meter_Draw draw;
Explorer099dea20e2016-05-04 13:39:26 +080030 const Meter_UpdateValues updateValues;
Hisham Muhammad00b324b2012-12-05 15:12:20 +000031 const int defaultMode;
Hisham Muhammad00b324b2012-12-05 15:12:20 +000032 const double total;
Christian Göttsche08d85e62020-10-04 17:55:08 +020033 const int* const attributes;
34 const char* const name;
35 const char* const uiName;
36 const char* const caption;
37 const char* const description;
Hisham Muhammadc1e0f6e2014-01-16 01:40:47 -020038 const char maxItems;
Hisham Muhammad00b324b2012-12-05 15:12:20 +000039} MeterClass;
40
Christian Göttsche08d85e62020-10-04 17:55:08 +020041#define As_Meter(this_) ((const MeterClass*)((this_)->super.klass))
Hisham Muhammad00b324b2012-12-05 15:12:20 +000042#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 Muhammad00b324b2012-12-05 15:12:20 +000052#define Meter_attributes(this_) As_Meter(this_)->attributes
53#define Meter_name(this_) As_Meter(this_)->name
54#define Meter_uiName(this_) As_Meter(this_)->uiName
Hisham Muhammadd6231ba2006-03-04 18:16:49 +000055
56struct Meter_ {
57 Object super;
Hisham Muhammad00b324b2012-12-05 15:12:20 +000058 Meter_Draw draw;
Daniel Flanagandd334442019-10-31 11:39:12 -050059
Hisham Muhammad33113fe2006-04-10 20:40:38 +000060 char* caption;
Hisham Muhammad33113fe2006-04-10 20:40:38 +000061 int mode;
62 int param;
Hisham Muhammada9c0ea32011-03-22 20:37:08 +000063 void* drawData;
Hisham Muhammad33113fe2006-04-10 20:40:38 +000064 int h;
Hisham Muhammad3383d8e2015-01-21 23:27:31 -020065 struct ProcessList_* pl;
Christian Göttsche08d85e62020-10-04 17:55:08 +020066 char curItems;
Hisham Muhammadd6231ba2006-03-04 18:16:49 +000067 double* values;
68 double total;
Hisham Muhammadd6231ba2006-03-04 18:16:49 +000069};
70
Hisham Muhammad00b324b2012-12-05 15:12:20 +000071typedef struct MeterMode_ {
72 Meter_Draw draw;
73 const char* uiName;
74 int h;
75} MeterMode;
Hisham Muhammada9c0ea32011-03-22 20:37:08 +000076
Hisham Muhammad33113fe2006-04-10 20:40:38 +000077typedef enum {
78 CUSTOM_METERMODE = 0,
79 BAR_METERMODE,
80 TEXT_METERMODE,
Hisham Muhammad33113fe2006-04-10 20:40:38 +000081 GRAPH_METERMODE,
82 LED_METERMODE,
Hisham Muhammad33113fe2006-04-10 20:40:38 +000083 LAST_METERMODE
84} MeterModeId;
85
Hisham Muhammad00b324b2012-12-05 15:12:20 +000086typedef struct GraphData_ {
87 struct timeval time;
88 double values[METER_BUFFER_LEN];
89} GraphData;
90
Hisham Muhammad00b324b2012-12-05 15:12:20 +000091extern MeterClass Meter_class;
Hisham Muhammadd6231ba2006-03-04 18:16:49 +000092
Christian Göttsche08d85e62020-10-04 17:55:08 +020093Meter* Meter_new(struct ProcessList_* pl, int param, const MeterClass* type);
Hisham Muhammadd6231ba2006-03-04 18:16:49 +000094
Zev Weiss7b7822b2020-09-02 02:38:44 -050095int Meter_humanUnit(char* buffer, unsigned long int value, int size);
Christian Hesse6f58fbc2015-06-12 09:50:55 +020096
Zev Weiss7b7822b2020-09-02 02:38:44 -050097void Meter_delete(Object* cast);
Hisham Muhammadd6231ba2006-03-04 18:16:49 +000098
Zev Weiss7b7822b2020-09-02 02:38:44 -050099void Meter_setCaption(Meter* this, const char* caption);
Hisham Muhammadd6231ba2006-03-04 18:16:49 +0000100
Zev Weiss7b7822b2020-09-02 02:38:44 -0500101void Meter_setMode(Meter* this, int modeIndex);
Hisham Muhammadd6231ba2006-03-04 18:16:49 +0000102
Zev Weiss7b7822b2020-09-02 02:38:44 -0500103ListItem* Meter_toListItem(Meter* this, bool moving);
Hisham Muhammadd6231ba2006-03-04 18:16:49 +0000104
Hisham Muhammadda23c8c2008-03-09 08:58:38 +0000105extern MeterMode* Meter_modes[];
106
Hisham Muhammad6d90e582014-02-27 16:35:22 -0300107extern MeterClass BlankMeter_class;
108
Hisham Muhammadd6231ba2006-03-04 18:16:49 +0000109#endif