~ubuntu-branches/ubuntu/saucy/htop/saucy-proposed

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
}