pagination.c 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. #include "pagination.h"
  2. #include "calc.h"
  3. PageInfo pagination_paged(int totalElements, int elementsPerPage, int selectedElement)
  4. {
  5. PageInfo pageInfo;
  6. pageInfo.currentPage = (selectedElement / elementsPerPage) + 1;
  7. pageInfo.start = (pageInfo.currentPage - 1) * elementsPerPage;
  8. pageInfo.end = clamp(pageInfo.start + elementsPerPage - 1, 0, totalElements - 1);
  9. pageInfo.position = selectedElement - pageInfo.start;
  10. return pageInfo;
  11. }
  12. ContinuousPageInfo pagination_continuous_centered(int totalElements, int elementsPerPage, int selectedElement)
  13. {
  14. ContinuousPageInfo pageInfo;
  15. int halfToShow = elementsPerPage / 2;
  16. pageInfo.start = selectedElement - halfToShow;
  17. pageInfo.end = selectedElement + halfToShow;
  18. if (pageInfo.start < 0)
  19. {
  20. pageInfo.start = 0;
  21. pageInfo.end = clamp(elementsPerPage - 1, 0, totalElements - 1);
  22. }
  23. else if (pageInfo.end >= totalElements)
  24. {
  25. pageInfo.end = totalElements - 1;
  26. pageInfo.start = clamp(totalElements - elementsPerPage, 0, totalElements - 1);
  27. }
  28. pageInfo.position = selectedElement - pageInfo.start;
  29. return pageInfo;
  30. }