static HandlerResult ColorsPanel_eventHandler(Panel* super, int ch) { ColorsPanel* this = (ColorsPanel*) super; HandlerResult result = IGNORED; int mark = Panel_getSelectedIndex(super); switch(ch) { case 0x0a: case 0x0d: case KEY_ENTER: case KEY_MOUSE: case KEY_RECLICK: case ' ': for (int i = 0; ColorSchemeNames[i] != NULL; i++) CheckItem_set((CheckItem*)Panel_get(super, i), false); CheckItem_set((CheckItem*)Panel_get(super, mark), true); this->settings->colorScheme = mark; result = HANDLED; } if (result == HANDLED) { this->settings->changed = true; const Header* header = this->scr->header; CRT_setColors(mark); clear(); Panel* menu = (Panel*) Vector_get(this->scr->panels, 0); Header_draw(header); RichString_setAttr(&(super->header), CRT_colors[PANEL_HEADER_FOCUS]); RichString_setAttr(&(menu->header), CRT_colors[PANEL_HEADER_UNFOCUS]); ScreenManager_resize(this->scr, this->scr->x1, header->height, this->scr->x2, this->scr->y2); } return result; }
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 void OpenFilesScreen_scan(OpenFilesScreen* htop_this, Vector* lines, IncSet* inc) { Panel* panel = htop_this->display; int idx = Panel_getSelectedIndex(panel); Panel_prune(panel); OpenFiles_ProcessData* pdata = OpenFilesScreen_getProcessData(htop_this->pid); if (pdata->error == 127) { addLine("Could not execute 'lsof'. Please make sure it is available in your $PATH.", lines, panel, IncSet_filter(inc)); } else if (pdata->error == 1) { addLine("Failed listing open files.", lines, panel, IncSet_filter(inc)); } else { OpenFiles_FileData* fdata = pdata->files; while (fdata) { char entry[1024]; sprintf(entry, "%5s %4s %10s %10s %10s %s", fdata->data['f'] ? fdata->data['f'] : "", fdata->data['t'] ? fdata->data['t'] : "", fdata->data['D'] ? fdata->data['D'] : "", fdata->data['s'] ? fdata->data['s'] : "", fdata->data['i'] ? fdata->data['i'] : "", fdata->data['n'] ? fdata->data['n'] : ""); addLine(entry, lines, panel, IncSet_filter(inc)); for (int i = 0; i < 255; i++) if (fdata->data[i]) free(fdata->data[i]); OpenFiles_FileData* old = fdata; fdata = fdata->next; free(old); } for (int i = 0; i < 255; i++) if (pdata->data[i]) free(pdata->data[i]); } free(pdata); Vector_insertionSort(lines); Vector_insertionSort(panel->items); Panel_setSelected(panel, idx); }
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; }