/*
Copyright 2013 Adam Reichold
This file is part of qpdfview.
qpdfview is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
qpdfview is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with qpdfview. If not, see .
*/
#ifndef PDFMODEL_H
#define PDFMODEL_H
#include
#include
namespace Poppler
{
class Annotation;
class Document;
class FormField;
class Page;
}
#include "model.h"
namespace Model
{
class PDFAnnotation : public Annotation
{
friend class PDFPage;
public:
~PDFAnnotation();
QRectF boundary() const;
QString contents() const;
QDialog* showDialog(const QPoint& screenPos);
private:
PDFAnnotation(QMutex* mutex, Poppler::Annotation* annotation);
mutable QMutex* m_mutex;
Poppler::Annotation* m_annotation;
};
class PDFFormField : public FormField
{
friend class PDFPage;
public:
~PDFFormField();
QRectF boundary() const;
QString name() const;
QDialog* showDialog(const QPoint& screenPos);
private:
PDFFormField(QMutex* mutex, Poppler::FormField* formField);
mutable QMutex* m_mutex;
Poppler::FormField* m_formField;
};
class PDFPage : public Page
{
Q_DECLARE_TR_FUNCTIONS(PDFPage)
friend class PDFDocument;
public:
~PDFPage();
QSizeF size() const;
QImage render(qreal horizontalResolution, qreal verticalResolution, Rotation rotation, const QRect& boundingRect) const;
QList< Link* > links() const;
QString text(const QRectF &rect) const;
QList< QRectF > search(const QString &text, bool matchCase) const;
QList< Annotation* > annotations() const;
bool canAddAndRemoveAnnotations() const;
Annotation* addTextAnnotation(const QRectF& boundary);
Annotation* addHighlightAnnotation(const QRectF& boundary);
void removeAnnotation(Annotation* annotation);
QList< FormField* > formFields() const;
private:
PDFPage(QMutex* mutex, Poppler::Page* page);
mutable QMutex* m_mutex;
Poppler::Page* m_page;
};
class PDFDocument : public Document
{
Q_DECLARE_TR_FUNCTIONS(PDFDocument)
friend class PDFDocumentLoader;
public:
~PDFDocument();
int numberOfPages() const;
Page* page(int index) const;
bool isLocked() const;
bool unlock(const QString& password);
QStringList saveFilter() const;
bool canSave() const;
bool save(const QString& filePath, bool withChanges) const;
bool canBePrinted() const;
void setAntialiasing(bool on);
void setTextAntialiasing(bool on);
void setTextHinting(bool on);
void setOverprintPreview(bool on);
void setPaperColor(const QColor& paperColor);
void loadOutline(QStandardItemModel *outlineModel) const;
void loadProperties(QStandardItemModel *propertiesModel) const;
void loadFonts(QStandardItemModel* fontsModel) const;
private:
PDFDocument(Poppler::Document* document);
mutable QMutex m_mutex;
Poppler::Document* m_document;
};
class PDFDocumentLoader : public QObject, DocumentLoader
{
Q_OBJECT
Q_INTERFACES(Model::DocumentLoader)
#if QT_VERSION >= QT_VERSION_CHECK(5,0,0)
Q_PLUGIN_METADATA(IID "local.qpdfview.DocumentLoader")
#endif // QT_VERSION
public:
PDFDocumentLoader(QObject* parent = 0);
Document* loadDocument(const QString& filePath) const;
};
}
#endif // PDFMODEL_H