1/***************************************************************************
2 * Copyright (C) 2002 by Wilco Greven <greven@kde.org> *
3 * Copyright (C) 2008 by Pino Toscano <pino@kde.org> *
4 * *
5 * This program is free software; you can redistribute it and/or modify *
6 * it under the terms of the GNU General Public License as published by *
7 * the Free Software Foundation; either version 2 of the License, or *
8 * (at your option) any later version. *
9 ***************************************************************************/
10
11#include "extensions.h"
12
13// local includes
14#include "part.h"
15
16namespace Okular
17{
18
19/*
20 * BrowserExtension class
21 */
22BrowserExtension::BrowserExtension(Part* parent)
23 : KParts::BrowserExtension( parent ), m_part( parent )
24{
25 emit enableAction("print", true);
26 setURLDropHandlingEnabled(true);
27}
28
29
30void BrowserExtension::print()
31{
32 m_part->slotPrint();
33}
34
35
36/*
37 * OkularLiveConnectExtension class
38 */
39#define OKULAR_EVAL_RES_OBJ_NAME "__okular_object"
40#define OKULAR_EVAL_RES_OBJ "this." OKULAR_EVAL_RES_OBJ_NAME
41
42OkularLiveConnectExtension::OkularLiveConnectExtension( Part *parent )
43 : KParts::LiveConnectExtension( parent ), m_inEval( false )
44{
45}
46
47
48bool OkularLiveConnectExtension::get( const unsigned long objid, const QString &field,
49 KParts::LiveConnectExtension::Type &type,
50 unsigned long &retobjid, QString &value )
51{
52 Q_UNUSED( value )
53 retobjid = objid;
54 bool result = false;
55 if ( field == QLatin1String( "postMessage" ) )
56 {
57 type = KParts::LiveConnectExtension::TypeFunction;
58 result = true;
59 }
60 return result;
61}
62
63
64bool OkularLiveConnectExtension::put( const unsigned long objid, const QString &field, const QString &value )
65{
66 Q_UNUSED( objid )
67 if ( m_inEval )
68 {
69 if ( field == QLatin1String( OKULAR_EVAL_RES_OBJ_NAME ) )
70 m_evalRes = value;
71 return true;
72 }
73
74 return false;
75}
76
77
78bool OkularLiveConnectExtension::call( const unsigned long objid, const QString &func, const QStringList &args,
79 KParts::LiveConnectExtension::Type &type, unsigned long &retobjid, QString &value )
80{
81 retobjid = objid;
82 bool result = false;
83 if ( func == QLatin1String( "postMessage" ) )
84 {
85 type = KParts::LiveConnectExtension::TypeVoid;
86 postMessage( args );
87 value = QString();
88 result = true;
89 }
90 return result;
91}
92
93
94QString OkularLiveConnectExtension::eval( const QString &script )
95{
96 KParts::LiveConnectExtension::ArgList args;
97 args.append( qMakePair( KParts::LiveConnectExtension::TypeString, script ) );
98 m_evalRes.clear();
99 m_inEval = true;
100 emit partEvent( 0, "eval", args );
101 m_inEval = false;
102 return m_evalRes;
103}
104
105
106void OkularLiveConnectExtension::postMessage( const QStringList &args )
107{
108 QStringList arrayargs;
109 Q_FOREACH ( const QString &arg, args )
110 {
111 QString newarg = arg;
112 newarg.replace( '\'', "\\'" );
113 arrayargs.append( "\"" + newarg + "\"" );
114 }
115 const QString arrayarg = '[' + arrayargs.join( ", " ) + ']';
116 eval( "if (this.messageHandler && typeof this.messageHandler.onMessage == 'function') "
117 "{ this.messageHandler.onMessage(" + arrayarg + ") }" );
118}
119
120}
121
122#include "extensions.moc"
123
124/* kate: replace-tabs on; indent-width 4; */
125