okular/core/link.h
Enrico Ros 93c1d3845d Implemented history (implementation is inside Document. actions (2) are in
Part). Implemented 'history (xpdf's LinkAction) links'. History depth is
 100 steps by default (this is enough for sure, clicking 100 times on a
 button is not an easy task :-).

Minor issues (removed half TODOs in code, all FIXMEs are already removed):
Invoke mailer on 'mailto:' links inst instead of konqueror.
Actions cleanup: disable actions like 'print', 'preview', 'save to..', etc
 when there isn't an active document. Added history actions to the toolbar
 in place of the 'prev_page' and 'next_page' ones. Fixed open+open_recent
 action tooltip and behavior.
Move definition and implementation of PagePainter class to ui/pagepainter
 from core/page.
Valgrinded and leakchecked (2 memory leaks spotted and fixed (missing
 contents deletion in KPDFGeneratorThread and missing deletion of
 PixmapRequests on cancel in Document::requestPixmaps())).

svn path=/trunk/kdegraphics/kpdf/; revision=382960
2005-01-27 17:31:07 +00:00

113 lines
3.6 KiB
C++

/***************************************************************************
* 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 of the License, or *
* (at your option) any later version. *
***************************************************************************/
#ifndef _KPDF_LINK_H_
#define _KPDF_LINK_H_
#include <qstring.h>
#include <qrect.h>
#include "core/document.h" // for DocumentViewport
/**
* @short Encapsulates data that describes a link.
*
* This is the base class for links. It makes mandatory for inherited
* widgets to reimplement the 'linkType' method and return the type of
* the link described by the reimplemented class.
*/
class KPDFLink
{
public:
// get link type (inherited classes mustreturn an unique identifier)
enum LinkType { Goto, Execute, Browse, Action, Movie };
virtual LinkType linkType() const = 0;
// virtual destructor (remove warnings)
virtual ~KPDFLink();
};
/** Goto: a viewport and maybe a reference to an external filename **/
class KPDFLinkGoto : public KPDFLink
{
public:
// query for goto parameters
bool isExternal() const { return !m_extFileName.isEmpty(); }
const QString & fileName() const { return m_extFileName; }
const DocumentViewport & destViewport() const { return m_vp; }
// create a KPDFLink_Goto
KPDFLinkGoto( QString extFileName, const DocumentViewport & vp ) { m_extFileName = extFileName; m_vp = vp; }
LinkType linkType() const { return Goto; }
private:
QString m_extFileName;
DocumentViewport m_vp;
};
/** Execute: filename and parameters to execute **/
class KPDFLinkExecute : public KPDFLink
{
public:
// query for filename / parameters
const QString & fileName() const { return m_fileName; }
const QString & parameters() const { return m_parameters; }
// create a KPDFLink_Execute
KPDFLinkExecute( const QString & file, const QString & params ) { m_fileName = file; m_parameters = params; }
LinkType linkType() const { return Execute; }
private:
QString m_fileName;
QString m_parameters;
};
/** Browse: an URL to open, ranging from 'http://' to 'mailto:' etc.. **/
class KPDFLinkBrowse : public KPDFLink
{
public:
// query for URL
const QString & url() const { return m_url; }
// create a KPDFLink_Browse
KPDFLinkBrowse( const QString &url ) { m_url = url; }
LinkType linkType() const { return Browse; }
private:
QString m_url;
};
/** Action: contains an action to perform on document / kpdf **/
class KPDFLinkAction : public KPDFLink
{
public:
// define types of actions
enum ActionType { PageFirst, PagePrev, PageNext, PageLast, HistoryBack, HistoryForward, Quit, Find, GoToPage };
// query for action type
ActionType actionType() const { return m_type; }
// create a KPDFLink_Action
KPDFLinkAction( enum ActionType actionType ) { m_type = actionType; }
LinkType linkType() const { return Action; }
private:
ActionType m_type;
};
/** Movie: Not yet defined -> think renaming to 'Media' link **/
class KPDFLinkMovie : public KPDFLink
// TODO this (Movie link)
{
public:
KPDFLinkMovie() {};
LinkType linkType() const { return Movie; }
};
#endif