/usr/include/scribus/loadsaveplugin.h is in scribus 1.4.0.dfsg+r17300-1.1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 | /*
For general Scribus (>=1.3.2) copyright and licensing information please refer
to the COPYING file provided with the program. Following this notice may exist
a copyright and/or license notice that predates the release of Scribus 1.3.2
for which a new license (GPL+exception) is in place.
*/
#ifndef SCRIBUS_LOADSAVEPLUGIN_H
#define SCRIBUS_LOADSAVEPLUGIN_H
#include "scplugin.h"
#include <QString>
#include <QRegExp>
#include <QIODevice>
#include <QProgressBar>
#include <QStringList>
#include <QList>
class FileFormat;
//TODO REmove includes one day
//class ScribusDoc;
//class ScribusView;
#include "scfonts.h"
#include "scribusdoc.h"
#include "scribusview.h"
/*!
* @brief Superclass for all file import/export/load/save plugins
*
* This class provides the interface common to all file load/save/import/export
* plugins. It provides the facilities for discovering what format(s) a plugin
* supports, how they should be identified, etc.
*/
class SCRIBUS_API LoadSavePlugin : public ScPlugin
{
Q_OBJECT
public:
// Construct a plugin instance.
LoadSavePlugin();
~LoadSavePlugin();
enum loadFlags
{
lfCreateDoc = 1,
lfUseCurrentPage = 2,
lfInsertPage = 4,
lfInteractive = 8,
lfScripted = 16
};
// Static functions:
// Return a list of format descriptions suitable for use with
// QFileDialog. You can convert it to QString form with
// fileDialogSaveFilter().join(";;")
static const QStringList fileDialogLoadFilter();
// Same deal but for save
static const QStringList fileDialogSaveFilter();
// Get the highest priority format of a given id, or 0 if
// not found / not available.
static const FileFormat * getFormatById(const int id);
// Non-static members implemented by plugins:
//
// Load the requested format from the specified path.
// Default implementation always reports failure.
virtual bool loadFile(const QString & fileName, const FileFormat & fmt, int flags, int index = 0);
// Save the requested format to the requested path.
virtual bool saveFile(const QString & fileName, const FileFormat & fmt);
// Return last file saved, this may be the last fileName argument passed to saveFile(),
// a temporary file name or an empty string if last call to saveFile() could not create
// a valid file
virtual const QString& lastSavedFile(void);
// Examine the passed file and test to see whether it appears to be
// loadable with this plugin. This test must be quick and simple.
// It need not verify a file, just confirm that it looks like a supported
// file type (eg "XML doc with root element SCRIBUSXML and version 1.3.1").
// All plugins must implement this method.
virtual bool fileSupported(QIODevice* file, const QString & fileName=QString::null) const = 0;
// Return a list of all formats supported by all currently loaded and
// active plugins. This list is sorted in a very specific order:
// First, by descending order of `id', then descending order of priority.
static const QList<FileFormat> & supportedFormats();
virtual void setupTargets(ScribusDoc *targetDoc, ScribusView* targetView, ScribusMainWindow* targetMW, QProgressBar* targetMWPRogressBar, SCFonts* targetAvailableFonts);
virtual void getReplacedFontData(bool & getNewReplacement, QMap<QString,QString> &getReplacedFonts, QList<ScFace> &getDummyScFaces);
virtual bool loadPage(const QString & fileName, int pageNumber, bool Mpage, QString renamedPageName=QString::null);
virtual bool readStyles(const QString& fileName, ScribusDoc* doc, StyleSet<ParagraphStyle> &docParagraphStyles);
virtual bool readCharStyles(const QString& fileName, ScribusDoc* doc, StyleSet<CharStyle> &docCharStyles);
virtual bool readLineStyles(const QString& fileName, QMap<QString,multiLine> *Sty);
virtual bool readColors(const QString& fileName, ColorList & colors);
virtual bool readPageCount(const QString& fileName, int *num1, int *num2, QStringList & masterPageNames);
protected:
/// Check a loadFlags combination
virtual bool checkFlags(int flags);
/// Register the passed format so it can be used by the app
void registerFormat(const FileFormat & fmt);
/// Unregister the format with format ID `id' that references by the calling plugin.
void unregisterFormat(unsigned int id);
/// Unregister all formats owned by the calling plugin
void unregisterAll();
// Set standard message for file read errors
virtual void setFileReadError();
// Set standard message for dom style errors with line and column
virtual void setDomParsingError(const QString& msg, int line, int column);
ScribusDoc* m_Doc;
ScribusView* m_View; //For 1.2.x loader at the moment
ScribusMainWindow* m_ScMW; //For plugins when required
QProgressBar* m_mwProgressBar;
SCFonts* m_AvailableFonts;
QString m_lastSavedFile;
private:
// A list of all supported formats. This is maintained by plugins
// using the protected `registerFormat(...)', `unregisterFormat(...)'
// and `unregisterAll(...)' methods. This is sorted in a very specific
// order - ascending ID, then descending priority.
static QList<FileFormat> formats;
// Return an iterator referencing the first format structure named `name'.
// If specified, only return formats implmented by `plug'.
// If `start' is specified, start searching at this iterator rather than the
// start of the list.
// The end iterator is returned if no match was found.
// Note that due to the sort order maintained in `formats', the first
// iterator returned by this method will always be to the highest
// priority format of the required ID, and each subsequent call will
// return the next lowest priority format.
static QList<FileFormat>::iterator findFormat(unsigned int id,
LoadSavePlugin* plug = 0,
QList<FileFormat>::iterator it = formats.begin());
static QList<FileFormat>::iterator findFormat(const QString& extension,
LoadSavePlugin* plug = 0,
QList<FileFormat>::iterator it = formats.begin());
// Print out a format list for debugging purposes
static void printFormatList();
// Base implementation for fileDialogLoadFilter and fileDialogSaveFilter
static const QStringList getDialogFilter(bool forLoad);
};
// Info on each supported format. A plugin must register a
// FileFormat structure for every format it knows how to load or
// save. If it both loads and saves a given format, one structure must
// be registered for load and one for save.
// Plugins must unregister formats when being unloaded to ensure that
// no attempt is made to load a file using a plugin that's no longer
// available.
//
// This class also provides methods to ask the implementation to load / save a
// file in this format.
class SCRIBUS_API FileFormat
{
public:
// Default ctor to make QValueList happy
FileFormat() : load(false), save(false), plug(0) {}
// Standard ctor that sets up a valid FileFormat
FileFormat(LoadSavePlugin * plug) : load(false), save(false), plug(plug) {}
// Load a file with this format
bool loadFile(const QString & fileName, int flags, int index = 0) const;
// Save a file with this format
bool saveFile(const QString & fileName) const;
// Get last saved file
QString lastSavedFile(void) const;
void setupTargets(ScribusDoc *targetDoc, ScribusView* targetView, ScribusMainWindow* targetMW, QProgressBar* targetMWPRogressBar, SCFonts* targetAvailableFonts) const;
void getReplacedFontData(bool & getNewReplacement, QMap<QString,QString> &getReplacedFonts, QList<ScFace> &getDummyScFaces) const;
bool loadPage(const QString & fileName, int pageNumber, bool Mpage, QString renamedPageName=QString::null) const;
bool readStyles(const QString& fileName, ScribusDoc* doc, StyleSet<ParagraphStyle> &docParagraphStyles) const;
bool readCharStyles(const QString& fileName, ScribusDoc* doc, StyleSet<CharStyle> &docCharStyles) const;
bool readLineStyles(const QString& fileName, QMap<QString,multiLine> *Sty) const;
bool readColors(const QString& fileName, ColorList & colors) const;
bool readPageCount(const QString& fileName, int *num1, int *num2, QStringList & masterPageNames) const;
//
// Data members
//
// An integer ID code used to idenfify formats. Should be unique
// across all FileFormat structures except where they implement
// support for the same file format, eg sla 1.2.x, sla 1.3.x and
// "new format" SLA should all have equal IDs (with different
// priorities to control what order they're tried in when a user
// tries to open a file).
// Note that dialog box options are sorted in descending `id' order.
uint formatId;
// The human-readable, translated name of this file format.
QString trName;
// A filter in the format used by QFileDialog that should be used to
// select for this format.
QString filter;
// Regexp to match filenames for this format
QRegExp nameMatch;
// MIME type(s) that should be matched by this format.
QStringList mimeTypes;
// Can we load it?
bool load;
// Can we save it?
bool save;
// Priority of this format from 0 (lowest, tried last) to
// 255 (highest, tried first). 64-128 recommended in general.
// Priority controls the order options are displayed in when a file
// of a given type is selected in a dialog, and controls the order
// loaders are tried in when multiple plugins support the same file
// type.
unsigned short int priority;
// For convenience, a pointer back to the plugin to use to open
// this format.
LoadSavePlugin * plug;
// LoadSavePlugin * const plug;
};
#endif
|