Issue #128: Create list of markup annotations

This commit is contained in:
Jakub Melka
2023-12-24 19:03:28 +01:00
parent 53849f51e1
commit 89ea815696
10 changed files with 685 additions and 52 deletions

View File

@@ -189,6 +189,114 @@ PDFAnnotation::PDFAnnotation() :
}
QString PDFAnnotation::getGUICaption() const
{
QStringList texts;
switch (getType())
{
case pdf::AnnotationType::Text:
texts << PDFTranslationContext::tr("Text");
break;
case pdf::AnnotationType::Link:
texts << PDFTranslationContext::tr("Line");
break;
case pdf::AnnotationType::FreeText:
texts << PDFTranslationContext::tr("Free Text");
break;
case pdf::AnnotationType::Line:
texts << PDFTranslationContext::tr("Line");
break;
case pdf::AnnotationType::Square:
texts << PDFTranslationContext::tr("Square");
break;
case pdf::AnnotationType::Circle:
texts << PDFTranslationContext::tr("Circle");
break;
case pdf::AnnotationType::Polygon:
texts << PDFTranslationContext::tr("Polygon");
break;
case pdf::AnnotationType::Polyline:
texts << PDFTranslationContext::tr("Polyline");
break;
case pdf::AnnotationType::Highlight:
texts << PDFTranslationContext::tr("Highlight");
break;
case pdf::AnnotationType::Underline:
texts << PDFTranslationContext::tr("Underline");
break;
case pdf::AnnotationType::Squiggly:
texts << PDFTranslationContext::tr("Squiggly");
break;
case pdf::AnnotationType::StrikeOut:
texts << PDFTranslationContext::tr("Strike Out");
break;
case pdf::AnnotationType::Stamp:
texts << PDFTranslationContext::tr("Stamp");
break;
case pdf::AnnotationType::Caret:
texts << PDFTranslationContext::tr("Caret");
break;
case pdf::AnnotationType::Ink:
texts << PDFTranslationContext::tr("Ink");
break;
case pdf::AnnotationType::Popup:
texts << PDFTranslationContext::tr("Popup");
break;
case pdf::AnnotationType::FileAttachment:
texts << PDFTranslationContext::tr("File Attachment");
break;
case pdf::AnnotationType::Sound:
texts << PDFTranslationContext::tr("Sound");
break;
case pdf::AnnotationType::Movie:
texts << PDFTranslationContext::tr("Movie");
break;
case pdf::AnnotationType::Widget:
texts << PDFTranslationContext::tr("Widget");
break;
case pdf::AnnotationType::Screen:
texts << PDFTranslationContext::tr("Screen");
break;
case pdf::AnnotationType::PrinterMark:
texts << PDFTranslationContext::tr("Printer Mark");
break;
case pdf::AnnotationType::TrapNet:
texts << PDFTranslationContext::tr("Trap Net");
break;
case pdf::AnnotationType::Watermark:
texts << PDFTranslationContext::tr("Watermark");
break;
case pdf::AnnotationType::Redact:
texts << PDFTranslationContext::tr("Redaction");
break;
case pdf::AnnotationType::Projection:
texts << PDFTranslationContext::tr("Projection");
break;
case pdf::AnnotationType::_3D:
texts << PDFTranslationContext::tr("3D");
break;
case pdf::AnnotationType::RichMedia:
texts << PDFTranslationContext::tr("Rich Media");
break;
default:
break;
}
if (isReplyTo())
{
texts << PDFTranslationContext::tr("Reply");
}
if (!getContents().isEmpty())
{
texts << getContents();
}
return texts.join(" | ");
}
void PDFAnnotation::draw(AnnotationDrawParameters& parameters) const
{
Q_UNUSED(parameters);
@@ -1634,6 +1742,25 @@ bool PDFAnnotationManager::hasAnyPageAnnotation(const std::vector<PDFInteger>& p
return std::any_of(pageIndices.cbegin(), pageIndices.cend(), std::bind(&PDFAnnotationManager::hasAnnotation, this, std::placeholders::_1));
}
bool PDFAnnotationManager::hasAnyPageAnnotation() const
{
if (!m_document)
{
return false;
}
size_t pageCount = m_document->getCatalog()->getPageCount();
for (size_t i = 0; i < pageCount; ++i)
{
if (hasAnnotation(i))
{
return true;
}
}
return false;
}
PDFFormManager* PDFAnnotationManager::getFormManager() const
{
return m_formManager;

View File

@@ -509,6 +509,7 @@ public:
virtual PDFMarkupAnnotation* asMarkupAnnotation() { return nullptr; }
virtual const PDFMarkupAnnotation* asMarkupAnnotation() const { return nullptr; }
virtual bool isReplyTo() const { return false; }
virtual QString getGUICaption() const;
/// Draws the annotation using parameters. Annotation is drawn onto painter,
/// but actual graphics can be drawn outside of annotation's rectangle.
@@ -1524,10 +1525,10 @@ public:
/// \param page Page
/// \param[in,out] annotationRectangle Input/output annotation rectangle
QTransform prepareTransformations(const QTransform& pagePointToDevicePointMatrix,
QPaintDevice* device,
const PDFAnnotation::Flags annotationFlags,
const PDFPage* page,
QRectF& annotationRectangle) const;
QPaintDevice* device,
const PDFAnnotation::Flags annotationFlags,
const PDFPage* page,
QRectF& annotationRectangle) const;
/// Returns current appearance stream for given page annotation
/// \param pageAnnotation Page annotation
@@ -1549,6 +1550,9 @@ public:
/// Returns true, if any page in the given indices has annotation
bool hasAnyPageAnnotation(const std::vector<PDFInteger>& pageIndices) const;
/// Returns true, if any page in the document has annotation
bool hasAnyPageAnnotation() const;
protected:
void drawWidgetAnnotationHighlight(QRectF annotationRectangle,
const PDFAnnotation* annotation,