Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int width = 45, height = 20;
- int maxLines = MIN((height - 5) / 2, items->size); // Максимальное кол-во строк, которые можно отобразить
- int selected = 0; // Выбранный элемент
- ListItem *top = items->head, *item; // Первый отображаемый элемент в таблице, и указатель для итерации по списку
- int i = 0;
- // Выводим строки таблицы, выравнивая по левому краю
- for (item = top; item != NULL && i < maxLines; item = item->next, i++) {
- EmployeesByTopic topic = (EmployeesByTopic) item->employee;
- wprintMB(window, 4 + i * 2, 5, selected == i ? A_REVERSE : A_NORMAL, " %L7u | %L7u | %R13l ",
- topic.topicId, topic.employeesCount, topic.totalSalary);
- }
- switch (wgetch(window)) {
- case KEY_DOWN: // Скролл вниз
- if (++selected == maxLines) {
- selected = maxLines - 1;
- //item будет указывать на последний отображённый элемент в списке. Если после него что-то есть, то можно скроллить
- if (item != NULL) top = top->next;
- }
- break;
- case KEY_UP: // Скролл вверх
- if (--selected < 0) {
- selected = 0;
- if (top->prev) top = top->prev;
- }
- break;
- case 10: // ENTER
- exit = true;
- break;
- }
Add Comment
Please, Sign In to add comment