Add an interface (implemented by the Part) for controlling the really basic document viewer functionalities. This (along with a small refactor in the okular shell) gives the user the possibility to start okular with:

-p, --page <page> : to select the startup page
      --presentation : to start directly in presentation mode
implementing also KPDF wishes #134115 and #137905.

svn path=/trunk/playground/graphics/okular/; revision=619681
remotes/origin/KDE/4.0
Pino Toscano 19 years ago
parent fa3f297b06
commit 20661ff61e
  1. 43
      kdocumentviewer.h
  2. 26
      part.cpp
  3. 8
      part.h
  4. 4
      shell/CMakeLists.txt
  5. 8
      shell/main.cpp
  6. 28
      shell/shell.cpp
  7. 15
      shell/shell.h

@ -0,0 +1,43 @@
/***************************************************************************
* Copyright (C) 2007 by Pino Toscano <pino@kde.org> *
* *
* 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 _KDOCUMENTVIEWER_H_
#define _KDOCUMENTVIEWER_H_
class KUrl;
/**
* @short Abstract interface for a document viewer
*
* This interface describe briefly the basic functions of a document viewer.
*/
class KDocumentViewer
{
public:
virtual ~KDocumentViewer() {}
/**
* Open the document at the specified @p url at page @p page.
*/
virtual bool openDocument( const KUrl& url, uint page ) = 0;
/**
* Change to @p page the currently shown page.
*/
virtual void goToPage( uint page ) = 0;
/**
* Start the presentation mode.
*/
virtual void startPresentation() = 0;
};
Q_DECLARE_INTERFACE( KDocumentViewer, "org.kde.kdocumentviewer/0.1" )
#endif

