/*************************************************************************** * Copyright (C) 2006 by Pino Toscano * * * * This program 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. * ***************************************************************************/ #ifndef _KDJVU_ #define _KDJVU_ #include #include #include #include #include #include #include class QDomDocument; class QFile; #ifndef MINIEXP_H typedef struct miniexp_s* miniexp_t; #endif /** * @brief Qt (KDE) encapsulation of the DjVuLibre */ class KDjVu { public: KDjVu(); ~KDjVu(); /** * A DjVu page. */ class Page { friend class KDjVu; public: ~Page(); int width() const; int height() const; int dpi() const; int orientation() const; private: Page(); int m_width; int m_height; int m_dpi; int m_orientation; }; /** * The base implementation for a DjVu link. */ class Link { friend class KDjVu; public: virtual ~Link(); enum LinkType { PageLink, UrlLink }; enum LinkArea { UnknownArea, RectArea, EllipseArea, PolygonArea }; virtual int type() const = 0; LinkArea areaType() const; QPoint point() const; QSize size() const; QPolygon polygon() const; private: LinkArea m_area; QPoint m_point; QSize m_size; QPolygon m_poly; }; /** * A link to reach a page of a DjVu document. */ class PageLink : public Link { friend class KDjVu; public: virtual int type() const; QString page() const; private: PageLink(); QString m_page; }; /** * A DjVu link to open an external Url. */ class UrlLink : public Link { friend class KDjVu; public: virtual int type() const; QString url() const; private: UrlLink(); QString m_url; }; /** * The base implementation for a DjVu annotation. */ class Annotation { friend class KDjVu; public: virtual ~Annotation(); enum AnnotationType { TextAnnotation, LineAnnotation }; virtual int type() const = 0; QPoint point() const; QString comment() const; void setComment( const QString &comment ); virtual QColor color() const; virtual void setColor( const QColor &color ); protected: Annotation( miniexp_t anno ); miniexp_t m_anno; QPoint m_point; }; /** * A DjVu text annotation. */ class TextAnnotation : public Annotation { friend class KDjVu; public: virtual int type() const; virtual QColor color() const; virtual void setColor( const QColor &color ); QSize size() const; bool inlineText() const; private: TextAnnotation( miniexp_t anno ); QSize m_size; bool m_inlineText; }; /** * A DjVu line annotation. */ class LineAnnotation : public Annotation { friend class KDjVu; public: virtual int type() const; virtual QColor color() const; virtual void setColor( const QColor &color ); QPoint point2() const; bool isArrow() const; int width() const; void setWidth( int width ); private: LineAnnotation( miniexp_t anno ); QPoint m_point2; bool m_isArrow; miniexp_t m_width; }; /** * A DjVu text entity. */ class TextEntity { friend class KDjVu; public: ~TextEntity(); QString text() const; QRect rect() const; private: TextEntity(); QString m_text; QRect m_rect; }; /** * Opens the file \p fileName, closing the old one if necessary. */ bool openFile( const QString & fileName ); /** * Close the file currently opened, if any. */ void closeFile(); /** * The pages of the current document, or an empty vector otherwise. * \note KDjVu handles the pages, so you don't need to delete them manually * \return a vector with the pages of the current document */ const QVector &pages() const; /** * Get the metadata for the specified \p key, or a null variant otherwise. */ QVariant metaData( const QString & key ) const; /** * Get an XML document with the bookmarks of the current document (if any). * The XML will look like this: * \verbatim * * * * ... * * * \endverbatim */ const QDomDocument * documentBookmarks() const; /** * Reads the links and the annotations for the page \p pageNum * * For both \p links and \p annotations , you can pass either a valid pointer * (in case you want to extract that kind of information), or a null pointer * (if you don't want that information). */ void linksAndAnnotationsForPage( int pageNum, QList *links, QList *annotations ) const; /** * Check if the image for the specified \p page with the specified * \p width, \p height and \p rotation is already in cache, and returns * it. If not, a null image is returned. */ QImage image( int page, int width, int height, int rotation ); /** * Export the currently open document as PostScript file \p fileName. * \returns whether the exporting was successful */ bool exportAsPostScript( const QString & fileName, const QList& pageList ) const; /** * Export the currently open document as PostScript file. * \returns whether the exporting was successful */ bool exportAsPostScript( QFile* file, const QList& pageList ) const; /** * Return the list of the text entities for the specified \p page, that matches the * specified \p granularity. */ QList textEntities( int page, const QString & granularity ) const; /** * Enable or disable the internal rendered pages cache. */ void setCacheEnabled( bool enable ); /** * \returns whether the internal rendered pages cache is enabled */ bool isCacheEnabled() const; /** * Return the page number of the page whose title is \p name. */ int pageNumber( const QString & name ) const; private: class Private; Private * const d; }; #endif