From 18028a8a2cd17ed014a19f086c2cc47e19f36ec2 Mon Sep 17 00:00:00 2001 From: Pino Toscano Date: Sun, 22 Oct 2006 11:25:08 +0000 Subject: [PATCH] API change in the Generator: use an empty construct, and set the document for the generator right after its construction. Add a protected method to get the document, and hide the real document pointer as private, so the generators can't redefine it. svn path=/trunk/playground/graphics/okular/; revision=598025 --- core/document.cpp | 7 ++++--- core/generator.cpp | 10 ++++++++-- core/generator.h | 12 +++++++++--- generators/chm/generator_chm.cpp | 3 ++- generators/chm/generator_chm.h | 2 +- generators/djvu/generator_djvu.cpp | 2 +- generators/djvu/generator_djvu.h | 2 +- generators/dvi/generator_dvi.cpp | 4 ++-- generators/dvi/generator_dvi.h | 2 +- generators/ghostview/generator_ghostview.cpp | 6 +++--- generators/ghostview/generator_ghostview.h | 4 ++-- generators/kimgio/generator_kimgio.cpp | 4 ++-- generators/kimgio/generator_kimgio.h | 2 +- generators/ooo/generator_ooo.cpp | 4 ++-- generators/ooo/generator_ooo.h | 2 +- generators/poppler/generator_pdf.cpp | 8 ++++---- generators/poppler/generator_pdf.h | 2 +- generators/tiff/generator_tiff.cpp | 2 +- generators/tiff/generator_tiff.h | 2 +- generators/xps/generator_xps.cpp | 4 ++-- generators/xps/generator_xps.h | 2 +- 21 files changed, 50 insertions(+), 36 deletions(-) diff --git a/core/document.cpp b/core/document.cpp index 51f42e172..3472d1b0a 100644 --- a/core/document.cpp +++ b/core/document.cpp @@ -215,8 +215,8 @@ bool Document::openDocument( const QString & docFile, const KUrl& url, const KMi return false; } - Generator* (*create_plugin)(Document* doc) = ( Generator* (*)(Document* doc) ) lib->symbol( "create_plugin" ); - generator=create_plugin(this); + Generator* (*create_plugin)() = ( Generator* (*)() ) lib->symbol( "create_plugin" ); + generator = create_plugin(); if ( !generator ) { @@ -232,9 +232,10 @@ bool Document::openDocument( const QString & docFile, const KUrl& url, const KMi } else { - generator -> setDocument( this ); m_usingCachedGenerator=true; } + generator->setDocument( this ); + // connect error reporting signals connect( generator, SIGNAL( error( const QString&, int ) ), this, SIGNAL( error( const QString&, int ) ) ); connect( generator, SIGNAL( warning( const QString&, int ) ), this, SIGNAL( warning( const QString&, int ) ) ); diff --git a/core/generator.cpp b/core/generator.cpp index 46b703867..96b018c7e 100644 --- a/core/generator.cpp +++ b/core/generator.cpp @@ -13,8 +13,8 @@ using namespace Okular; -Generator::Generator( Document *document ) - : m_document( document ) +Generator::Generator() + : m_document( 0 ) { } @@ -177,6 +177,12 @@ void Generator::signalRequestDone( PixmapRequest * request ) m_document->requestDone( request ); } +Document * Generator::document() const +{ + return m_document; +} + + QTextStream& operator<< (QTextStream& str, const PixmapRequest *req) { QString s; diff --git a/core/generator.h b/core/generator.h index 707602981..497744ccd 100644 --- a/core/generator.h +++ b/core/generator.h @@ -15,7 +15,7 @@ #define OKULAR_EXPORT_PLUGIN( classname ) \ extern "C" { \ - OKULAR_EXPORT Okular::Generator* create_plugin(Okular::Document* doc) { return new classname(doc); } \ + OKULAR_EXPORT Okular::Generator* create_plugin() { return new classname(); } \ } @@ -65,9 +65,9 @@ class OKULAR_EXPORT Generator : public QObject public: /** - * Creates a new generator which works on the given @p document + * Creates a new generator. */ - Generator( Document *document ); + Generator(); /** @@ -315,6 +315,12 @@ class OKULAR_EXPORT Generator : public QObject */ void signalRequestDone( PixmapRequest * request ); + /** + * Returns a pointer to the document. + */ + Document * document() const; + + private: /** * The internal pointer to the document. */ diff --git a/generators/chm/generator_chm.cpp b/generators/chm/generator_chm.cpp index b81d587f3..4ef420503 100644 --- a/generators/chm/generator_chm.cpp +++ b/generators/chm/generator_chm.cpp @@ -28,7 +28,8 @@ OKULAR_EXPORT_PLUGIN(CHMGenerator) -CHMGenerator::CHMGenerator( Okular::Document * doc ) : Okular::Generator ( doc ) +CHMGenerator::CHMGenerator() + : Okular::Generator() { m_syncGen=0; m_file=0; diff --git a/generators/chm/generator_chm.h b/generators/chm/generator_chm.h index 93e6bd151..bb9d82817 100644 --- a/generators/chm/generator_chm.h +++ b/generators/chm/generator_chm.h @@ -29,7 +29,7 @@ class CHMGenerator : public Okular::Generator { Q_OBJECT public: - CHMGenerator(Okular::Document * doc ); + CHMGenerator(); bool loadDocument( const QString & fileName, QVector< Okular::Page * > & pagesVector ); bool closeDocument(); diff --git a/generators/djvu/generator_djvu.cpp b/generators/djvu/generator_djvu.cpp index 2a3245fb7..50cc4f907 100644 --- a/generators/djvu/generator_djvu.cpp +++ b/generators/djvu/generator_djvu.cpp @@ -52,7 +52,7 @@ static void recurseCreateTOC( QDomDocument &maindoc, QDomNode &parent, QDomNode OKULAR_EXPORT_PLUGIN(DjVuGenerator) -DjVuGenerator::DjVuGenerator( Okular::Document * doc ) : Okular::Generator ( doc ), +DjVuGenerator::DjVuGenerator() : Okular::Generator(), m_docInfo( 0 ), m_docSyn( 0 ), ready( false ) { m_djvu = new KDjVu(); diff --git a/generators/djvu/generator_djvu.h b/generators/djvu/generator_djvu.h index ab22f96a1..acbf38379 100644 --- a/generators/djvu/generator_djvu.h +++ b/generators/djvu/generator_djvu.h @@ -19,7 +19,7 @@ class DjVuGenerator : public Okular::Generator { Q_OBJECT public: - DjVuGenerator( Okular::Document * doc ); + DjVuGenerator(); bool loadDocument( const QString & fileName, QVector & pagesVector ); bool closeDocument(); diff --git a/generators/dvi/generator_dvi.cpp b/generators/dvi/generator_dvi.cpp index 918826204..5e8d975fb 100644 --- a/generators/dvi/generator_dvi.cpp +++ b/generators/dvi/generator_dvi.cpp @@ -29,7 +29,7 @@ OKULAR_EXPORT_PLUGIN(DviGenerator) -DviGenerator::DviGenerator( Okular::Document * doc ) : Okular::Generator ( doc ), +DviGenerator::DviGenerator() : Okular::Generator(), m_docInfo( 0 ), m_docSynopsis( 0 ), ready( false ), m_dviRenderer( 0 ) { } @@ -356,7 +356,7 @@ const Okular::DocumentSynopsis *DviGenerator::generateDocumentSynopsis() { Okular::DocumentViewport vp; - const Okular::Page *p = m_document->page( a.page - 1 ); + const Okular::Page *p = document()->page( a.page - 1 ); /* Don't care about rotations... */ fillViewportFromAnchor( vp, a, (int)p->width(), (int)p->height(), 0 ); domel->setAttribute( "Viewport", vp.toString() ); diff --git a/generators/dvi/generator_dvi.h b/generators/dvi/generator_dvi.h index 3aa2ef8d1..36108daae 100644 --- a/generators/dvi/generator_dvi.h +++ b/generators/dvi/generator_dvi.h @@ -24,7 +24,7 @@ class DviGenerator : public Okular::Generator { Q_OBJECT public: - DviGenerator( Okular::Document * doc ); + DviGenerator(); bool loadDocument( const QString & fileName, QVector< Okular::Page * > & pagesVector ); bool closeDocument(); diff --git a/generators/ghostview/generator_ghostview.cpp b/generators/ghostview/generator_ghostview.cpp index 202f65d0c..5de9dd8a6 100644 --- a/generators/ghostview/generator_ghostview.cpp +++ b/generators/ghostview/generator_ghostview.cpp @@ -37,8 +37,8 @@ OKULAR_EXPORT_PLUGIN(GSGenerator) -GSGenerator::GSGenerator( Okular::Document * doc ) : - Okular::Generator ( doc ), +GSGenerator::GSGenerator() : + Okular::Generator(), m_converted(false) { pixGenerator = 0; @@ -267,7 +267,7 @@ void GSGenerator::setPaperSize( QVector & pagesVector, int newsiz loadPages(pagesVector); // FIXME: is it needed to notify the observers? doesn't the document do that already? Okular::NotifyRequest r(Okular::DocumentObserver::Setup, false); - m_document->notifyObservers( &r ); + document()->notifyObservers( &r ); } void GSGenerator::setupGUI(KActionCollection * ac , QToolBox * tBox ) diff --git a/generators/ghostview/generator_ghostview.h b/generators/ghostview/generator_ghostview.h index 81800c0c0..024f81e76 100644 --- a/generators/ghostview/generator_ghostview.h +++ b/generators/ghostview/generator_ghostview.h @@ -53,8 +53,8 @@ class GSGenerator : public Okular::Generator QString fileName(); void addPages( KConfigDialog* dlg ); - /** constructor: takes the Document as a parameter **/ - GSGenerator( Okular::Document * doc ); + /** constructor **/ + GSGenerator(); ~GSGenerator(); public slots: diff --git a/generators/kimgio/generator_kimgio.cpp b/generators/kimgio/generator_kimgio.cpp index 8c5172c7a..48062f8eb 100644 --- a/generators/kimgio/generator_kimgio.cpp +++ b/generators/kimgio/generator_kimgio.cpp @@ -18,7 +18,7 @@ OKULAR_EXPORT_PLUGIN(KIMGIOGenerator) -KIMGIOGenerator::KIMGIOGenerator( Okular::Document * document ) : Generator( document ) +KIMGIOGenerator::KIMGIOGenerator() : Generator() { } @@ -56,7 +56,7 @@ void KIMGIOGenerator::generatePixmap( Okular::PixmapRequest * request ) // perform a smooth scaled generation QImage smoothImage = m_pix->toImage().scaled( request->width, request->height, Qt::IgnoreAspectRatio, Qt::SmoothTransformation ); // rotate, if necessary - int rotation = m_document->rotation(); + int rotation = request->page->rotation(); QImage finalImage = rotation > 0 ? KImageEffect::rotate( smoothImage, (KImageEffect::RotateDirection)( rotation - 1 ) ) : smoothImage; diff --git a/generators/kimgio/generator_kimgio.h b/generators/kimgio/generator_kimgio.h index 2fce9dfe0..ad8f684b9 100644 --- a/generators/kimgio/generator_kimgio.h +++ b/generators/kimgio/generator_kimgio.h @@ -16,7 +16,7 @@ class KIMGIOGenerator : public Okular::Generator { Q_OBJECT public: - KIMGIOGenerator( Okular::Document * document ); + KIMGIOGenerator(); virtual ~KIMGIOGenerator(); // [INHERITED] load a document and fill up the pagesVector diff --git a/generators/ooo/generator_ooo.cpp b/generators/ooo/generator_ooo.cpp index e2745ed8b..065875e0d 100644 --- a/generators/ooo/generator_ooo.cpp +++ b/generators/ooo/generator_ooo.cpp @@ -25,8 +25,8 @@ OKULAR_EXPORT_PLUGIN(KOOOGenerator) -KOOOGenerator::KOOOGenerator( Okular::Document * document ) - : Okular::Generator( document ), mDocument( 0 ) +KOOOGenerator::KOOOGenerator() + : Okular::Generator(), mDocument( 0 ) { } diff --git a/generators/ooo/generator_ooo.h b/generators/ooo/generator_ooo.h index bc98dc600..594fc1f05 100644 --- a/generators/ooo/generator_ooo.h +++ b/generators/ooo/generator_ooo.h @@ -20,7 +20,7 @@ class KOOOGenerator : public Okular::Generator Q_OBJECT public: - KOOOGenerator( Okular::Document * document ); + KOOOGenerator(); virtual ~KOOOGenerator(); // [INHERITED] load a document and fill up the pagesVector diff --git a/generators/poppler/generator_pdf.cpp b/generators/poppler/generator_pdf.cpp index f7c052970..1a4fb31dd 100644 --- a/generators/poppler/generator_pdf.cpp +++ b/generators/poppler/generator_pdf.cpp @@ -218,8 +218,8 @@ static QLinkedList generateLinks( const QListpage(page->number()); // 2. Take data from outputdev and attach it to the Page - page->setPixmap( request->id, p->splashRenderToPixmap(fakeDpiX, fakeDpiY, -1, -1, -1, -1, genObjectRects, (Poppler::Page::Rotation)m_document->rotation()) ); + page->setPixmap( request->id, p->splashRenderToPixmap(fakeDpiX, fakeDpiY, -1, -1, -1, -1, genObjectRects, (Poppler::Page::Rotation)document()->rotation()) ); if ( genObjectRects ) { @@ -801,7 +801,7 @@ bool PDFGenerator::exportToText( const QString & fileName ) return false; QTextStream ts( &f ); - int num = m_document->pages(); + int num = document()->pages(); for ( int i = 0; i < num; ++i ) { docLock.lock(); diff --git a/generators/poppler/generator_pdf.h b/generators/poppler/generator_pdf.h index 000eb3d38..db86d2e42 100644 --- a/generators/poppler/generator_pdf.h +++ b/generators/poppler/generator_pdf.h @@ -48,7 +48,7 @@ class PDFGenerator : public Okular::Generator { Q_OBJECT public: - PDFGenerator( Okular::Document * document ); + PDFGenerator(); virtual ~PDFGenerator(); // [INHERITED] load a document and fill up the pagesVector diff --git a/generators/tiff/generator_tiff.cpp b/generators/tiff/generator_tiff.cpp index 444e2a4c3..9f187ba70 100644 --- a/generators/tiff/generator_tiff.cpp +++ b/generators/tiff/generator_tiff.cpp @@ -140,7 +140,7 @@ static QDateTime convertTIFFDateTime( const char* tiffdate ) OKULAR_EXPORT_PLUGIN(TIFFGenerator) -TIFFGenerator::TIFFGenerator( Okular::Document * document ) : Okular::Generator( document ), +TIFFGenerator::TIFFGenerator() : Okular::Generator(), d( new Private ), ready( false ), m_docInfo( 0 ) { thread = new TIFFGeneratorThread(); diff --git a/generators/tiff/generator_tiff.h b/generators/tiff/generator_tiff.h index e7a9a0127..8529be774 100644 --- a/generators/tiff/generator_tiff.h +++ b/generators/tiff/generator_tiff.h @@ -18,7 +18,7 @@ class TIFFGenerator : public Okular::Generator { Q_OBJECT public: - TIFFGenerator( Okular::Document * document ); + TIFFGenerator(); virtual ~TIFFGenerator(); bool loadDocument( const QString & fileName, QVector & pagesVector ); diff --git a/generators/xps/generator_xps.cpp b/generators/xps/generator_xps.cpp index 254794985..4d179619c 100644 --- a/generators/xps/generator_xps.cpp +++ b/generators/xps/generator_xps.cpp @@ -607,8 +607,8 @@ XpsPage* XpsFile::page(int pageNum) const return m_pages.at( pageNum ); } -XpsGenerator::XpsGenerator( Okular::Document * document ) - : Okular::Generator( document ) +XpsGenerator::XpsGenerator() + : Okular::Generator() { m_xpsFile = new XpsFile; } diff --git a/generators/xps/generator_xps.h b/generators/xps/generator_xps.h index cb7d3b5e4..18044b372 100644 --- a/generators/xps/generator_xps.h +++ b/generators/xps/generator_xps.h @@ -202,7 +202,7 @@ class XpsGenerator : public Okular::Generator { Q_OBJECT public: - XpsGenerator( Okular::Document * document ); + XpsGenerator(); virtual ~XpsGenerator(); bool loadDocument( const QString & fileName, QVector & pagesVector );