diff --git a/core/generator.cpp b/core/generator.cpp index c7bcb0473..3bf227681 100644 --- a/core/generator.cpp +++ b/core/generator.cpp @@ -7,6 +7,8 @@ * (at your option) any later version. * ***************************************************************************/ +#include + #include #include @@ -24,6 +26,7 @@ class Generator::Private } Document * m_document; + QSet< GeneratorFeature > m_features; }; Generator::Generator() @@ -138,9 +141,9 @@ void Generator::setDocument( Document *document ) d->m_document = document; } -bool Generator::hasFeature( GeneratorFeature ) const +bool Generator::hasFeature( GeneratorFeature feature ) const { - return false; + return d->m_features.contains( feature ); } @@ -157,6 +160,15 @@ Document * Generator::document() const return d->m_document; } +void Generator::setFeature( GeneratorFeature feature, bool on ) +{ + if ( on ) + d->m_features.insert( feature ); + else + d->m_features.remove( feature ); +} + + class PixmapRequest::Private { public: diff --git a/core/generator.h b/core/generator.h index 9e20fcda0..33684b7cd 100644 --- a/core/generator.h +++ b/core/generator.h @@ -305,7 +305,7 @@ class OKULAR_EXPORT Generator : public QObject /** * Query for the specified @p feature. */ - virtual bool hasFeature( GeneratorFeature feature ) const; + bool hasFeature( GeneratorFeature feature ) const; Q_SIGNALS: /** @@ -370,6 +370,11 @@ class OKULAR_EXPORT Generator : public QObject */ Document * document() const; + /** + * Toggle the @p feature . + */ + void setFeature( GeneratorFeature feature, bool on = true ); + private: class Private; Private* const d; diff --git a/core/textdocumentgenerator.cpp b/core/textdocumentgenerator.cpp index 57cb2175b..0ebcb649e 100644 --- a/core/textdocumentgenerator.cpp +++ b/core/textdocumentgenerator.cpp @@ -186,6 +186,8 @@ void TextDocumentGenerator::Private::generateTitleInfos() TextDocumentGenerator::TextDocumentGenerator( TextDocumentConverter *converter ) : Okular::Generator(), d( new Private( this, converter ) ) { + setFeature( TextExtraction ); + connect( converter, SIGNAL( addLink( Link*, int, int ) ), this, SLOT( addLink( Link*, int, int ) ) ); connect( converter, SIGNAL( addAnnotation( Annotation*, int, int ) ), @@ -313,17 +315,6 @@ void TextDocumentGenerator::generateSyncTextPage( Okular::Page * page ) page->setTextPage( d->createTextPage( page->number() ) ); } -bool TextDocumentGenerator::hasFeature( GeneratorFeature feature ) const -{ - switch ( feature ) - { - case TextExtraction: - return true; - default: ; - } - return false; -} - bool TextDocumentGenerator::print( KPrinter& printer ) { if ( !d->mDocument ) diff --git a/core/textdocumentgenerator.h b/core/textdocumentgenerator.h index 12ed4cf79..0296ab002 100644 --- a/core/textdocumentgenerator.h +++ b/core/textdocumentgenerator.h @@ -93,8 +93,6 @@ class OKULAR_EXPORT TextDocumentGenerator : public Generator bool loadDocument( const QString & fileName, QVector & pagesVector ); bool closeDocument(); - bool hasFeature( GeneratorFeature feature ) const; - // [INHERITED] print document using already configured kprinter bool print( KPrinter& printer ); diff --git a/generators/chm/generator_chm.cpp b/generators/chm/generator_chm.cpp index edc090eb8..d9ca6da5b 100644 --- a/generators/chm/generator_chm.cpp +++ b/generators/chm/generator_chm.cpp @@ -32,6 +32,8 @@ OKULAR_EXPORT_PLUGIN(CHMGenerator) CHMGenerator::CHMGenerator() : Okular::Generator() { + setFeature( TextExtraction ); + m_syncGen=0; m_file=0; m_state=-1; @@ -364,17 +366,6 @@ void CHMGenerator::generateSyncTextPage( Okular::Page * page ) syncLock.unlock(); } -bool CHMGenerator::hasFeature( GeneratorFeature feature ) const -{ - switch ( feature ) - { - case TextExtraction: - return true; - default: ; - } - return false; -} - QVariant CHMGenerator::metaData( const QString &key, const QVariant &option ) const { if ( key == "NamedViewport" && !option.toString().isEmpty() ) diff --git a/generators/chm/generator_chm.h b/generators/chm/generator_chm.h index e643b67c9..e42d53db8 100644 --- a/generators/chm/generator_chm.h +++ b/generators/chm/generator_chm.h @@ -38,8 +38,6 @@ class CHMGenerator : public Okular::Generator const Okular::DocumentSynopsis * generateDocumentSynopsis(); const Okular::DocumentFonts * generateDocumentFonts(); - bool hasFeature( GeneratorFeature feature ) const; - QVariant metaData( const QString & key, const QVariant & option ) const; public slots: diff --git a/generators/comicbook/generator_comicbook.cpp b/generators/comicbook/generator_comicbook.cpp index f59bac964..d900c3527 100644 --- a/generators/comicbook/generator_comicbook.cpp +++ b/generators/comicbook/generator_comicbook.cpp @@ -81,10 +81,5 @@ bool ComicBookGenerator::print( KPrinter& printer ) return true; } -bool ComicBookGenerator::hasFeature( GeneratorFeature ) const -{ - return false; -} - #include "generator_comicbook.moc" diff --git a/generators/comicbook/generator_comicbook.h b/generators/comicbook/generator_comicbook.h index 5b3f700ff..39fff1eb9 100644 --- a/generators/comicbook/generator_comicbook.h +++ b/generators/comicbook/generator_comicbook.h @@ -29,8 +29,6 @@ class ComicBookGenerator : public Okular::ThreadedGenerator // [INHERITED] print document using already configured kprinter bool print( KPrinter& printer ); - bool hasFeature( GeneratorFeature feature ) const; - protected: QImage image( Okular::PixmapRequest * request ); diff --git a/generators/dvi/generator_dvi.cpp b/generators/dvi/generator_dvi.cpp index 84fc34383..94ef578b4 100644 --- a/generators/dvi/generator_dvi.cpp +++ b/generators/dvi/generator_dvi.cpp @@ -35,6 +35,7 @@ OKULAR_EXPORT_PLUGIN(DviGenerator) DviGenerator::DviGenerator() : Okular::Generator(), m_docInfo( 0 ), m_docSynopsis( 0 ), ready( false ), m_dviRenderer( 0 ) { + setFeature( TextExtraction ); } bool DviGenerator::loadDocument( const QString & fileName, QVector< Okular::Page * > &pagesVector ) @@ -369,17 +370,6 @@ const Okular::DocumentSynopsis *DviGenerator::generateDocumentSynopsis() return m_docSynopsis; } -bool DviGenerator::hasFeature( GeneratorFeature feature ) const -{ - switch ( feature ) - { - case TextExtraction: - return true; - default: ; - } - return false; -} - void DviGenerator::loadPages( QVector< Okular::Page * > &pagesVector, int orientation ) { QSize pageRequiredSize; diff --git a/generators/dvi/generator_dvi.h b/generators/dvi/generator_dvi.h index 483aba10a..7ed6f42cb 100644 --- a/generators/dvi/generator_dvi.h +++ b/generators/dvi/generator_dvi.h @@ -35,8 +35,6 @@ class DviGenerator : public Okular::Generator // table of contents const Okular::DocumentSynopsis *generateDocumentSynopsis(); - bool hasFeature( GeneratorFeature feature ) const; - protected: bool canGeneratePixmap() const; void generatePixmap( Okular::PixmapRequest * request ); diff --git a/generators/ghostview/generator_ghostview.cpp b/generators/ghostview/generator_ghostview.cpp index 7c55872ed..3f9739ade 100644 --- a/generators/ghostview/generator_ghostview.cpp +++ b/generators/ghostview/generator_ghostview.cpp @@ -47,6 +47,7 @@ GSGenerator::GSGenerator() : Okular::Generator(), m_converted(false) { + setFeature( PageSizes ); pixGenerator = 0; asyncGenerator = 0; internalDoc = 0; @@ -479,15 +480,4 @@ const Okular::DocumentInfo * GSGenerator::generateDocumentInfo() return internalDoc->generateDocumentInfo(); } -bool GSGenerator::hasFeature( GeneratorFeature feature ) const -{ - switch ( feature ) - { - case PageSizes: - return true; - default: ; - } - return false; -} - #include "generator_ghostview.moc" diff --git a/generators/ghostview/generator_ghostview.h b/generators/ghostview/generator_ghostview.h index e4b539dc7..f5dc56243 100644 --- a/generators/ghostview/generator_ghostview.h +++ b/generators/ghostview/generator_ghostview.h @@ -50,8 +50,6 @@ class GSGenerator : public Okular::Generator, public Okular::ConfigInterface, pu bool print( KPrinter& /*printer*/ ); QString fileName() const; - bool hasFeature( GeneratorFeature feature ) const; - bool reparseConfig(); void addPages( KConfigDialog* dlg ); diff --git a/generators/kimgio/generator_kimgio.cpp b/generators/kimgio/generator_kimgio.cpp index e93fc9cf9..ff4f4ade4 100644 --- a/generators/kimgio/generator_kimgio.cpp +++ b/generators/kimgio/generator_kimgio.cpp @@ -19,6 +19,7 @@ OKULAR_EXPORT_PLUGIN(KIMGIOGenerator) KIMGIOGenerator::KIMGIOGenerator() : ThreadedGenerator() { + setFeature( ReadRawData ); } KIMGIOGenerator::~KIMGIOGenerator() @@ -76,10 +77,5 @@ bool KIMGIOGenerator::print( KPrinter& printer ) return true; } -bool KIMGIOGenerator::hasFeature( GeneratorFeature feature ) const -{ - return feature == Okular::Generator::ReadRawData; -} - #include "generator_kimgio.moc" diff --git a/generators/kimgio/generator_kimgio.h b/generators/kimgio/generator_kimgio.h index 3d46e1c5e..10a36c6e6 100644 --- a/generators/kimgio/generator_kimgio.h +++ b/generators/kimgio/generator_kimgio.h @@ -29,8 +29,6 @@ class KIMGIOGenerator : public Okular::ThreadedGenerator // [INHERITED] print document using already configured kprinter bool print( KPrinter& printer ); - bool hasFeature( GeneratorFeature feature ) const; - protected: QImage image( Okular::PixmapRequest * request ); diff --git a/generators/poppler/generator_pdf.cpp b/generators/poppler/generator_pdf.cpp index 58263575d..e1e79b234 100644 --- a/generators/poppler/generator_pdf.cpp +++ b/generators/poppler/generator_pdf.cpp @@ -226,6 +226,10 @@ PDFGenerator::PDFGenerator() pixmapRequest( 0 ), docInfoDirty( true ), docSynopsisDirty( true ), docFontsDirty( true ), docEmbeddedFilesDirty( true ) { + setFeature( TextExtraction ); +#ifdef HAVE_POPPLER_HEAD + setFeature( ReadRawData ); +#endif // update the configuration reparseConfig(); // generate the pixmapGeneratorThread @@ -770,20 +774,6 @@ bool PDFGenerator::print( KPrinter& printer ) return false; } -bool PDFGenerator::hasFeature( GeneratorFeature feature ) const -{ - switch ( feature ) - { - case TextExtraction: -#ifdef HAVE_POPPLER_HEAD - case ReadRawData: -#endif - return true; - default: ; - } - return false; -} - QVariant PDFGenerator::metaData( const QString & key, const QVariant & option ) const { if ( key == "StartFullScreen" ) diff --git a/generators/poppler/generator_pdf.h b/generators/poppler/generator_pdf.h index bb473c40d..81f19d880 100644 --- a/generators/poppler/generator_pdf.h +++ b/generators/poppler/generator_pdf.h @@ -73,8 +73,6 @@ class PDFGenerator : public Okular::Generator, public Okular::ConfigInterface // [INHERITED] print page using an already configured kprinter bool print( KPrinter& printer ); - bool hasFeature( GeneratorFeature feature ) const; - // [INHERITED] reply to some metadata requests QVariant metaData( const QString & key, const QVariant & option ) const;