svn path=/trunk/KDE/kdegraphics/okular/; revision=744225remotes/origin/KDE/4.0
parent
5b01430bb0
commit
bd294e1de6
6 changed files with 197 additions and 158 deletions
@ -0,0 +1,146 @@ |
||||
/***************************************************************************
|
||||
* Copyright (C) 2007 by John Layt <john@layt.net> * |
||||
* * |
||||
* FilePrinterPreview based on KPrintPreview (originally LGPL) * |
||||
* Copyright (c) 2007 Alex Merry <huntedhacker@tiscali.co.uk> * |
||||
* * |
||||
* 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 "fileprinterpreview.h" |
||||
|
||||
#include <QFile> |
||||
#include <QSize> |
||||
#include <QtCore/QFile> |
||||
#include <QtGui/QLabel> |
||||
#include <QtGui/QShowEvent> |
||||
|
||||
#include <kmimetypetrader.h> |
||||
#include <kparts/part.h> |
||||
#include <kpluginfactory.h> |
||||
#include <kpluginloader.h> |
||||
#include <kservice.h> |
||||
#include <kdebug.h> |
||||
|
||||
using namespace Okular; |
||||
|
||||
// This code copied from KPrintPreview by Alex Merry, adapted to do PS files instead of PDF
|
||||
|
||||
class Okular::FilePrinterPreviewPrivate |
||||
{ |
||||
public: |
||||
FilePrinterPreviewPrivate( FilePrinterPreview *host, const QString & _filename ) |
||||
: q(host) |
||||
, mainWidget(new QWidget(host)) |
||||
, previewPart(0) |
||||
, failMessage(0) |
||||
{ |
||||
filename = _filename; |
||||
} |
||||
|
||||
void getPart(); |
||||
bool doPreview(); |
||||
void fail(); |
||||
|
||||
FilePrinterPreview *q; |
||||
|
||||
QWidget *mainWidget; |
||||
|
||||
QString filename; |
||||
|
||||
KParts::ReadOnlyPart *previewPart; |
||||
QWidget *failMessage; |
||||
}; |
||||
|
||||
void FilePrinterPreviewPrivate::getPart() |
||||
{ |
||||
if (previewPart) { |
||||
kDebug(500) << "already got a part"; |
||||
return; |
||||
} |
||||
kDebug(500) << "querying trader for application/ps service"; |
||||
|
||||
KPluginFactory *factory(0); |
||||
KService::List offers = |
||||
KMimeTypeTrader::self()->query("application/postscript", "KParts/ReadOnlyPart"); |
||||
|
||||
KService::List::ConstIterator it = offers.begin(); |
||||
while (!factory && it != offers.end()) { |
||||
KPluginLoader loader(**it); |
||||
factory = loader.factory(); |
||||
if (!factory) { |
||||
kDebug(500) << "Loading failed:" << loader.errorString(); |
||||
} |
||||
++it; |
||||
} |
||||
if (factory) { |
||||
kDebug(500) << "Trying to create a part"; |
||||
previewPart = factory->create<KParts::ReadOnlyPart>(q, (QVariantList() << "Print/Preview")); |
||||
if (!previewPart) { |
||||
kDebug(500) << "Part creation failed"; |
||||
} |
||||
} |
||||
} |
||||
|
||||
bool FilePrinterPreviewPrivate::doPreview() |
||||
{ |
||||
if (!QFile::exists(filename)) { |
||||
kWarning() << "Nothing was produced to be previewed"; |
||||
return false; |
||||
} |
||||
|
||||
getPart(); |
||||
if (!previewPart) { |
||||
//TODO: error dialog
|
||||
kWarning() << "Could not find a PS viewer for the preview dialog"; |
||||
fail(); |
||||
return false; |
||||
} else { |
||||
q->setMainWidget(previewPart->widget()); |
||||
return previewPart->openUrl(filename); |
||||
} |
||||
} |
||||
|
||||
void FilePrinterPreviewPrivate::fail() |
||||
{ |
||||
if (!failMessage) { |
||||
failMessage = new QLabel(i18n("Could not load print preview part"), q); |
||||
} |
||||
q->setMainWidget(failMessage); |
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
FilePrinterPreview::FilePrinterPreview( const QString &filename, QWidget *parent ) |
||||
: KDialog( parent ) |
||||
, d( new FilePrinterPreviewPrivate( this, filename ) ) |
||||
{ |
||||
kDebug(500) << "kdeprint: creating preview dialog"; |
||||
|
||||
// Set up the dialog
|
||||
setCaption(i18n("Print Preview")); |
||||
setButtons(KDialog::Close); |
||||
} |
||||
|
||||
FilePrinterPreview::~FilePrinterPreview() |
||||
{ |
||||
delete d; |
||||
} |
||||
|
||||
void FilePrinterPreview::showEvent(QShowEvent *event) |
||||
{ |
||||
if (!event->spontaneous()) { |
||||
// being shown for the first time
|
||||
if (!d->doPreview()) { |
||||
event->accept(); |
||||
return; |
||||
} |
||||
} |
||||
KDialog::showEvent(event); |
||||
} |
||||
|
||||
#include "fileprinterpreview.moc" |
||||
@ -0,0 +1,47 @@ |
||||
/***************************************************************************
|
||||
* Copyright (C) 2007 by John Layt <john@layt.net> * |
||||
* * |
||||
* FilePrinterPreview based on KPrintPreview (originally LGPL) * |
||||
* Copyright (c) 2007 Alex Merry <huntedhacker@tiscali.co.uk> * |
||||
* * |
||||
* 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 FILEPRINTERPREVIEW_H |
||||
#define FILEPRINTERPREVIEW_H |
||||
|
||||
#include <kdialog.h> |
||||
|
||||
namespace Okular { |
||||
|
||||
// This code copied from KPrintPreview by Alex Merry, adapted to do PS files instead of PDF
|
||||
|
||||
class FilePrinterPreviewPrivate; |
||||
|
||||
class FilePrinterPreview : public KDialog |
||||
{ |
||||
Q_OBJECT |
||||
|
||||
public: |
||||
/**
|
||||
* Create a Print Preview dialog for a given file. |
||||
* |
||||
* @param printer file to print preview |
||||
* @param parent pointer to the parent widget for the dialog |
||||
*/ |
||||
explicit FilePrinterPreview( const QString &filename, QWidget *parent = 0 ); |
||||
virtual ~FilePrinterPreview(); |
||||
|
||||
protected: |
||||
void showEvent( QShowEvent *event ); |
||||
|
||||
private: |
||||
FilePrinterPreviewPrivate * const d; |
||||
}; |
||||
|
||||
} |
||||
|
||||
#endif // FILEPRINTER_H
|
||||
Loading…
Reference in new issue