00001
00002
00003
00004
00005
00006
00007 #ifndef SCRIBUS_LOADSAVEPLUGIN_H
00008 #define SCRIBUS_LOADSAVEPLUGIN_H
00009
00010 #include "scplugin.h"
00011
00012 #include <QString>
00013 #include <QRegExp>
00014 #include <QIODevice>
00015 #include <QProgressBar>
00016 #include <QStringList>
00017 #include <QList>
00018
00019 class FileFormat;
00020
00021
00022
00023 #include "scfonts.h"
00024 #include "scribusdoc.h"
00025 #include "scribusview.h"
00026
00027
00028
00029
00030
00031
00032
00033
00034 class SCRIBUS_API LoadSavePlugin : public ScPlugin
00035 {
00036 Q_OBJECT
00037
00038 public:
00039
00040 LoadSavePlugin();
00041 ~LoadSavePlugin();
00042
00043 enum loadFlags
00044 {
00045 lfCreateDoc = 1,
00046 lfUseCurrentPage = 2,
00047 lfInsertPage = 4,
00048 lfInteractive = 8,
00049 lfScripted = 16
00050 };
00051
00052
00053
00054
00055
00056
00057 static const QStringList fileDialogLoadFilter();
00058
00059
00060 static const QStringList fileDialogSaveFilter();
00061
00062
00063
00064 static const FileFormat * getFormatById(const int id);
00065
00066
00067
00068
00069
00070 virtual bool loadFile(const QString & fileName, const FileFormat & fmt, int flags, int index = 0);
00071
00072
00073 virtual bool saveFile(const QString & fileName, const FileFormat & fmt);
00074
00075
00076
00077
00078 virtual const QString& lastSavedFile(void);
00079
00080
00081
00082
00083
00084
00085 virtual bool fileSupported(QIODevice* file, const QString & fileName=QString::null) const = 0;
00086
00087
00088
00089
00090 static const QList<FileFormat> & supportedFormats();
00091
00092 virtual void setupTargets(ScribusDoc *targetDoc, ScribusView* targetView, ScribusMainWindow* targetMW, QProgressBar* targetMWPRogressBar, SCFonts* targetAvailableFonts);
00093 virtual void getReplacedFontData(bool & getNewReplacement, QMap<QString,QString> &getReplacedFonts, QList<ScFace> &getDummyScFaces);
00094 virtual bool loadPage(const QString & fileName, int pageNumber, bool Mpage, QString renamedPageName=QString::null);
00095 virtual bool readStyles(const QString& fileName, ScribusDoc* doc, StyleSet<ParagraphStyle> &docParagraphStyles);
00096 virtual bool readCharStyles(const QString& fileName, ScribusDoc* doc, StyleSet<CharStyle> &docCharStyles);
00097 virtual bool readLineStyles(const QString& fileName, QMap<QString,multiLine> *Sty);
00098 virtual bool readColors(const QString& fileName, ColorList & colors);
00099 virtual bool readPageCount(const QString& fileName, int *num1, int *num2, QStringList & masterPageNames);
00100
00101 protected:
00102
00104 virtual bool checkFlags(int flags);
00105
00107 void registerFormat(const FileFormat & fmt);
00108
00110 void unregisterFormat(unsigned int id);
00111
00113 void unregisterAll();
00114
00115 ScribusDoc* m_Doc;
00116 ScribusView* m_View;
00117 ScribusMainWindow* m_ScMW;
00118 QProgressBar* m_mwProgressBar;
00119 SCFonts* m_AvailableFonts;
00120 QString m_lastSavedFile;
00121
00122 private:
00123
00124
00125
00126
00127 static QList<FileFormat> formats;
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138 static QList<FileFormat>::iterator findFormat(unsigned int id,
00139 LoadSavePlugin* plug = 0,
00140 QList<FileFormat>::iterator it = formats.begin());
00141
00142 static QList<FileFormat>::iterator findFormat(const QString& extension,
00143 LoadSavePlugin* plug = 0,
00144 QList<FileFormat>::iterator it = formats.begin());
00145
00146
00147 static void printFormatList();
00148
00149
00150 static const QStringList getDialogFilter(bool forLoad);
00151 };
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165 class SCRIBUS_API FileFormat
00166 {
00167 public:
00168
00169 FileFormat() : load(false), save(false), plug(0) {}
00170
00171 FileFormat(LoadSavePlugin * plug) : load(false), save(false), plug(plug) {}
00172
00173 bool loadFile(const QString & fileName, int flags, int index = 0) const;
00174
00175 bool saveFile(const QString & fileName) const;
00176
00177 QString lastSavedFile(void) const;
00178
00179 void setupTargets(ScribusDoc *targetDoc, ScribusView* targetView, ScribusMainWindow* targetMW, QProgressBar* targetMWPRogressBar, SCFonts* targetAvailableFonts) const;
00180 void getReplacedFontData(bool & getNewReplacement, QMap<QString,QString> &getReplacedFonts, QList<ScFace> &getDummyScFaces) const;
00181 bool loadPage(const QString & fileName, int pageNumber, bool Mpage, QString renamedPageName=QString::null) const;
00182 bool readStyles(const QString& fileName, ScribusDoc* doc, StyleSet<ParagraphStyle> &docParagraphStyles) const;
00183 bool readCharStyles(const QString& fileName, ScribusDoc* doc, StyleSet<CharStyle> &docCharStyles) const;
00184 bool readLineStyles(const QString& fileName, QMap<QString,multiLine> *Sty) const;
00185 bool readColors(const QString& fileName, ColorList & colors) const;
00186 bool readPageCount(const QString& fileName, int *num1, int *num2, QStringList & masterPageNames) const;
00187
00188
00189
00190
00191
00192
00193
00194
00195
00196
00197 uint formatId;
00198
00199 QString trName;
00200
00201
00202 QString filter;
00203
00204 QRegExp nameMatch;
00205
00206 QStringList mimeTypes;
00207
00208 bool load;
00209
00210 bool save;
00211
00212
00213
00214
00215
00216
00217 unsigned short int priority;
00218
00219
00220 LoadSavePlugin * plug;
00221
00222 };
00223
00224
00225
00226 #endif