GUI: fixed issues with result list scrolling and paging
This commit is contained in:
@@ -49,8 +49,9 @@ static PlainToRichHtReslist g_hiliter;
|
||||
ResListPager::ResListPager(int pagesize)
|
||||
: m_pagesize(pagesize),
|
||||
m_newpagesize(pagesize),
|
||||
m_resultsInCurrentPage(0),
|
||||
m_winfirst(-1),
|
||||
m_hasNext(false),
|
||||
m_hasNext(true),
|
||||
m_hiliter(&g_hiliter)
|
||||
{
|
||||
}
|
||||
@@ -71,12 +72,19 @@ void ResListPager::resultPageNext()
|
||||
} else {
|
||||
m_winfirst += m_respage.size();
|
||||
}
|
||||
// Get the next page of results.
|
||||
// Get the next page of results. Note that we look ahead by one to
|
||||
// determine if there is actually a next page
|
||||
vector<ResListEntry> npage;
|
||||
int pagelen = m_docSource->getSeqSlice(m_winfirst, m_pagesize, npage);
|
||||
int pagelen = m_docSource->getSeqSlice(m_winfirst, m_pagesize + 1, npage);
|
||||
|
||||
// If page was truncated, there is no next
|
||||
m_hasNext = (pagelen == m_pagesize);
|
||||
m_hasNext = (pagelen == m_pagesize + 1);
|
||||
|
||||
// Get rid of the possible excess result
|
||||
if (pagelen == m_pagesize + 1) {
|
||||
npage.resize(m_pagesize);
|
||||
pagelen--;
|
||||
}
|
||||
|
||||
if (pagelen <= 0) {
|
||||
// No results ? This can only happen on the first page or if the
|
||||
@@ -94,6 +102,7 @@ void ResListPager::resultPageNext()
|
||||
}
|
||||
return;
|
||||
}
|
||||
m_resultsInCurrentPage = pagelen;
|
||||
m_respage = npage;
|
||||
}
|
||||
|
||||
|
||||
@@ -44,7 +44,7 @@ public:
|
||||
{
|
||||
m_pagesize = m_newpagesize;
|
||||
m_winfirst = winfirst;
|
||||
m_hasNext = false;
|
||||
m_hasNext = true;
|
||||
m_docSource = src;
|
||||
m_respage.clear();
|
||||
}
|
||||
@@ -78,7 +78,7 @@ public:
|
||||
}
|
||||
void resultPageBack() {
|
||||
if (m_winfirst <= 0) return;
|
||||
m_winfirst -= 2 * m_pagesize;
|
||||
m_winfirst -= m_resultsInCurrentPage + m_pagesize;
|
||||
resultPageNext();
|
||||
}
|
||||
void resultPageNext();
|
||||
@@ -120,6 +120,7 @@ public:
|
||||
private:
|
||||
int m_pagesize;
|
||||
int m_newpagesize;
|
||||
int m_resultsInCurrentPage;
|
||||
// First docnum (from docseq) in current page
|
||||
int m_winfirst;
|
||||
bool m_hasNext;
|
||||
|
||||
Reference in New Issue
Block a user