Коммит ad50139f создал по автору OMP Education's avatar OMP Education Зафиксировано автором k.sagalakova
Просмотр файлов

[View] Improvement of the selection logic review of selected pages.



  In some cases, there was a problem where the special page index
  exceeded the total number of page counts. In the first implementation,
  there was an incorrect solution to this problem.

Co-Authored-By: default avatarKira Sagalakova <k.sagalakova@omp.ru>
владелец 324d56d8
......@@ -131,6 +131,13 @@ void DocumentMapper::_mapPages()
auto contentWidth = -1.0f;
PagePosition position;
auto maxPageIndex = m_originalPagesMap.pages.size() - 1;
if (!m_originalPagesMap.pages.empty() && !m_specialIndexes.empty()
&& m_specialIndexes.find(maxPageIndex) == m_specialIndexes.end()
&& m_originalPagesMap.pages.size() < *m_specialIndexes.rbegin()) {
m_specialIndexes.insert(maxPageIndex);
}
switch (m_orientation) {
case Qt::Vertical: {
for (auto &page : m_originalPagesMap.pages) {
......@@ -218,12 +225,14 @@ int DocumentMapper::minSpecialIndex() const
return firstMin;
return std::min(firstMin,
std::min(m_spacialRangeIndexes.begin()->first, m_documentProvider->count() - 1));
std::min(m_spacialRangeIndexes.begin()->first, m_originalPagesMap.pages.size() - 1));
}
int DocumentMapper::maxSpecialIndex() const
{
int firstMax = m_specialIndexes.empty() ? 0 : *m_specialIndexes.rbegin();
int firstMax = m_specialIndexes.empty()
? 0
: std::min(*m_specialIndexes.rbegin(), m_originalPagesMap.pages.size() - 1);
if (m_spacialRangeIndexes.empty())
return firstMax;
......@@ -231,7 +240,7 @@ int DocumentMapper::maxSpecialIndex() const
if (m_spacialRangeIndexes.size() == 1)
return std::max(firstMax,
std::min(m_spacialRangeIndexes.begin()->second,
m_documentProvider->count() - 1));
m_originalPagesMap.pages.size() - 1));
auto it = std::max_element(m_spacialRangeIndexes.begin(),
m_spacialRangeIndexes.end(),
......@@ -239,7 +248,7 @@ int DocumentMapper::maxSpecialIndex() const
return a.second < b.second;
});
return std::min(std::max(firstMax, it->second), m_documentProvider->count() - 1);
return std::min(std::max(firstMax, it->second), m_originalPagesMap.pages.size() - 1);
}
PagePosition DocumentMapper::actualPagePosition(int pageIndex) const
......
......@@ -551,14 +551,15 @@ void PdfView::setPageRange(const QString &pageRange)
std::map<int, int> indexIntervals;
std::set<int> pageIndexes;
QStringList ranges = pageRange.split(',');
for (const auto &range : ranges) {
QStringList rangeInterval = range.split('-');
if (rangeInterval.size() == 2) {
indexIntervals[std::min(rangeInterval[0].toInt(), rangeInterval[1].toInt())]
= std::max(rangeInterval[0].toInt(), rangeInterval[1].toInt());
indexIntervals[std::min(rangeInterval[0].toInt() - 1, rangeInterval[1].toInt() - 1)]
= std::max(rangeInterval[0].toInt() - 1, rangeInterval[1].toInt() - 1);
} else {
if (rangeInterval.size() == 1)
pageIndexes.insert(rangeInterval[0].toInt());
pageIndexes.insert(rangeInterval[0].toInt() - 1);
}
}
m_mapper->setSpecialPageIndexes(indexIntervals, pageIndexes);
......
Поддерживает Markdown
0% или .
You are about to add 0 people to the discussion. Proceed with caution.
Сначала завершите редактирование этого сообщения!
Пожалуйста, зарегистрируйтесь или чтобы прокомментировать