_Ziens_

Навигация по списку

Apr 30th, 2020
327
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.67 KB | None | 0 0
  1. int width = 45, height = 20;
  2. int maxLines = MIN((height - 5) / 2, items->size); // Максимальное кол-во строк, которые можно отобразить
  3. int selected = 0; // Выбранный элемент
  4.  
  5. ListItem *top = items->head, *item; //  Первый отображаемый элемент в таблице, и указатель для итерации по списку
  6.  
  7.  int i = 0;
  8.         // Выводим строки таблицы, выравнивая по левому краю
  9.         for (item = top; item != NULL && i < maxLines; item = item->next, i++) {
  10.             EmployeesByTopic topic = (EmployeesByTopic) item->employee;
  11.             wprintMB(window, 4 + i * 2, 5, selected == i ? A_REVERSE : A_NORMAL, " %L7u | %L7u | %R13l ",
  12.                      topic.topicId, topic.employeesCount, topic.totalSalary);
  13.         }
  14.         switch (wgetch(window)) {
  15.             case KEY_DOWN: // Скролл вниз
  16.                 if (++selected == maxLines) {
  17.                     selected = maxLines - 1;
  18.                     //item будет указывать на последний отображённый элемент в списке. Если после него что-то есть, то можно скроллить
  19.                     if (item != NULL) top = top->next;
  20.                 }
  21.                 break;
  22.             case KEY_UP: // Скролл вверх
  23.                 if (--selected < 0) {
  24.                     selected = 0;
  25.                     if (top->prev) top = top->prev;
  26.                 }
  27.                 break;
  28.             case 10: // ENTER
  29.                 exit = true;
  30.                 break;
  31.         }
Add Comment
Please, Sign In to add comment