67 lines
1.8 KiB
C++
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;
|
||
|
}
|