~ubuntu-branches/ubuntu/dapper/htop/dapper

« back to all changes in this revision

Viewing changes to MetersListBox.c

  • Committer: Bazaar Package Importer
  • Author(s): Bartosz Fenski
  • Date: 2004-11-27 10:10:17 UTC
  • mfrom: (1.1.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20041127101017-vwknw2ipfvxchno4
Tags: 0.5-1
* New upstream version.
  - fixes problem with wrongly displayed CPU bar (Closes: #283212)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
 
 
2
#include "MetersListBox.h"
 
3
 
 
4
#include "ListBox.h"
 
5
#include "Settings.h"
 
6
#include "ScreenManager.h"
 
7
 
 
8
#include "debug.h"
 
9
#include <assert.h>
 
10
 
 
11
/*{
 
12
 
 
13
typedef struct MetersListBox_ {
 
14
   ListBox super;
 
15
 
 
16
   Settings* settings;
 
17
   TypedVector* meters;
 
18
   ScreenManager* scr;
 
19
} MetersListBox;
 
20
 
 
21
}*/
 
22
 
 
23
MetersListBox* MetersListBox_new(Settings* settings, char* header, TypedVector* meters, ScreenManager* scr) {
 
24
   MetersListBox* this = (MetersListBox*) malloc(sizeof(MetersListBox));
 
25
   ListBox* super = (ListBox*) this;
 
26
   ListBox_init(super, 1, 1, 1, 1, LISTITEM_CLASS, true);
 
27
   ((Object*)this)->delete = MetersListBox_delete;
 
28
 
 
29
   this->settings = settings;
 
30
   this->meters = meters;
 
31
   this->scr = scr;
 
32
   super->eventHandler = MetersListBox_eventHandler;
 
33
   ListBox_setHeader(super, RichString_quickString(CRT_colors[PANEL_HEADER_FOCUS], header));
 
34
   for (int i = 0; i < TypedVector_size(meters); i++) {
 
35
      Meter* meter = (Meter*) TypedVector_get(meters, i);
 
36
      ListBox_add(super, (Object*) Meter_toListItem(meter));
 
37
   }
 
38
   return this;
 
39
}
 
40
 
 
41
void MetersListBox_delete(Object* object) {
 
42
   ListBox* super = (ListBox*) object;
 
43
   MetersListBox* this = (MetersListBox*) object;
 
44
   ListBox_done(super);
 
45
   free(this);
 
46
}
 
47
 
 
48
HandlerResult MetersListBox_eventHandler(ListBox* super, int ch) {
 
49
   MetersListBox* this = (MetersListBox*) super;
 
50
   
 
51
   int selected = ListBox_getSelectedIndex(super);
 
52
   HandlerResult result = IGNORED;
 
53
 
 
54
   switch(ch) {
 
55
      case KEY_F(4):
 
56
      case 't':
 
57
      {
 
58
         Meter* meter = (Meter*) TypedVector_get(this->meters, selected);
 
59
         MeterMode mode = ++(meter->mode);
 
60
         if (mode == LAST_METERMODE)
 
61
            mode = 1; // skip mode 0, "unset"
 
62
         Meter_setMode(meter, mode);
 
63
         ListBox_set(super, selected, (Object*) Meter_toListItem(meter));
 
64
         result = HANDLED;
 
65
         break;
 
66
      }
 
67
      case KEY_F(7):
 
68
      case '[':
 
69
      case '-':
 
70
      {
 
71
         TypedVector_moveUp(this->meters, selected);
 
72
         ListBox_moveSelectedUp(super);
 
73
         result = HANDLED;
 
74
         break;
 
75
      }
 
76
      case KEY_F(8):
 
77
      case ']':
 
78
      case '+':
 
79
      {
 
80
         TypedVector_moveDown(this->meters, selected);
 
81
         ListBox_moveSelectedDown(super);
 
82
         result = HANDLED;
 
83
         break;
 
84
      }
 
85
      case KEY_F(9):
 
86
      case KEY_DC:
 
87
      {
 
88
         if (selected < TypedVector_size(this->meters)) {
 
89
            TypedVector_remove(this->meters, selected);
 
90
            ListBox_remove(super, selected);
 
91
         }
 
92
         result = HANDLED;
 
93
         break;
 
94
      }
 
95
   }
 
96
   if (result == HANDLED) {
 
97
      Header* header = this->settings->header;
 
98
      Header_calculateHeight(header);
 
99
      Header_draw(header);
 
100
      ScreenManager_resize(this->scr, this->scr->x1, header->height, this->scr->x2, this->scr->y2);
 
101
   }
 
102
   return result;
 
103
}