mirror of
				https://github.com/YACReader/yacreader
				synced 2025-10-31 00:04:26 -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
 |