static HandlerResult MetersPanel_eventHandler(Panel* super, int ch) { MetersPanel* this = (MetersPanel*) super; int selected = Panel_getSelectedIndex(super); HandlerResult result = IGNORED; switch(ch) { case 0x0a: case 0x0d: case KEY_ENTER: case KEY_F(4): case 't': { Meter* meter = (Meter*) Vector_get(this->meters, selected); int mode = meter->mode + 1; if (mode == LAST_METERMODE) mode = 1; Meter_setMode(meter, mode); Panel_set(super, selected, (Object*) Meter_toListItem(meter)); result = HANDLED; break; } case KEY_F(7): case '[': case '-': { Vector_moveUp(this->meters, selected); Panel_moveSelectedUp(super); result = HANDLED; break; } case KEY_F(8): case ']': case '+': { Vector_moveDown(this->meters, selected); Panel_moveSelectedDown(super); result = HANDLED; break; } case KEY_F(9): case KEY_DC: { if (selected < Vector_size(this->meters)) { Vector_remove(this->meters, selected); Panel_remove(super, selected); } result = HANDLED; break; } } if (result == HANDLED) { Header* header = this->settings->header; this->settings->changed = true; Header_calculateHeight(header); Header_draw(header); ScreenManager_resize(this->scr, this->scr->x1, header->height, this->scr->x2, this->scr->y2); } return result; }
static HandlerResult ColumnsPanel_eventHandler(Panel* super, int ch) { ColumnsPanel* const this = (ColumnsPanel*) super; int selected = Panel_getSelectedIndex(super); HandlerResult result = IGNORED; int size = Panel_size(super); switch(ch) { case 0x0a: case 0x0d: case KEY_ENTER: case KEY_MOUSE: { if (selected < size - 1) { this->moving = !(this->moving); ((ListItem*)Panel_getSelected(super))->moving = this->moving; result = HANDLED; } break; } case KEY_UP: { if (!this->moving) { break; } /* else fallthrough */ } case KEY_F(7): case '[': case '-': { if (selected < size - 1) Panel_moveSelectedUp(super); result = HANDLED; break; } case KEY_DOWN: { if (!this->moving) { break; } /* else fallthrough */ } case KEY_F(8): case ']': case '+': { if (selected < size - 2) Panel_moveSelectedDown(super); result = HANDLED; break; } case KEY_F(9): case KEY_DC: { if (selected < size - 1) { Panel_remove(super, selected); } result = HANDLED; break; } default: { if (ch < 255 && isalpha(ch)) result = Panel_selectByTyping(super, ch); if (result == BREAK_LOOP) result = IGNORED; break; } } if (result == HANDLED) ColumnsPanel_update(super); return result; }