mirror of
https://github.com/JakubMelka/PDF4QT.git
synced 2024-12-28 01:00:40 +01:00
DocDiff application: finish display of differences
This commit is contained in:
parent
ddbc6a344d
commit
4243d6d9a9
@ -305,6 +305,8 @@ void DifferencesDrawInterface::drawPage(QPainter* painter,
|
||||
const pdf::PDFInteger leftPageIndex = m_mapper->getLeftPageIndex(pageIndex);
|
||||
const pdf::PDFInteger rightPageIndex = m_mapper->getRightPageIndex(pageIndex);
|
||||
|
||||
std::optional<size_t> pageMoveIndex;
|
||||
|
||||
if (leftPageIndex != -1)
|
||||
{
|
||||
for (size_t i = 0; i < differencesCount; ++i)
|
||||
@ -320,6 +322,11 @@ void DifferencesDrawInterface::drawPage(QPainter* painter,
|
||||
drawMarker(painter, pagePointToDevicePointMatrix, item.second, color, true);
|
||||
}
|
||||
}
|
||||
|
||||
if (m_diffResult->isPageMoveAddRemoveDifference(i) && m_diffResult->getLeftPage(i) == leftPageIndex)
|
||||
{
|
||||
pageMoveIndex = i;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -338,8 +345,41 @@ void DifferencesDrawInterface::drawPage(QPainter* painter,
|
||||
drawMarker(painter, pagePointToDevicePointMatrix, item.second, color, false);
|
||||
}
|
||||
}
|
||||
|
||||
if (m_diffResult->isPageMoveAddRemoveDifference(i) && m_diffResult->getRightPage(i) == rightPageIndex)
|
||||
{
|
||||
pageMoveIndex = i;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (pageMoveIndex)
|
||||
{
|
||||
QString text;
|
||||
|
||||
switch (m_diffResult->getType(*pageMoveIndex))
|
||||
{
|
||||
case pdf::PDFDiffResult::Type::PageAdded:
|
||||
text = " + ";
|
||||
break;
|
||||
|
||||
case pdf::PDFDiffResult::Type::PageRemoved:
|
||||
text = " - ";
|
||||
break;
|
||||
|
||||
case pdf::PDFDiffResult::Type::PageMoved:
|
||||
text = QString("%1🠖%2").arg(m_diffResult->getLeftPage(*pageMoveIndex) + 1).arg(m_diffResult->getRightPage(*pageMoveIndex) + 1);
|
||||
break;
|
||||
|
||||
default:
|
||||
Q_ASSERT(false);
|
||||
break;
|
||||
}
|
||||
|
||||
QColor color = getColorForIndex(*pageMoveIndex);
|
||||
QPointF targetPoint = pagePointToDevicePointMatrix.map(QPointF(5, 5));
|
||||
pdf::PDFPainterHelper::drawBubble(painter, targetPoint.toPoint(), color, text, Qt::AlignRight | Qt::AlignTop);
|
||||
}
|
||||
}
|
||||
|
||||
QColor DifferencesDrawInterface::getColorForIndex(size_t index) const
|
||||
|
@ -1180,6 +1180,16 @@ PDFInteger PDFDiffResult::getRightPage(size_t index) const
|
||||
return m_differences[index].pageIndex2;
|
||||
}
|
||||
|
||||
PDFDiffResult::Type PDFDiffResult::getType(size_t index) const
|
||||
{
|
||||
if (index >= m_differences.size())
|
||||
{
|
||||
return Type::Invalid;
|
||||
}
|
||||
|
||||
return m_differences[index].type;
|
||||
}
|
||||
|
||||
std::pair<PDFDiffResult::RectInfosIt, PDFDiffResult::RectInfosIt> PDFDiffResult::getLeftRectangles(size_t index) const
|
||||
{
|
||||
if (index >= m_differences.size())
|
||||
@ -1216,6 +1226,11 @@ std::pair<PDFDiffResult::RectInfosIt, PDFDiffResult::RectInfosIt> PDFDiffResult:
|
||||
return std::make_pair(m_rects.cend(), m_rects.cend());
|
||||
}
|
||||
|
||||
bool PDFDiffResult::isPageMoveAddRemoveDifference(size_t index) const
|
||||
{
|
||||
return getTypeFlags(index) & FLAGS_TYPE_PAGE_MOVE_ADD_REMOVE;
|
||||
}
|
||||
|
||||
bool PDFDiffResult::isPageMoveDifference(size_t index) const
|
||||
{
|
||||
return getTypeFlags(index) & FLAGS_TYPE_PAGE_MOVE;
|
||||
|
@ -96,12 +96,17 @@ public:
|
||||
/// \param index Index
|
||||
PDFInteger getRightPage(size_t index) const;
|
||||
|
||||
/// Return type of difference
|
||||
/// \param index Index
|
||||
Type getType(size_t index) const;
|
||||
|
||||
/// Returns iterator range for rectangles of "left" pages of an item
|
||||
std::pair<RectInfosIt, RectInfosIt> getLeftRectangles(size_t index) const;
|
||||
|
||||
/// Returns iterator range for rectangles of "right" pages of an item
|
||||
std::pair<RectInfosIt, RectInfosIt> getRightRectangles(size_t index) const;
|
||||
|
||||
bool isPageMoveAddRemoveDifference(size_t index) const;
|
||||
bool isPageMoveDifference(size_t index) const;
|
||||
bool isAddDifference(size_t index) const;
|
||||
bool isRemoveDifference(size_t index) const;
|
||||
@ -144,6 +149,7 @@ private:
|
||||
static constexpr uint32_t FLAGS_SHADING = uint32_t(Type::RemovedShadingContent) | uint32_t(Type::AddedShadingContent);
|
||||
|
||||
static constexpr uint32_t FLAGS_TYPE_PAGE_MOVE = uint32_t(Type::PageMoved);
|
||||
static constexpr uint32_t FLAGS_TYPE_PAGE_MOVE_ADD_REMOVE = uint32_t(Type::PageMoved) | uint32_t(Type::PageAdded) | uint32_t(Type::PageRemoved);
|
||||
static constexpr uint32_t FLAGS_TYPE_ADD = uint32_t(Type::PageAdded) | uint32_t(Type::AddedTextCharContent) | uint32_t(Type::AddedVectorGraphicContent) | uint32_t(Type::AddedImageContent) | uint32_t(Type::AddedShadingContent) | uint32_t(Type::TextAdded);
|
||||
static constexpr uint32_t FLAGS_TYPE_REMOVE = uint32_t(Type::PageRemoved) | uint32_t(Type::RemovedTextCharContent) | uint32_t(Type::RemovedVectorGraphicContent) | uint32_t(Type::RemovedImageContent) | uint32_t(Type::RemovedShadingContent) | uint32_t(Type::TextRemoved);
|
||||
static constexpr uint32_t FLAGS_TYPE_REPLACE = uint32_t(Type::TextReplaced);
|
||||
|
Loading…
Reference in New Issue
Block a user