1.1.17
by Eugene V. Lyubimkin
Import upstream version 1.0.1 |
1 |
/*
|
2 |
htop - AvailableMetersPanel.c
|
|
3 |
(C) 2004-2011 Hisham H. Muhammad
|
|
4 |
Released under the GNU GPL, see the COPYING file
|
|
5 |
in the source distribution for its full text.
|
|
6 |
*/
|
|
1.2.2
by Bartosz Fenski
Import upstream version 0.6.3 |
7 |
|
8 |
#include "AvailableMetersPanel.h" |
|
1.1.17
by Eugene V. Lyubimkin
Import upstream version 1.0.1 |
9 |
|
10 |
#include "CPUMeter.h" |
|
1.2.2
by Bartosz Fenski
Import upstream version 0.6.3 |
11 |
#include "Header.h" |
1.1.17
by Eugene V. Lyubimkin
Import upstream version 1.0.1 |
12 |
#include "ListItem.h" |
13 |
||
1.2.2
by Bartosz Fenski
Import upstream version 0.6.3 |
14 |
#include <assert.h> |
1.1.17
by Eugene V. Lyubimkin
Import upstream version 1.0.1 |
15 |
#include <stdlib.h> |
1.2.2
by Bartosz Fenski
Import upstream version 0.6.3 |
16 |
|
17 |
/*{
|
|
1.1.17
by Eugene V. Lyubimkin
Import upstream version 1.0.1 |
18 |
#include "Settings.h"
|
19 |
#include "Panel.h"
|
|
20 |
#include "ScreenManager.h"
|
|
1.2.2
by Bartosz Fenski
Import upstream version 0.6.3 |
21 |
|
22 |
typedef struct AvailableMetersPanel_ {
|
|
23 |
Panel super;
|
|
24 |
||
25 |
Settings* settings;
|
|
26 |
Panel* leftPanel;
|
|
27 |
Panel* rightPanel;
|
|
28 |
ScreenManager* scr;
|
|
29 |
} AvailableMetersPanel;
|
|
30 |
||
31 |
}*/
|
|
32 |
||
1.1.11
by David Futcher
Import upstream version 0.8 |
33 |
static void AvailableMetersPanel_delete(Object* object) { |
1.2.2
by Bartosz Fenski
Import upstream version 0.6.3 |
34 |
Panel* super = (Panel*) object; |
35 |
AvailableMetersPanel* this = (AvailableMetersPanel*) object; |
|
36 |
Panel_done(super); |
|
37 |
free(this); |
|
38 |
}
|
|
39 |
||
40 |
static inline void AvailableMetersPanel_addHeader(Header* header, Panel* panel, MeterType* type, int param, HeaderSide side) { |
|
41 |
Meter* meter = (Meter*) Header_addMeter(header, type, param, side); |
|
42 |
Panel_add(panel, (Object*) Meter_toListItem(meter)); |
|
43 |
}
|
|
44 |
||
1.1.11
by David Futcher
Import upstream version 0.8 |
45 |
static HandlerResult AvailableMetersPanel_eventHandler(Panel* super, int ch) { |
1.2.2
by Bartosz Fenski
Import upstream version 0.6.3 |
46 |
AvailableMetersPanel* this = (AvailableMetersPanel*) super; |
47 |
Header* header = this->settings->header; |
|
48 |
||
49 |
ListItem* selected = (ListItem*) Panel_getSelected(super); |
|
50 |
int param = selected->key & 0xff; |
|
51 |
int type = selected->key >> 16; |
|
52 |
HandlerResult result = IGNORED; |
|
53 |
||
54 |
switch(ch) { |
|
55 |
case KEY_F(5): |
|
56 |
case 'l': |
|
57 |
case 'L': |
|
58 |
{
|
|
59 |
AvailableMetersPanel_addHeader(header, this->leftPanel, Meter_types[type], param, LEFT_HEADER); |
|
60 |
result = HANDLED; |
|
61 |
break; |
|
62 |
}
|
|
63 |
case KEY_F(6): |
|
64 |
case 'r': |
|
65 |
case 'R': |
|
66 |
{
|
|
67 |
AvailableMetersPanel_addHeader(header, this->rightPanel, Meter_types[type], param, RIGHT_HEADER); |
|
68 |
result = HANDLED; |
|
69 |
break; |
|
70 |
}
|
|
71 |
}
|
|
72 |
if (result == HANDLED) { |
|
73 |
this->settings->changed = true; |
|
74 |
Header_calculateHeight(header); |
|
75 |
Header_draw(header); |
|
76 |
ScreenManager_resize(this->scr, this->scr->x1, header->height, this->scr->x2, this->scr->y2); |
|
77 |
}
|
|
78 |
return result; |
|
79 |
}
|
|
1.1.11
by David Futcher
Import upstream version 0.8 |
80 |
|
81 |
AvailableMetersPanel* AvailableMetersPanel_new(Settings* settings, Panel* leftMeters, Panel* rightMeters, ScreenManager* scr) { |
|
82 |
AvailableMetersPanel* this = (AvailableMetersPanel*) malloc(sizeof(AvailableMetersPanel)); |
|
83 |
Panel* super = (Panel*) this; |
|
84 |
Panel_init(super, 1, 1, 1, 1, LISTITEM_CLASS, true); |
|
85 |
((Object*)this)->delete = AvailableMetersPanel_delete; |
|
86 |
||
87 |
this->settings = settings; |
|
88 |
this->leftPanel = leftMeters; |
|
89 |
this->rightPanel = rightMeters; |
|
90 |
this->scr = scr; |
|
91 |
super->eventHandler = AvailableMetersPanel_eventHandler; |
|
92 |
||
93 |
Panel_setHeader(super, "Available meters"); |
|
94 |
for (int i = 1; Meter_types[i]; i++) { |
|
95 |
MeterType* type = Meter_types[i]; |
|
96 |
if (type != &CPUMeter) { |
|
97 |
Panel_add(super, (Object*) ListItem_new(type->uiName, i << 16)); |
|
98 |
}
|
|
99 |
}
|
|
100 |
MeterType* type = &CPUMeter; |
|
1.1.15
by Eugene V. Lyubimkin
Import upstream version 0.9 |
101 |
int cpus = settings->pl->cpuCount; |
102 |
if (cpus > 1) { |
|
1.1.11
by David Futcher
Import upstream version 0.8 |
103 |
Panel_add(super, (Object*) ListItem_new("CPU average", 0)); |
1.1.15
by Eugene V. Lyubimkin
Import upstream version 0.9 |
104 |
for (int i = 1; i <= cpus; i++) { |
1.1.11
by David Futcher
Import upstream version 0.8 |
105 |
char buffer[50]; |
106 |
sprintf(buffer, "%s %d", type->uiName, i); |
|
107 |
Panel_add(super, (Object*) ListItem_new(buffer, i)); |
|
108 |
}
|
|
109 |
} else { |
|
110 |
Panel_add(super, (Object*) ListItem_new("CPU", 1)); |
|
111 |
}
|
|
112 |
return this; |
|
113 |
}
|