2
#include "MetersListBox.h"
6
#include "ScreenManager.h"
13
typedef struct MetersListBox_ {
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;
29
this->settings = settings;
30
this->meters = meters;
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));
41
void MetersListBox_delete(Object* object) {
42
ListBox* super = (ListBox*) object;
43
MetersListBox* this = (MetersListBox*) object;
48
HandlerResult MetersListBox_eventHandler(ListBox* super, int ch) {
49
MetersListBox* this = (MetersListBox*) super;
51
int selected = ListBox_getSelectedIndex(super);
52
HandlerResult result = IGNORED;
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));
71
TypedVector_moveUp(this->meters, selected);
72
ListBox_moveSelectedUp(super);
80
TypedVector_moveDown(this->meters, selected);
81
ListBox_moveSelectedDown(super);
88
if (selected < TypedVector_size(this->meters)) {
89
TypedVector_remove(this->meters, selected);
90
ListBox_remove(super, selected);
96
if (result == HANDLED) {
97
Header* header = this->settings->header;
98
Header_calculateHeight(header);
100
ScreenManager_resize(this->scr, this->scr->x1, header->height, this->scr->x2, this->scr->y2);