mirror of
https://github.com/YACReader/yacreader
synced 2025-05-28 03:10:27 -04:00
603 lines
14 KiB
C++
603 lines
14 KiB
C++
/* poppler-link.h: qt interface to poppler
|
|
* Copyright (C) 2006, 2013, Albert Astals Cid <aacid@kde.org>
|
|
* Copyright (C) 2007-2008, 2010, Pino Toscano <pino@kde.org>
|
|
* Copyright (C) 2010, 2012, Guillermo Amaral <gamaral@kdab.com>
|
|
* Copyright (C) 2012, Tobias Koenig <tokoe@kdab.com>
|
|
* Copyright (C) 2013, Anthony Granger <grangeranthony@gmail.com>
|
|
* Adapting code from
|
|
* Copyright (C) 2004 by Enrico Ros <eros.kde@email.it>
|
|
*
|
|
* 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, or (at your option)
|
|
* any later version.
|
|
*
|
|
* This program 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 this program; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
|
|
*/
|
|
|
|
#ifndef _POPPLER_LINK_H_
|
|
#define _POPPLER_LINK_H_
|
|
|
|
#include <QtCore/QString>
|
|
#include <QtCore/QRectF>
|
|
#include <QtCore/QSharedDataPointer>
|
|
#include "poppler-export.h"
|
|
|
|
struct Ref;
|
|
class MediaRendition;
|
|
|
|
namespace Poppler {
|
|
|
|
class LinkPrivate;
|
|
class LinkGotoPrivate;
|
|
class LinkExecutePrivate;
|
|
class LinkBrowsePrivate;
|
|
class LinkActionPrivate;
|
|
class LinkSoundPrivate;
|
|
class LinkJavaScriptPrivate;
|
|
class LinkMoviePrivate;
|
|
class LinkDestinationData;
|
|
class LinkDestinationPrivate;
|
|
class LinkRenditionPrivate;
|
|
class MediaRendition;
|
|
class SoundObject;
|
|
|
|
/**
|
|
* \short A destination.
|
|
*
|
|
* The LinkDestination class represent a "destination" (in terms of visual
|
|
* viewport to be displayed) for \link Poppler::LinkGoto GoTo\endlink links,
|
|
* and items in the table of contents (TOC) of a document.
|
|
*
|
|
* Coordinates are in 0..1 range
|
|
*/
|
|
class POPPLER_QT5_EXPORT LinkDestination
|
|
{
|
|
public:
|
|
/**
|
|
* The possible kind of "viewport destination".
|
|
*/
|
|
enum Kind
|
|
{
|
|
/**
|
|
* The new viewport is specified in terms of:
|
|
* - possibile new left coordinate (see isChangeLeft() )
|
|
* - possibile new top coordinate (see isChangeTop() )
|
|
* - possibile new zoom level (see isChangeZoom() )
|
|
*/
|
|
destXYZ = 1,
|
|
destFit = 2,
|
|
destFitH = 3,
|
|
destFitV = 4,
|
|
destFitR = 5,
|
|
destFitB = 6,
|
|
destFitBH = 7,
|
|
destFitBV = 8
|
|
};
|
|
|
|
/// \cond PRIVATE
|
|
LinkDestination(const LinkDestinationData &data);
|
|
LinkDestination(const QString &description);
|
|
/// \endcond
|
|
/**
|
|
* Copy constructor.
|
|
*/
|
|
LinkDestination(const LinkDestination &other);
|
|
/**
|
|
* Destructor.
|
|
*/
|
|
~LinkDestination();
|
|
|
|
// Accessors.
|
|
/**
|
|
* The kind of destination.
|
|
*/
|
|
Kind kind() const;
|
|
/**
|
|
* Which page is the target of this destination.
|
|
*
|
|
* \note this number is 1-based, so for a 5 pages document the
|
|
* valid page numbers go from 1 to 5 (both included).
|
|
*/
|
|
int pageNumber() const;
|
|
/**
|
|
* The new left for the viewport of the target page, in case
|
|
* it is specified to be changed (see isChangeLeft() )
|
|
*/
|
|
double left() const;
|
|
double bottom() const;
|
|
double right() const;
|
|
/**
|
|
* The new top for the viewport of the target page, in case
|
|
* it is specified to be changed (see isChangeTop() )
|
|
*/
|
|
double top() const;
|
|
double zoom() const;
|
|
/**
|
|
* Whether the left of the viewport on the target page should
|
|
* be changed.
|
|
*
|
|
* \see left()
|
|
*/
|
|
bool isChangeLeft() const;
|
|
/**
|
|
* Whether the top of the viewport on the target page should
|
|
* be changed.
|
|
*
|
|
* \see top()
|
|
*/
|
|
bool isChangeTop() const;
|
|
/**
|
|
* Whether the zoom level should be changed.
|
|
*
|
|
* \see zoom()
|
|
*/
|
|
bool isChangeZoom() const;
|
|
|
|
/**
|
|
* Return a string repesentation of this destination.
|
|
*/
|
|
QString toString() const;
|
|
|
|
/**
|
|
* Return the name of this destination.
|
|
*
|
|
* \since 0.12
|
|
*/
|
|
QString destinationName() const;
|
|
|
|
/**
|
|
* Assignment operator.
|
|
*/
|
|
LinkDestination& operator=(const LinkDestination &other);
|
|
|
|
private:
|
|
QSharedDataPointer< LinkDestinationPrivate > d;
|
|
};
|
|
|
|
/**
|
|
* \short Encapsulates data that describes a link.
|
|
*
|
|
* This is the base class for links. It makes mandatory for inherited
|
|
* kind of links to reimplement the linkType() method and return the type of
|
|
* the link described by the reimplemented class.
|
|
*/
|
|
class POPPLER_QT5_EXPORT Link
|
|
{
|
|
public:
|
|
/// \cond PRIVATE
|
|
Link( const QRectF &linkArea );
|
|
/// \endcond
|
|
|
|
/**
|
|
* The possible kinds of link.
|
|
*
|
|
* Inherited classes must return an unique identifier
|
|
*/
|
|
enum LinkType
|
|
{
|
|
None, ///< Unknown link
|
|
Goto, ///< A "Go To" link
|
|
Execute, ///< A command to be executed
|
|
Browse, ///< An URL to be browsed (eg "http://poppler.freedesktop.org")
|
|
Action, ///< A "standard" action to be executed in the viewer
|
|
Sound, ///< A link representing a sound to be played
|
|
Movie, ///< An action to be executed on a movie
|
|
Rendition, ///< A rendition link \since 0.20
|
|
JavaScript ///< A JavaScript code to be interpreted \since 0.10
|
|
};
|
|
|
|
/**
|
|
* The type of this link.
|
|
*/
|
|
virtual LinkType linkType() const;
|
|
|
|
/**
|
|
* Destructor.
|
|
*/
|
|
virtual ~Link();
|
|
|
|
/**
|
|
* The area of a Page where the link should be active.
|
|
*
|
|
* \note this can be a null rect, in this case the link represents
|
|
* a general action. The area is given in 0..1 range
|
|
*/
|
|
QRectF linkArea() const;
|
|
|
|
protected:
|
|
/// \cond PRIVATE
|
|
Link( LinkPrivate &dd );
|
|
Q_DECLARE_PRIVATE( Link )
|
|
LinkPrivate *d_ptr;
|
|
/// \endcond
|
|
|
|
private:
|
|
Q_DISABLE_COPY( Link )
|
|
};
|
|
|
|
|
|
/**
|
|
* \brief Viewport reaching request.
|
|
*
|
|
* With a LinkGoto link, the document requests the specified viewport to be
|
|
* reached (aka, displayed in a viewer). Furthermore, if a file name is specified,
|
|
* then the destination refers to that document (and not to the document the
|
|
* current LinkGoto belongs to).
|
|
*/
|
|
class POPPLER_QT5_EXPORT LinkGoto : public Link
|
|
{
|
|
public:
|
|
/**
|
|
* Create a new Goto link.
|
|
*
|
|
* \param linkArea the active area of the link
|
|
* \param extFileName if not empty, the file name to be open
|
|
* \param destination the destination to be reached
|
|
*/
|
|
LinkGoto( const QRectF &linkArea, QString extFileName, const LinkDestination & destination );
|
|
/**
|
|
* Destructor.
|
|
*/
|
|
~LinkGoto();
|
|
|
|
/**
|
|
* Whether the destination is in an external document
|
|
* (i.e. not the current document)
|
|
*/
|
|
bool isExternal() const;
|
|
// query for goto parameters
|
|
/**
|
|
* The file name of the document the destination() refers to,
|
|
* or an empty string in case it refers to the current document.
|
|
*/
|
|
QString fileName() const;
|
|
/**
|
|
* The destination to reach.
|
|
*/
|
|
LinkDestination destination() const;
|
|
LinkType linkType() const;
|
|
|
|
private:
|
|
Q_DECLARE_PRIVATE( LinkGoto )
|
|
Q_DISABLE_COPY( LinkGoto )
|
|
};
|
|
|
|
/**
|
|
* \brief Generic execution request.
|
|
*
|
|
* The LinkExecute link represent a "file name" execution request. The result
|
|
* depends on the \link fileName() file name\endlink:
|
|
* - if it is a document, then it is requested to be open
|
|
* - otherwise, it represents an executable to be run with the specified parameters
|
|
*/
|
|
class POPPLER_QT5_EXPORT LinkExecute : public Link
|
|
{
|
|
public:
|
|
/**
|
|
* The file name to be executed
|
|
*/
|
|
QString fileName() const;
|
|
/**
|
|
* The parameters for the command.
|
|
*/
|
|
QString parameters() const;
|
|
|
|
/**
|
|
* Create a new Execute link.
|
|
*
|
|
* \param linkArea the active area of the link
|
|
* \param file the file name to be open, or the program to be execute
|
|
* \param params the parameters for the program to execute
|
|
*/
|
|
LinkExecute( const QRectF &linkArea, const QString & file, const QString & params );
|
|
/**
|
|
* Destructor.
|
|
*/
|
|
~LinkExecute();
|
|
LinkType linkType() const;
|
|
|
|
private:
|
|
Q_DECLARE_PRIVATE( LinkExecute )
|
|
Q_DISABLE_COPY( LinkExecute )
|
|
};
|
|
|
|
/**
|
|
* \brief An URL to browse.
|
|
*
|
|
* The LinkBrowse link holds a URL (eg 'http://poppler.freedesktop.org',
|
|
* 'mailto:john@some.org', etc) to be open.
|
|
*
|
|
* The format of the URL is specified by RFC 2396 (http://www.ietf.org/rfc/rfc2396.txt)
|
|
*/
|
|
class POPPLER_QT5_EXPORT LinkBrowse : public Link
|
|
{
|
|
public:
|
|
/**
|
|
* The URL to open
|
|
*/
|
|
QString url() const;
|
|
|
|
/**
|
|
* Create a new browse link.
|
|
*
|
|
* \param linkArea the active area of the link
|
|
* \param url the URL to be open
|
|
*/
|
|
LinkBrowse( const QRectF &linkArea, const QString &url );
|
|
/**
|
|
* Destructor.
|
|
*/
|
|
~LinkBrowse();
|
|
LinkType linkType() const;
|
|
|
|
private:
|
|
Q_DECLARE_PRIVATE( LinkBrowse )
|
|
Q_DISABLE_COPY( LinkBrowse )
|
|
};
|
|
|
|
/**
|
|
* \brief "Standard" action request.
|
|
*
|
|
* The LinkAction class represents a link that request a "standard" action
|
|
* to be performed by the viewer on the displayed document.
|
|
*/
|
|
class POPPLER_QT5_EXPORT LinkAction : public Link
|
|
{
|
|
public:
|
|
/**
|
|
* The possible types of actions
|
|
*/
|
|
enum ActionType { PageFirst = 1,
|
|
PagePrev = 2,
|
|
PageNext = 3,
|
|
PageLast = 4,
|
|
HistoryBack = 5,
|
|
HistoryForward = 6,
|
|
Quit = 7,
|
|
Presentation = 8,
|
|
EndPresentation = 9,
|
|
Find = 10,
|
|
GoToPage = 11,
|
|
Close = 12,
|
|
Print = 13 ///< \since 0.16
|
|
};
|
|
|
|
/**
|
|
* The action of the current LinkAction
|
|
*/
|
|
ActionType actionType() const;
|
|
|
|
/**
|
|
* Create a new Action link, that executes a specified action
|
|
* on the document.
|
|
*
|
|
* \param linkArea the active area of the link
|
|
* \param actionType which action should be executed
|
|
*/
|
|
LinkAction( const QRectF &linkArea, ActionType actionType );
|
|
/**
|
|
* Destructor.
|
|
*/
|
|
~LinkAction();
|
|
LinkType linkType() const;
|
|
|
|
private:
|
|
Q_DECLARE_PRIVATE( LinkAction )
|
|
Q_DISABLE_COPY( LinkAction )
|
|
};
|
|
|
|
/**
|
|
* Sound: a sound to be played.
|
|
*
|
|
* \since 0.6
|
|
*/
|
|
class POPPLER_QT5_EXPORT LinkSound : public Link
|
|
{
|
|
public:
|
|
// create a Link_Sound
|
|
LinkSound( const QRectF &linkArea, double volume, bool sync, bool repeat, bool mix, SoundObject *sound );
|
|
/**
|
|
* Destructor.
|
|
*/
|
|
virtual ~LinkSound();
|
|
|
|
LinkType linkType() const;
|
|
|
|
/**
|
|
* The volume to be used when playing the sound.
|
|
*
|
|
* The volume is in the range [ -1, 1 ], where:
|
|
* - a negative number: no volume (mute)
|
|
* - 1: full volume
|
|
*/
|
|
double volume() const;
|
|
/**
|
|
* Whether the playback of the sound should be synchronous
|
|
* (thus blocking, waiting for the end of the sound playback).
|
|
*/
|
|
bool synchronous() const;
|
|
/**
|
|
* Whether the sound should be played continuously (that is,
|
|
* started again when it ends)
|
|
*/
|
|
bool repeat() const;
|
|
/**
|
|
* Whether the playback of this sound can be mixed with
|
|
* playbacks with other sounds of the same document.
|
|
*
|
|
* \note When false, any other playback must be stopped before
|
|
* playing the sound.
|
|
*/
|
|
bool mix() const;
|
|
/**
|
|
* The sound object to be played
|
|
*/
|
|
SoundObject *sound() const;
|
|
|
|
private:
|
|
Q_DECLARE_PRIVATE( LinkSound )
|
|
Q_DISABLE_COPY( LinkSound )
|
|
};
|
|
|
|
/**
|
|
* Rendition: Rendition link.
|
|
*
|
|
* \since 0.20
|
|
*/
|
|
class POPPLER_QT5_EXPORT LinkRendition : public Link
|
|
{
|
|
public:
|
|
/**
|
|
* Describes the possible rendition actions.
|
|
*
|
|
* \since 0.22
|
|
*/
|
|
enum RenditionAction {
|
|
NoRendition,
|
|
PlayRendition,
|
|
StopRendition,
|
|
PauseRendition,
|
|
ResumeRendition
|
|
};
|
|
|
|
/**
|
|
* Create a new rendition link.
|
|
*
|
|
* \param linkArea the active area of the link
|
|
* \param rendition the media rendition object. Ownership is taken
|
|
* \param operation the numeric operation (action) (@see ::LinkRendition::RenditionOperation)
|
|
* \param script the java script code
|
|
* \param annotationReference the object reference of the screen annotation associated with this rendition action
|
|
* \since 0.22
|
|
*/
|
|
LinkRendition( const QRectF &linkArea, ::MediaRendition *rendition, int operation, const QString &script, const Ref &annotationReference );
|
|
|
|
/**
|
|
* Destructor.
|
|
*/
|
|
virtual ~LinkRendition();
|
|
|
|
LinkType linkType() const;
|
|
|
|
/**
|
|
* Returns the media rendition object if the redition provides one, @c 0 otherwise
|
|
*/
|
|
MediaRendition *rendition() const;
|
|
|
|
/**
|
|
* Returns the action that should be executed if a rendition object is provided.
|
|
*
|
|
* \since 0.22
|
|
*/
|
|
RenditionAction action() const;
|
|
|
|
/**
|
|
* The JS code that shall be executed or an empty string.
|
|
*
|
|
* \since 0.22
|
|
*/
|
|
QString script() const;
|
|
|
|
/**
|
|
* Returns whether the given @p annotation is the referenced screen annotation for this rendition @p link.
|
|
*
|
|
* \since 0.22
|
|
*/
|
|
bool isReferencedAnnotation( const ScreenAnnotation *annotation ) const;
|
|
|
|
private:
|
|
Q_DECLARE_PRIVATE( LinkRendition )
|
|
Q_DISABLE_COPY( LinkRendition )
|
|
};
|
|
|
|
/**
|
|
* JavaScript: a JavaScript code to be interpreted.
|
|
*
|
|
* \since 0.10
|
|
*/
|
|
class POPPLER_QT5_EXPORT LinkJavaScript : public Link
|
|
{
|
|
public:
|
|
/**
|
|
* Create a new JavaScript link.
|
|
*
|
|
* \param linkArea the active area of the link
|
|
* \param js the JS code to be interpreted
|
|
*/
|
|
LinkJavaScript( const QRectF &linkArea, const QString &js );
|
|
/**
|
|
* Destructor.
|
|
*/
|
|
virtual ~LinkJavaScript();
|
|
|
|
LinkType linkType() const;
|
|
|
|
/**
|
|
* The JS code
|
|
*/
|
|
QString script() const;
|
|
|
|
private:
|
|
Q_DECLARE_PRIVATE( LinkJavaScript )
|
|
Q_DISABLE_COPY( LinkJavaScript )
|
|
};
|
|
|
|
/**
|
|
* Movie: a movie to be played.
|
|
*
|
|
* \since 0.20
|
|
*/
|
|
class POPPLER_QT5_EXPORT LinkMovie : public Link
|
|
{
|
|
public:
|
|
/**
|
|
* Describes the operation to be performed on the movie.
|
|
*/
|
|
enum Operation { Play,
|
|
Stop,
|
|
Pause,
|
|
Resume
|
|
};
|
|
|
|
/**
|
|
* Create a new Movie link.
|
|
*
|
|
* \param linkArea the active area of the link
|
|
* \param operation the operation to be performed on the movie
|
|
* \param annotationTitle the title of the movie annotation identifying the movie to be played
|
|
* \param annotationReference the object reference of the movie annotation identifying the movie to be played
|
|
*
|
|
* Note: This constructor is supposed to be used by Poppler::Page only.
|
|
*/
|
|
LinkMovie( const QRectF &linkArea, Operation operation, const QString &annotationTitle, const Ref &annotationReference );
|
|
/**
|
|
* Destructor.
|
|
*/
|
|
~LinkMovie();
|
|
LinkType linkType() const;
|
|
/**
|
|
* Returns the operation to be performed on the movie.
|
|
*/
|
|
Operation operation() const;
|
|
/**
|
|
* Returns whether the given @p annotation is the referenced movie annotation for this movie @p link.
|
|
*/
|
|
bool isReferencedAnnotation( const MovieAnnotation *annotation ) const;
|
|
|
|
private:
|
|
Q_DECLARE_PRIVATE( LinkMovie )
|
|
Q_DISABLE_COPY( LinkMovie )
|
|
};
|
|
|
|
}
|
|
|
|
#endif
|