@ -82,7 +82,7 @@ Part::Part(QWidget *parentWidget,
const QStringList & /*args*/ ) const QStringList & /*args*/ )
: KParts::ReadOnlyPart(parent), : KParts::ReadOnlyPart(parent),
m_showMenuBarAction(0), m_showFullScreenAction(0), m_actionsSearched(false), m_showMenuBarAction(0), m_showFullScreenAction(0), m_actionsSearched(false),
m_searchStarted(false) m_searchStarted(false), m_cliPresentation(false)
{ {
QDBusConnection::sessionBus().registerObject("/okular", this, QDBusConnection::ExportScriptableSlots); QDBusConnection::sessionBus().registerObject("/okular", this, QDBusConnection::ExportScriptableSlots);
@ -390,6 +390,19 @@ Part::~Part()
delete *it; delete *it;
} }
bool Part::openDocument(const KUrl& url, uint page)
{
Okular::DocumentViewport vp( page - 1 );
if ( vp.isValid() )
m_document->setNextDocumentViewport( vp );
return openUrl( url );
}
void Part::startPresentation()
{
m_cliPresentation = true;
}
void Part::openUrlFromDocument(const KUrl &url) void Part::openUrlFromDocument(const KUrl &url)
{ {
m_bExtension->openUrlNotify(); m_bExtension->openUrlNotify();
@ -648,11 +661,14 @@ bool Part::openFile()
{ {
m_toolBox->setCurrentIndex( 0 ); m_toolBox->setCurrentIndex( 0 );
} }
// if the 'StartFullScreen' flag is set, start presentation // if the 'StartFullScreen' flag is set, or the command line flag was
if ( m_document->metaData( "StartFullScreen" ).toBool() ) // specified, start presentation
if ( m_document->metaData( "StartFullScreen" ).toBool() || m_cliPresentation )
{ {
KMessageBox::information( m_presentationWidget, i18n("The document is going to be launched on presentation mode because the file requested it."), QString::null, "autoPresentationWarning" ); if ( !m_cliPresentation )
slotShowPresentation(); KMessageBox::information( m_presentationWidget, i18n("The document is going to be launched on presentation mode because the file requested it."), QString::null, "autoPresentationWarning" );
m_cliPresentation = false;
QMetaObject::invokeMethod(this, "slotShowPresentation", Qt::QueuedConnection);
} }
/* if (m_document->getXMLFile() != QString::null) /* if (m_document->getXMLFile() != QString::null)
setXMLFile(m_document->getXMLFile(),true);*/ setXMLFile(m_document->getXMLFile(),true);*/

@ -22,6 +22,7 @@
#include <qpointer.h> #include <qpointer.h>
#include "core/observer.h" #include "core/observer.h"
#include "core/document.h" #include "core/document.h"
#include "kdocumentviewer.h"
#include <QtDBus/QtDBus> #include <QtDBus/QtDBus>
@ -66,10 +67,11 @@ class BrowserExtension;
* @author Wilco Greven <greven@kde.org> * @author Wilco Greven <greven@kde.org>
* @version 0.2 * @version 0.2
*/ */
class Part : public KParts::ReadOnlyPart, public Okular::DocumentObserver class Part : public KParts::ReadOnlyPart, public Okular::DocumentObserver, public KDocumentViewer
{ {
Q_OBJECT Q_OBJECT
Q_CLASSINFO("D-Bus Interface", "org.kde.okular") Q_CLASSINFO("D-Bus Interface", "org.kde.okular")
Q_INTERFACES(KDocumentViewer)
public: public:
// Default constructor // Default constructor
@ -84,6 +86,9 @@ public:
static KAboutData* createAboutData(); static KAboutData* createAboutData();
bool openDocument(const KUrl& url, uint page);
void startPresentation();
public slots: // dbus public slots: // dbus
Q_SCRIPTABLE Q_NOREPLY void goToPage(uint page); Q_SCRIPTABLE Q_NOREPLY void goToPage(uint page);
Q_SCRIPTABLE Q_NOREPLY void openDocument(KUrl doc); Q_SCRIPTABLE Q_NOREPLY void openDocument(KUrl doc);
@ -212,6 +217,7 @@ private:
QStringList m_supportedMimeTypes; QStringList m_supportedMimeTypes;
KSelectAction * m_confGens; KSelectAction * m_confGens;
QList<Okular::ExportFormat> m_exportFormats; QList<Okular::ExportFormat> m_exportFormats;
bool m_cliPresentation;
private slots: private slots:
void slotGeneratorPreferences(); void slotGeneratorPreferences();

@ -1,4 +1,8 @@
include_directories(
${CMAKE_CURRENT_SOURCE_DIR}/..
)
########### next target ############### ########### next target ###############
set(okular_SRCS main.cpp shell.cpp ) set(okular_SRCS main.cpp shell.cpp )

@ -25,6 +25,9 @@ static const char version[] = "0.5.81";
static KCmdLineOptions options[] = static KCmdLineOptions options[] =
{ {
{ "p", 0, 0 },
{ "page <number>", I18N_NOOP("Page of the document to be shown"), 0 },
{ "presentation", I18N_NOOP("Start the document in presentation mode"), 0 },
{ "+[URL]", I18N_NOOP("Document to open"), 0 }, { "+[URL]", I18N_NOOP("Document to open"), 0 },
KCmdLineLastOption KCmdLineLastOption
}; };
@ -63,18 +66,17 @@ int main(int argc, char** argv)
if (args->count() == 0) if (args->count() == 0)
{ {
Shell* widget = new Shell; Shell* widget = new Shell(args);
widget->show(); widget->show();
} }
else else
{ {
for (int i = 0; i < args->count(); ++i) for (int i = 0; i < args->count(); ++i)
{ {
Shell* widget = new Shell(args->url(i)); Shell* widget = new Shell(args, args->url(i));
widget->show(); widget->show();
} }
} }
args->clear();
} }
return app.exec(); return app.exec();

@ -22,6 +22,7 @@
#include <qtimer.h> #include <qtimer.h>
#include <kaction.h> #include <kaction.h>
#include <kapplication.h> #include <kapplication.h>
#include <kcmdlineargs.h>
#include <kedittoolbar.h> #include <kedittoolbar.h>
#include <kfiledialog.h> #include <kfiledialog.h>
#include <klibloader.h> #include <klibloader.h>
@ -44,15 +45,10 @@
// local includes // local includes
#include "shell.h" #include "shell.h"
#include "kdocumentviewer.h"
Shell::Shell() Shell::Shell(KCmdLineArgs* args, const KUrl &url)
: KParts::MainWindow(), m_menuBarWasShown(true), m_toolBarWasShown(true) : KParts::MainWindow(), m_args(args), m_menuBarWasShown(true), m_toolBarWasShown(true)
{
init();
}
Shell::Shell(const KUrl &url)
: KParts::MainWindow(), m_menuBarWasShown(true), m_toolBarWasShown(true)
{ {
m_openUrl = url; m_openUrl = url;
init(); init();
@ -63,6 +59,7 @@ void Shell::init()
setObjectName( QLatin1String( "okular::Shell" ) ); setObjectName( QLatin1String( "okular::Shell" ) );
// set the shell's ui resource file // set the shell's ui resource file
setXMLFile("shell.rc"); setXMLFile("shell.rc");
m_doc=0L;
m_fileformats=0L; m_fileformats=0L;
m_tempfile=0L; m_tempfile=0L;
// this routine will find and load our Part. it finds the Part by // this routine will find and load our Part. it finds the Part by
@ -84,6 +81,7 @@ void Shell::init()
setupGUI(Keys | Save); setupGUI(Keys | Save);
createGUI(m_part); createGUI(m_part);
m_showToolBarAction = static_cast<KToggleAction*>(toolBarMenuAction()); m_showToolBarAction = static_cast<KToggleAction*>(toolBarMenuAction());
m_doc = qobject_cast<KDocumentViewer*>(m_part);
} }
} }
else else
@ -112,7 +110,13 @@ void Shell::init()
void Shell::delayedOpen() void Shell::delayedOpen()
{ {
openUrl(m_openUrl); uint page = 0;
if (m_args && m_doc)
{
QByteArray pageopt = m_args->getOption("page");
page = pageopt.toUInt();
}
openUrl(m_openUrl, page);
} }
Shell::~Shell() Shell::~Shell()
@ -123,11 +127,13 @@ Shell::~Shell()
delete m_part; delete m_part;
} }
void Shell::openUrl( const KUrl & url ) void Shell::openUrl( const KUrl & url, uint page )
{ {
if ( m_part ) if ( m_part )
{ {
bool openOk = m_part->openUrl( url ); if ( m_doc && m_args && m_args->isSet( "presentation" ) )
m_doc->startPresentation();
bool openOk = page > 0 && m_doc ? m_doc->openDocument( url, page ) : m_part->openUrl( url );
if ( openOk ) m_recent->addUrl( url ); if ( openOk ) m_recent->addUrl( url );
else m_recent->removeUrl( url ); else m_recent->removeUrl( url );
} }

@ -23,10 +23,12 @@
#include <kparts/mainwindow.h> #include <kparts/mainwindow.h>
#include <kmimetype.h> #include <kmimetype.h>
class KCmdLineArgs;
class KRecentFilesAction; class KRecentFilesAction;
class KTemporaryFile; class KTemporaryFile;
class KToggleAction; class KToggleAction;
class KDocumentViewer;
class Part; class Part;
/** /**
@ -43,14 +45,9 @@ class Shell : public KParts::MainWindow
public: public:
/** /**
* Default Constructor * Constructor
*/ */
Shell(); Shell(KCmdLineArgs* args = 0, const KUrl &url = KUrl());
/**
* Open an url
*/
Shell(const KUrl &url);
/** /**
* Default Destructor * Default Destructor
@ -84,7 +81,7 @@ private slots:
void slotUpdateFullScreen(); void slotUpdateFullScreen();
void slotShowMenubar(); void slotShowMenubar();
void openUrl( const KUrl & url ); void openUrl( const KUrl & url, uint page = 0 );
void delayedOpen(); void delayedOpen();
signals: signals:
@ -99,7 +96,9 @@ private:
QStringList* fileFormats(); QStringList* fileFormats();
private: private:
KCmdLineArgs* m_args;
KParts::ReadOnlyPart* m_part; KParts::ReadOnlyPart* m_part;
KDocumentViewer* m_doc;
KTemporaryFile* m_tempfile; KTemporaryFile* m_tempfile;
KRecentFilesAction* m_recent; KRecentFilesAction* m_recent;
QStringList* m_fileformats; QStringList* m_fileformats;

Loading…
Cancel
Save