FemaLocalSoftware/pagingstyle2.cpp
Lopata PC 9e459078e1 SensorTab all Done
paginationBar Done
2024-12-16 11:38:04 +03:00

67 lines
1.8 KiB
C++

#include "pagingstyle2.h"
void PagingStyle2::reCacheNumbers() {
curCacheNumbers.clear();
int pageSize = getPageSize();
if (pageSize < 8) {
for (int i = 0; i < pageSize; i++) {
curCacheNumbers << i + 1;
}
return;
}
bool leftEllipsisVisible = false;
bool rightEllipsisVisible = false;
int leftLimitNumber = 1 + 2;
int rightLimitNumber = pageSize - 2;
//put 1
curCacheNumbers << 1;
int currentLeftEdge = curSelectNumber - 1; //display 1 number side of left
int currentRightEdge = curSelectNumber + 1;
if (currentLeftEdge > leftLimitNumber) {
curCacheNumbers << -1;
leftEllipsisVisible = true;
} else {
curCacheNumbers << 2;
}
for (int k = qMax(leftLimitNumber, currentLeftEdge); k <= qMin(rightLimitNumber, currentRightEdge); k++) {
curCacheNumbers << k;
}
if (currentRightEdge < rightLimitNumber) {
curCacheNumbers << -1;
rightEllipsisVisible = true;
} else {
curCacheNumbers << pageSize - 1;
}
curCacheNumbers << pageSize;
int minSize = minDisplaySize();
Q_ASSERT_X(minSize <= 7, "paging style 2", "paging style 2 min size need <= 7");
if (curCacheNumbers.size() < minSize) {
int remaining = minSize - curCacheNumbers.size();
if (leftEllipsisVisible && !rightEllipsisVisible) {
for (int i = 0; i < remaining; i++) {
curCacheNumbers.insert(2, curCacheNumbers.at(2) - 1);
}
} else if (!leftEllipsisVisible && rightEllipsisVisible) {
for (int i = 0; i < remaining; i++) {
curCacheNumbers.insert(curCacheNumbers.size() - 2, curCacheNumbers.at(curCacheNumbers.size() - 3) + 1);
}
}
}
}
int PagingStyle2::minDisplaySize() const {
return 7;
}