mirror of
https://invent.kde.org/graphics/okular
synced 2024-10-30 01:38:07 +00:00
a53a2402ca
Semi-ACK'd by Albert :)
570 lines
12 KiB
C++
570 lines
12 KiB
C++
/***************************************************************************
|
|
* Copyright (C) 2004-2005 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. *
|
|
***************************************************************************/
|
|
|
|
#include "action.h"
|
|
|
|
// kde includes
|
|
#include <KLocalizedString>
|
|
|
|
// local includes
|
|
#include "document.h"
|
|
#include "movie.h"
|
|
#include "sourcereference_p.h"
|
|
#include "sound.h"
|
|
|
|
using namespace Okular;
|
|
|
|
class Okular::ActionPrivate
|
|
{
|
|
public:
|
|
ActionPrivate()
|
|
{
|
|
}
|
|
|
|
virtual ~ActionPrivate()
|
|
{
|
|
}
|
|
|
|
QVariant m_nativeId;
|
|
};
|
|
|
|
Action::Action( ActionPrivate &dd )
|
|
: d_ptr( &dd )
|
|
{
|
|
}
|
|
|
|
Action::~Action()
|
|
{
|
|
delete d_ptr;
|
|
}
|
|
|
|
QString Action::actionTip() const
|
|
{
|
|
return QLatin1String("");
|
|
}
|
|
|
|
void Action::setNativeId( const QVariant &id )
|
|
{
|
|
Q_D( Action );
|
|
d->m_nativeId = id;
|
|
}
|
|
|
|
QVariant Action::nativeId() const
|
|
{
|
|
Q_D( const Action );
|
|
return d->m_nativeId;
|
|
}
|
|
|
|
// GotoAction
|
|
|
|
class Okular::GotoActionPrivate : public Okular::ActionPrivate
|
|
{
|
|
public:
|
|
GotoActionPrivate( const QString &fileName, const DocumentViewport &viewport )
|
|
: ActionPrivate(), m_extFileName( fileName ), m_vp( viewport )
|
|
{
|
|
}
|
|
|
|
GotoActionPrivate( const QString &fileName, const QString &namedDestination )
|
|
: ActionPrivate(), m_extFileName( fileName ), m_dest( namedDestination )
|
|
{
|
|
}
|
|
|
|
QString m_extFileName;
|
|
DocumentViewport m_vp;
|
|
QString m_dest;
|
|
};
|
|
|
|
GotoAction::GotoAction( const QString& fileName, const DocumentViewport & viewport )
|
|
: Action( *new GotoActionPrivate( fileName, viewport ) )
|
|
{
|
|
}
|
|
|
|
GotoAction::GotoAction( const QString& fileName, const QString& namedDestination )
|
|
: Action( *new GotoActionPrivate( fileName, namedDestination ) )
|
|
{
|
|
}
|
|
|
|
GotoAction::~GotoAction()
|
|
{
|
|
}
|
|
|
|
Action::ActionType GotoAction::actionType() const
|
|
{
|
|
return Goto;
|
|
}
|
|
|
|
QString GotoAction::actionTip() const
|
|
{
|
|
Q_D( const GotoAction );
|
|
return d->m_extFileName.isEmpty() ? ( d->m_vp.isValid() ? i18n( "Go to page %1", d->m_vp.pageNumber + 1 ) : QLatin1String("") ) :
|
|
i18n("Open external file");
|
|
}
|
|
|
|
bool GotoAction::isExternal() const
|
|
{
|
|
Q_D( const GotoAction );
|
|
return !d->m_extFileName.isEmpty();
|
|
}
|
|
|
|
QString GotoAction::fileName() const
|
|
{
|
|
Q_D( const GotoAction );
|
|
return d->m_extFileName;
|
|
}
|
|
|
|
DocumentViewport GotoAction::destViewport() const
|
|
{
|
|
Q_D( const GotoAction );
|
|
return d->m_vp;
|
|
}
|
|
|
|
QString GotoAction::destinationName() const
|
|
{
|
|
Q_D( const GotoAction );
|
|
return d->m_dest;
|
|
}
|
|
|
|
// ExecuteAction
|
|
|
|
class Okular::ExecuteActionPrivate : public Okular::ActionPrivate
|
|
{
|
|
public:
|
|
ExecuteActionPrivate( const QString &file, const QString & parameters )
|
|
: ActionPrivate(), m_fileName( file ), m_parameters( parameters )
|
|
{
|
|
}
|
|
|
|
QString m_fileName;
|
|
QString m_parameters;
|
|
};
|
|
|
|
ExecuteAction::ExecuteAction( const QString &file, const QString & parameters )
|
|
: Action( *new ExecuteActionPrivate( file, parameters ) )
|
|
{
|
|
}
|
|
|
|
ExecuteAction::~ExecuteAction()
|
|
{
|
|
}
|
|
|
|
Action::ActionType ExecuteAction::actionType() const
|
|
{
|
|
return Execute;
|
|
}
|
|
|
|
QString ExecuteAction::actionTip() const
|
|
{
|
|
Q_D( const Okular::ExecuteAction );
|
|
return i18n( "Execute '%1'...", d->m_fileName );
|
|
}
|
|
|
|
QString ExecuteAction::fileName() const
|
|
{
|
|
Q_D( const Okular::ExecuteAction );
|
|
return d->m_fileName;
|
|
}
|
|
|
|
QString ExecuteAction::parameters() const
|
|
{
|
|
Q_D( const Okular::ExecuteAction );
|
|
return d->m_parameters;
|
|
}
|
|
|
|
// BrowseAction
|
|
|
|
class Okular::BrowseActionPrivate : public Okular::ActionPrivate
|
|
{
|
|
public:
|
|
BrowseActionPrivate( const QUrl &url )
|
|
: ActionPrivate(), m_url( url )
|
|
{
|
|
}
|
|
|
|
QUrl m_url;
|
|
};
|
|
|
|
BrowseAction::BrowseAction(const QUrl &url )
|
|
: Action( *new BrowseActionPrivate( url ) )
|
|
{
|
|
}
|
|
|
|
BrowseAction::~BrowseAction()
|
|
{
|
|
}
|
|
|
|
Action::ActionType BrowseAction::actionType() const
|
|
{
|
|
return Browse;
|
|
}
|
|
|
|
QString BrowseAction::actionTip() const
|
|
{
|
|
Q_D( const Okular::BrowseAction );
|
|
QString source;
|
|
int row = 0, col = 0;
|
|
if ( extractLilyPondSourceReference( d->m_url, &source, &row, &col ) )
|
|
{
|
|
return sourceReferenceToolTip( source, row, col );
|
|
}
|
|
return d->m_url.toDisplayString();
|
|
}
|
|
|
|
QUrl BrowseAction::url() const
|
|
{
|
|
Q_D( const Okular::BrowseAction );
|
|
return d->m_url;
|
|
}
|
|
|
|
// DocumentAction
|
|
|
|
class Okular::DocumentActionPrivate : public Okular::ActionPrivate
|
|
{
|
|
public:
|
|
DocumentActionPrivate( enum DocumentAction::DocumentActionType documentActionType )
|
|
: ActionPrivate(), m_type( documentActionType )
|
|
{
|
|
}
|
|
|
|
DocumentAction::DocumentActionType m_type;
|
|
};
|
|
|
|
DocumentAction::DocumentAction( enum DocumentActionType documentActionType )
|
|
: Action( *new DocumentActionPrivate( documentActionType ) )
|
|
{
|
|
}
|
|
|
|
DocumentAction::~DocumentAction()
|
|
{
|
|
}
|
|
|
|
DocumentAction::DocumentActionType DocumentAction::documentActionType() const
|
|
{
|
|
Q_D( const Okular::DocumentAction );
|
|
return d->m_type;
|
|
}
|
|
|
|
Action::ActionType DocumentAction::actionType() const
|
|
{
|
|
return DocAction;
|
|
}
|
|
|
|
QString DocumentAction::actionTip() const
|
|
{
|
|
Q_D( const Okular::DocumentAction );
|
|
switch ( d->m_type )
|
|
{
|
|
case PageFirst:
|
|
return i18n( "First Page" );
|
|
case PagePrev:
|
|
return i18n( "Previous Page" );
|
|
case PageNext:
|
|
return i18n( "Next Page" );
|
|
case PageLast:
|
|
return i18n( "Last Page" );
|
|
case HistoryBack:
|
|
return i18n( "Back" );
|
|
case HistoryForward:
|
|
return i18n( "Forward" );
|
|
case Quit:
|
|
return i18n( "Quit" );
|
|
case Presentation:
|
|
return i18n( "Start Presentation" );
|
|
case EndPresentation:
|
|
return i18n( "End Presentation" );
|
|
case Find:
|
|
return i18n( "Find..." );
|
|
case GoToPage:
|
|
return i18n( "Go To Page..." );
|
|
case Close:
|
|
default: ;
|
|
}
|
|
|
|
return QString();
|
|
}
|
|
|
|
// SoundAction
|
|
|
|
class Okular::SoundActionPrivate : public Okular::ActionPrivate
|
|
{
|
|
public:
|
|
SoundActionPrivate( double volume, bool sync, bool repeat, bool mix, Okular::Sound *sound )
|
|
: ActionPrivate(), m_volume( volume ), m_sync( sync ),
|
|
m_repeat( repeat ), m_mix( mix ), m_sound( sound )
|
|
{
|
|
}
|
|
|
|
~SoundActionPrivate() override
|
|
{
|
|
delete m_sound;
|
|
}
|
|
|
|
double m_volume;
|
|
bool m_sync : 1;
|
|
bool m_repeat : 1;
|
|
bool m_mix : 1;
|
|
Okular::Sound *m_sound;
|
|
};
|
|
|
|
SoundAction::SoundAction( double volume, bool sync, bool repeat, bool mix, Okular::Sound *sound )
|
|
: Action( *new SoundActionPrivate( volume, sync, repeat, mix, sound ) )
|
|
{
|
|
}
|
|
|
|
SoundAction::~SoundAction()
|
|
{
|
|
}
|
|
|
|
Action::ActionType SoundAction::actionType() const
|
|
{
|
|
return Sound;
|
|
}
|
|
|
|
QString SoundAction::actionTip() const
|
|
{
|
|
return i18n( "Play sound..." );
|
|
}
|
|
|
|
double SoundAction::volume() const
|
|
{
|
|
Q_D( const Okular::SoundAction );
|
|
return d->m_volume;
|
|
}
|
|
|
|
bool SoundAction::synchronous() const
|
|
{
|
|
Q_D( const Okular::SoundAction );
|
|
return d->m_sync;
|
|
}
|
|
|
|
bool SoundAction::repeat() const
|
|
{
|
|
Q_D( const Okular::SoundAction );
|
|
return d->m_repeat;
|
|
}
|
|
|
|
bool SoundAction::mix() const
|
|
{
|
|
Q_D( const Okular::SoundAction );
|
|
return d->m_mix;
|
|
}
|
|
|
|
Okular::Sound *SoundAction::sound() const
|
|
{
|
|
Q_D( const Okular::SoundAction );
|
|
return d->m_sound;
|
|
}
|
|
|
|
// ScriptAction
|
|
|
|
class Okular::ScriptActionPrivate : public Okular::ActionPrivate
|
|
{
|
|
public:
|
|
ScriptActionPrivate( enum ScriptType type, const QString &script )
|
|
: ActionPrivate(), m_scriptType( type ), m_script( script )
|
|
{
|
|
}
|
|
|
|
ScriptType m_scriptType;
|
|
QString m_script;
|
|
};
|
|
|
|
ScriptAction::ScriptAction( enum ScriptType type, const QString &script )
|
|
: Action( *new ScriptActionPrivate( type, script ) )
|
|
{
|
|
}
|
|
|
|
ScriptAction::~ScriptAction()
|
|
{
|
|
}
|
|
|
|
Action::ActionType ScriptAction::actionType() const
|
|
{
|
|
return Script;
|
|
}
|
|
|
|
QString ScriptAction::actionTip() const
|
|
{
|
|
Q_D( const Okular::ScriptAction );
|
|
switch ( d->m_scriptType )
|
|
{
|
|
case JavaScript:
|
|
return i18n( "JavaScript Script" );
|
|
}
|
|
|
|
return QString();
|
|
}
|
|
|
|
ScriptType ScriptAction::scriptType() const
|
|
{
|
|
Q_D( const Okular::ScriptAction );
|
|
return d->m_scriptType;
|
|
}
|
|
|
|
QString ScriptAction::script() const
|
|
{
|
|
Q_D( const Okular::ScriptAction );
|
|
return d->m_script;
|
|
}
|
|
|
|
// MovieAction
|
|
|
|
class Okular::MovieActionPrivate : public Okular::ActionPrivate
|
|
{
|
|
public:
|
|
MovieActionPrivate( MovieAction::OperationType operation )
|
|
: ActionPrivate(), m_operation( operation ), m_annotation( nullptr )
|
|
{
|
|
}
|
|
|
|
MovieAction::OperationType m_operation;
|
|
MovieAnnotation *m_annotation;
|
|
};
|
|
|
|
MovieAction::MovieAction( OperationType operation )
|
|
: Action( *new MovieActionPrivate( operation ) )
|
|
{
|
|
}
|
|
|
|
MovieAction::~MovieAction()
|
|
{
|
|
}
|
|
|
|
Action::ActionType MovieAction::actionType() const
|
|
{
|
|
return Movie;
|
|
}
|
|
|
|
QString MovieAction::actionTip() const
|
|
{
|
|
return i18n( "Play movie..." );
|
|
}
|
|
|
|
MovieAction::OperationType MovieAction::operation() const
|
|
{
|
|
Q_D( const Okular::MovieAction );
|
|
return d->m_operation;
|
|
}
|
|
|
|
void MovieAction::setAnnotation( MovieAnnotation *annotation )
|
|
{
|
|
Q_D( Okular::MovieAction );
|
|
d->m_annotation = annotation;
|
|
}
|
|
|
|
MovieAnnotation* MovieAction::annotation() const
|
|
{
|
|
Q_D( const Okular::MovieAction );
|
|
return d->m_annotation;
|
|
}
|
|
|
|
// RenditionAction
|
|
|
|
class Okular::RenditionActionPrivate : public Okular::ActionPrivate
|
|
{
|
|
public:
|
|
RenditionActionPrivate( RenditionAction::OperationType operation, Okular::Movie *movie, enum ScriptType scriptType, const QString &script )
|
|
: ActionPrivate(), m_operation( operation ), m_movie( movie ), m_scriptType( scriptType ),
|
|
m_script( script ), m_annotation( nullptr )
|
|
{
|
|
}
|
|
|
|
|
|
RenditionAction::OperationType m_operation;
|
|
Okular::Movie *m_movie;
|
|
ScriptType m_scriptType;
|
|
QString m_script;
|
|
ScreenAnnotation *m_annotation;
|
|
};
|
|
|
|
RenditionAction::RenditionAction( OperationType operation, Okular::Movie *movie, enum ScriptType scriptType, const QString &script )
|
|
: Action( *new RenditionActionPrivate( operation, movie, scriptType, script ) )
|
|
{
|
|
}
|
|
|
|
RenditionAction::~RenditionAction()
|
|
{
|
|
}
|
|
|
|
Action::ActionType RenditionAction::actionType() const
|
|
{
|
|
return Rendition;
|
|
}
|
|
|
|
QString RenditionAction::actionTip() const
|
|
{
|
|
Q_D( const Okular::RenditionAction );
|
|
|
|
switch ( d->m_operation )
|
|
{
|
|
default:
|
|
case None:
|
|
switch ( d->m_scriptType )
|
|
{
|
|
case JavaScript:
|
|
return i18n( "JavaScript Script" );
|
|
default:
|
|
return QString();
|
|
}
|
|
case Play:
|
|
return i18n( "Play movie" );
|
|
case Stop:
|
|
return i18n( "Stop movie" );
|
|
case Pause:
|
|
return i18n( "Pause movie" );
|
|
case Resume:
|
|
return i18n( "Resume movie" );
|
|
}
|
|
}
|
|
|
|
RenditionAction::OperationType RenditionAction::operation() const
|
|
{
|
|
Q_D( const Okular::RenditionAction );
|
|
return d->m_operation;
|
|
}
|
|
|
|
Okular::Movie* RenditionAction::movie() const
|
|
{
|
|
Q_D( const Okular::RenditionAction );
|
|
return d->m_movie;
|
|
}
|
|
|
|
ScriptType RenditionAction::scriptType() const
|
|
{
|
|
Q_D( const Okular::RenditionAction );
|
|
return d->m_scriptType;
|
|
}
|
|
|
|
QString RenditionAction::script() const
|
|
{
|
|
Q_D( const Okular::RenditionAction );
|
|
return d->m_script;
|
|
}
|
|
|
|
void RenditionAction::setAnnotation( ScreenAnnotation *annotation )
|
|
{
|
|
Q_D( Okular::RenditionAction );
|
|
d->m_annotation = annotation;
|
|
}
|
|
|
|
ScreenAnnotation* RenditionAction::annotation() const
|
|
{
|
|
Q_D( const Okular::RenditionAction );
|
|
return d->m_annotation;
|
|
}
|
|
|
|
BackendOpaqueAction::BackendOpaqueAction()
|
|
: Action( *new ActionPrivate() )
|
|
{
|
|
}
|
|
|
|
Action::ActionType BackendOpaqueAction::actionType() const
|
|
{
|
|
return BackendOpaque;
|
|
}
|