00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
#ifndef __koffice_filter_h__
00021
#define __koffice_filter_h__
00022
00023
#include <qobject.h>
00024
#include <qmap.h>
00025
#include <qptrstack.h>
00026
00027
class QIODevice;
00028
class KoFilterChain;
00029
00047 class KoFilter :
public QObject
00048 {
00049 Q_OBJECT
00050
00051
friend class KoFilterEntry;
00052
friend class KoFilterChain;
00053
00054
public:
00061 enum ConversionStatus { OK, StupidError, UsageError, CreationError, FileNotFound,
00062 StorageCreationError, BadMimeType, BadConversionGraph,
00063 EmbeddedDocError, WrongFormat, NotImplemented,
00064 ParsingError, InternalError, UnexpectedEOF,
00065 UnexpectedOpcode, UserCancelled, OutOfMemory,
00066 JustInCaseSomeBrokenCompilerUsesLessThanAByte = 255 };
00067
00068
virtual ~
KoFilter();
00069
00081
virtual ConversionStatus convert(
const QCString& from,
const QCString& to ) = 0;
00082
00083 signals:
00091
void sigProgress(
int value );
00092
00093
protected:
00097
KoFilter();
00098
00104 KoFilterChain*
m_chain;
00105
00106
private:
00107
KoFilter(
const KoFilter& rhs );
00108
KoFilter& operator=(
const KoFilter& rhs );
00109
00110
class Private;
00111 Private* d;
00112 };
00113
00114
00142 class KoEmbeddingFilter :
public KoFilter
00143 {
00144 Q_OBJECT
00145
00146
friend class KoFilterChain;
00147
00148
public:
00149
virtual ~
KoEmbeddingFilter();
00150
00159
int lruPartIndex()
const;
00160
00167
static QString mimeTypeByExtension(
const QString& extension );
00168
00169
protected:
00174
KoEmbeddingFilter();
00175
00197
int embedPart(
const QCString& from,
QCString& to,
00198 KoFilter::ConversionStatus& status,
00199
const QString& key = QString::null );
00200
00211
void startInternalEmbedding(
const QString& key,
const QCString& mimeType );
00212
00219
void endInternalEmbedding();
00220
00230
int internalPartReference(
const QString& key )
const;
00231
00240
QCString internalPartMimeType(
const QString& key )
const;
00241
00242
private:
00243
00244
00245
struct PartReference
00246 {
00247 PartReference(
int index = -1,
const QCString& mimeType =
"" );
00248
bool isValid()
const;
00249
00250
int m_index;
00251
QCString m_mimeType;
00252 };
00253
00254
00255
00256
00257
00258
struct PartState
00259 {
00260 PartState();
00261
00262
int m_lruPartIndex;
00263
QMap<QString, PartReference> m_partReferences;
00264 };
00265
00266
00267
KoEmbeddingFilter(
const KoEmbeddingFilter& rhs );
00268
KoEmbeddingFilter& operator=(
const KoEmbeddingFilter& rhs );
00269
00280
virtual void savePartContents(
QIODevice* file );
00281
00282
00283
00284
00285
void filterChainEnterDirectory(
const QString& directory )
const;
00286
void filterChainLeaveDirectory()
const;
00287
00288
00289
00290
QPtrStack<PartState> m_partStack;
00291
00292
class Private;
00293 Private* d;
00294 };
00295
00296
#endif