72 lines
2.0 KiB
C++
72 lines
2.0 KiB
C++
|
#include "pagingstyle1.h"
|
||
|
|
||
|
void PagingStyle1::reCacheNumbers() {
|
||
|
|
||
|
curCacheNumbers.clear();
|
||
|
|
||
|
int pageSize = getPageSize();
|
||
|
|
||
|
if (pageSize < 10) {
|
||
|
for (int i = 0; i < pageSize; i++) {
|
||
|
curCacheNumbers << i + 1;
|
||
|
}
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
bool leftEllipsisVisible = false;
|
||
|
bool rightEllipsisVisible = false;
|
||
|
|
||
|
int leftLimitNumber = 1 + 3; //max display 4 number
|
||
|
int rightLimitNumber = pageSize - 3;
|
||
|
|
||
|
//left put 1,2
|
||
|
curCacheNumbers << 1 << 2;
|
||
|
|
||
|
int currentLeftEdge = curSelectNumber - 2; //display 2 number side of left
|
||
|
int currentRightEdge = curSelectNumber + 2;
|
||
|
|
||
|
//number 3 condition
|
||
|
if (currentLeftEdge > leftLimitNumber) {
|
||
|
curCacheNumbers << -1;
|
||
|
leftEllipsisVisible = true;
|
||
|
} else {
|
||
|
curCacheNumbers << 3;
|
||
|
}
|
||
|
|
||
|
//place 2 number to current selected number side of left and right
|
||
|
for (int k = qMax(leftLimitNumber, currentLeftEdge); k <= qMin(rightLimitNumber, currentRightEdge); k++) {
|
||
|
curCacheNumbers << k;
|
||
|
}
|
||
|
|
||
|
//number pageSize - 2 condition
|
||
|
if (currentRightEdge < rightLimitNumber) {
|
||
|
curCacheNumbers << -1;
|
||
|
rightEllipsisVisible = true;
|
||
|
} else {
|
||
|
curCacheNumbers << pageSize - 2;
|
||
|
}
|
||
|
|
||
|
//put pageSize-1, pageSize
|
||
|
curCacheNumbers << pageSize - 1;
|
||
|
curCacheNumbers << pageSize;
|
||
|
|
||
|
int minSize = minDisplaySize();
|
||
|
Q_ASSERT_X(minSize <= 11, "paging style 1", "paging style 1 min size need <= 11");
|
||
|
if (curCacheNumbers.size() < minSize) {
|
||
|
int remaining = minSize - curCacheNumbers.size();
|
||
|
if (leftEllipsisVisible && !rightEllipsisVisible) {
|
||
|
for (int i = 0; i < remaining; i++) {
|
||
|
curCacheNumbers.insert(3, curCacheNumbers.at(3) - 1);
|
||
|
}
|
||
|
} else if (!leftEllipsisVisible && rightEllipsisVisible) {
|
||
|
for (int i = 0; i < remaining; i++) {
|
||
|
curCacheNumbers.insert(curCacheNumbers.size() - 3, curCacheNumbers.at(curCacheNumbers.size() - 4) + 1);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
int PagingStyle1::minDisplaySize() const {
|
||
|
return 8;
|
||
|
}
|