summaryrefslogtreecommitdiffstats
path: root/scribus/loadsaveplugin.cpp
diff options
context:
space:
mode:
authorcraig <craig@11d20701-8431-0410-a711-e3c959e3b870>2012-01-01 11:40:09 +0000
committercraig <craig@11d20701-8431-0410-a711-e3c959e3b870>2012-01-01 11:40:09 +0000
commit7ed83b6c6666eb8b6b104c211ae7e52907350372 (patch)
tree4430b556abac0ad660a0aacf1887d77f85d8be02 /scribus/loadsaveplugin.cpp
downloadscribus-7ed83b6c6666eb8b6b104c211ae7e52907350372.tar.gz
scribus-7ed83b6c6666eb8b6b104c211ae7e52907350372.tar.xz
scribus-7ed83b6c6666eb8b6b104c211ae7e52907350372.zip
Branch 1.3.5 tree to 1.4.x tree, goodbye 1.3.x
git-svn-id: svn://scribus.net/branches/Version14x/Scribus@17163 11d20701-8431-0410-a711-e3c959e3b870
Diffstat (limited to 'scribus/loadsaveplugin.cpp')
-rw-r--r--scribus/loadsaveplugin.cpp360
1 files changed, 360 insertions, 0 deletions
diff --git a/scribus/loadsaveplugin.cpp b/scribus/loadsaveplugin.cpp
new file mode 100644
index 0000000..c99e4fd
--- /dev/null
+++ b/scribus/loadsaveplugin.cpp
@@ -0,0 +1,360 @@
+/*
+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.
+*/
+#include "loadsaveplugin.h"
+#include "commonstrings.h"
+#include "scribuscore.h"
+#include <QList>
+
+QList<FileFormat> LoadSavePlugin::formats;
+
+LoadSavePlugin::LoadSavePlugin()
+ : ScPlugin(),
+ m_Doc(0),
+ m_View(0),
+ m_ScMW(0),
+ m_mwProgressBar(0),
+ m_AvailableFonts(0)
+{
+}
+
+LoadSavePlugin::~LoadSavePlugin()
+{
+}
+
+// STATIC method - return a list of all existing formats
+const QList<FileFormat> & LoadSavePlugin::supportedFormats()
+{
+ return formats;
+}
+
+const FileFormat * LoadSavePlugin::getFormatById(const int id)
+{
+ QList<FileFormat>::iterator it(findFormat(id));
+ if (it == formats.end())
+ return 0;
+ else
+ return &(*it);
+}
+
+const QStringList LoadSavePlugin::fileDialogLoadFilter()
+{
+ return getDialogFilter(true);
+}
+
+const QStringList LoadSavePlugin::fileDialogSaveFilter()
+{
+ return getDialogFilter(false);
+}
+
+const QStringList LoadSavePlugin::getDialogFilter(bool forLoad)
+{
+ QList<FileFormat>::const_iterator it(formats.constBegin());
+ QList<FileFormat>::const_iterator itEnd(formats.constEnd());
+ QStringList filterList;
+ // We know the list is sorted by id, then priority, so we can just take the
+ // highest priority entry for each ID, and we can start with the first entry
+ // in the list.
+ //First, check if we even have any plugins to load with
+ if (it!=itEnd)
+ {
+ filterList.append((*it).filter);
+ unsigned int lastID = (*it).formatId;
+ ++it;
+ for ( ; it != itEnd ; ++it )
+ {
+ // Find the next load/save (as appropriate) plugin for the next format type
+ if ( (forLoad ? (*it).load : (*it).save) && ((*it).formatId > lastID) )
+ {
+ // And add it to the filter list, since we know it's
+ // the highest priority because of the sort order.
+ filterList.append((*it).filter);
+ lastID = (*it).formatId;
+ }
+ }
+ }
+ else
+ qDebug("%s", tr("No File Loader Plugins Found").toLocal8Bit().data());
+ filterList.append( tr("All Files (*)"));
+ return filterList;
+}
+
+bool LoadSavePlugin::saveFile(const QString & /* fileName */,
+ const FileFormat & /* fmt */)
+{
+ return false;
+}
+
+void LoadSavePlugin::setFileReadError()
+{
+ m_lastError = tr("An error occured while opening file or file is damaged");
+}
+
+void LoadSavePlugin::setDomParsingError(const QString& msg, int line, int column)
+{
+ m_lastError = tr("An error occured while parsing file at line %1, column %2 :\n%3").arg(line).arg(column).arg(msg);
+}
+
+const QString& LoadSavePlugin::lastSavedFile(void)
+{
+ return m_lastSavedFile;
+}
+
+bool LoadSavePlugin::loadFile(const QString & /* fileName */,
+ const FileFormat & /* fmt */,
+ int /* flags */,
+ int /* index */)
+{
+ return false;
+}
+
+bool LoadSavePlugin::checkFlags(int flags)
+{
+ int numFlags = 0;
+ // Only one of the following flags must be set:
+ // lfCreateDoc, lfUseCurrentPage, lfInsertPage
+ if( flags & lfCreateDoc )
+ numFlags++;
+ if( flags & lfUseCurrentPage )
+ numFlags++;
+ if( flags & lfInsertPage )
+ numFlags++;
+ if( numFlags > 1 )
+ return false;
+ return true;
+}
+
+void LoadSavePlugin::registerFormat(const FileFormat & fmt)
+{
+ // We insert the format in a very specific location so that the formats
+ // list is sorted by ascending id, then descending priority.
+ // We first look for entries with equal or greater ID, then equal or
+ // lesser priority, and insert before the first item that is of either:
+ // - Equal ID and lesser or equal priority; or
+ // - Greater ID
+ // If we don't find one, we insert before the end iterator, ie append.
+ QList<FileFormat>::iterator it(formats.begin());
+ QList<FileFormat>::iterator itEnd(formats.end());
+ while (it != itEnd)
+ {
+ if ( ( ((*it).formatId == fmt.formatId) && ((*it).priority <= fmt.priority) ) ||
+ ((*it).formatId > fmt.formatId))
+ break;
+ ++it;
+ }
+ formats.insert(it, fmt);
+ //printFormatList(); // DEBUG
+}
+
+// static debugging function - prints the human readable format list
+void LoadSavePlugin::printFormatList()
+{
+ qDebug("Current format list:");
+ QList<FileFormat>::const_iterator it(formats.constBegin());
+ QList<FileFormat>::const_iterator itEnd(formats.constEnd());
+ for ( ; it != itEnd ; ++it )
+ {
+ qDebug(" Format: Id: %3u, Prio: %3hu, Name: %s",
+ (*it).formatId, (*it).priority, (*it).trName.toLocal8Bit().data() );
+ }
+ qDebug("Done");
+}
+
+void LoadSavePlugin::unregisterFormat(unsigned int id)
+{
+ QList<FileFormat>::iterator it(findFormat(id, this));
+ Q_ASSERT(it != formats.end());
+ formats.erase(it);
+}
+
+void LoadSavePlugin::unregisterAll()
+{
+ QList<FileFormat>::iterator it(formats.begin());
+ QList<FileFormat>::iterator itEnd(formats.end());
+ while (it != formats.end())
+ {
+ if ((*it).plug == this)
+ it = formats.erase(it);
+ else
+ ++it;
+ }
+}
+
+QList<FileFormat>::iterator
+LoadSavePlugin::findFormat(unsigned int id,
+ LoadSavePlugin* plug,
+ QList<FileFormat>::iterator it)
+{
+ QList<FileFormat>::iterator itEnd(formats.end());
+ for ( ; it != itEnd ; ++it )
+ {
+ if (
+ ((*it).formatId == id) &&
+ ((plug == 0) || (plug == (*it).plug))
+ )
+ return it;
+ }
+ return itEnd;
+}
+
+QList<FileFormat>::iterator
+LoadSavePlugin::findFormat(const QString& extension,
+ LoadSavePlugin* plug,
+ QList<FileFormat>::iterator it)
+{
+ QList<FileFormat>::iterator itEnd(formats.end());
+ for ( ; it != itEnd ; ++it )
+ {
+ if (
+ ((*it).nameMatch.indexIn(extension)) &&
+ ((plug == 0) || (plug == (*it).plug))
+ )
+ return it;
+ }
+ return itEnd;
+}
+
+
+void LoadSavePlugin::setupTargets(ScribusDoc *targetDoc, ScribusView* targetView, ScribusMainWindow* targetMW, QProgressBar* targetMWPRogressBar, SCFonts* targetAvailableFonts)
+{
+ m_Doc=targetDoc;
+ m_View=targetView;
+ m_ScMW=targetMW;
+ m_mwProgressBar=targetMWPRogressBar;
+ m_AvailableFonts=targetAvailableFonts;
+}
+
+void LoadSavePlugin::getReplacedFontData(bool & /*getNewReplacement*/, QMap<QString,QString> &/*getReplacedFonts*/, QList<ScFace> &/*getDummyScFaces*/)
+{
+}
+
+bool LoadSavePlugin::loadPage(const QString & /*fileName*/, int /*pageNumber*/, bool /*Mpage*/, QString /*renamedPageName*/)
+{
+ return false;
+}
+
+bool LoadSavePlugin::readStyles(const QString& /*fileName*/, ScribusDoc* /*doc*/, StyleSet<ParagraphStyle> &/*docParagraphStyles*/)
+{
+ return false;
+}
+
+bool LoadSavePlugin::readCharStyles(const QString& /*fileName*/, ScribusDoc* /*doc*/, StyleSet<CharStyle> &/*docCharStyles*/)
+{
+ return false;
+}
+
+bool LoadSavePlugin::readLineStyles(const QString& /*fileName*/, QMap<QString,multiLine>* /*Sty*/)
+{
+ return false;
+}
+
+bool LoadSavePlugin::readColors(const QString& /*fileName*/, ColorList & /*colors*/)
+{
+ return false;
+}
+
+bool LoadSavePlugin::readPageCount(const QString& /*fileName*/, int* /*num1*/, int* /*num2*/, QStringList & /*masterPageNames*/)
+{
+ return false;
+}
+
+bool FileFormat::loadFile(const QString & fileName, int flags, int index) const
+{
+ if (plug && load)
+ {
+ plug->clearLastError();
+ bool success = plug->loadFile(fileName, *this, flags, index);
+ if (!success && plug->hasLastError())
+ {
+ if (ScCore->usingGUI())
+ {
+ QMessageBox::warning(ScCore->primaryMainWindow(), CommonStrings::trWarning,
+ plug->lastError(), CommonStrings::tr_OK);
+ }
+ else
+ {
+ qDebug() << plug->lastError();
+ }
+ }
+ return success;
+ }
+ return false;
+}
+
+bool FileFormat::saveFile(const QString & fileName) const
+{
+ return (plug && save) ? plug->saveFile(fileName, *this) : false;
+}
+
+QString FileFormat::lastSavedFile(void) const
+{
+ if (plug)
+ return plug->lastSavedFile();
+ return QString();
+}
+
+void FileFormat::setupTargets(ScribusDoc *targetDoc, ScribusView* targetView, ScribusMainWindow* targetMW, QProgressBar* targetMWPRogressBar, SCFonts* targetAvailableFonts) const
+{
+ if (plug)
+ plug->setupTargets(targetDoc, targetView, targetMW, targetMWPRogressBar, targetAvailableFonts);
+}
+
+void FileFormat::getReplacedFontData(bool & getNewReplacement, QMap<QString,QString> &getReplacedFonts, QList<ScFace> &getDummyScFaces) const
+{
+ if (plug)
+ plug->getReplacedFontData(getNewReplacement, getReplacedFonts, getDummyScFaces);
+}
+
+bool FileFormat::loadPage(const QString & fileName, int pageNumber, bool Mpage, QString renamedPageName) const
+{
+ if (plug && load)
+ {
+ plug->clearLastError();
+ bool success = plug->loadPage(fileName, pageNumber, Mpage, renamedPageName);
+ if (!success && plug->hasLastError())
+ {
+ if (ScCore->usingGUI())
+ {
+ QMessageBox::warning(ScCore->primaryMainWindow(), CommonStrings::trWarning,
+ plug->lastError(), CommonStrings::tr_OK);
+ }
+ else
+ {
+ qDebug() << plug->lastError();
+ }
+ }
+ return success;
+ }
+ return false;
+}
+
+bool FileFormat::readStyles(const QString& fileName, ScribusDoc* doc, StyleSet<ParagraphStyle> &docParagraphStyles) const
+{
+ return (plug && load) ? plug->readStyles(fileName, doc, docParagraphStyles) : false;
+}
+
+bool FileFormat::readCharStyles(const QString& fileName, ScribusDoc* doc, StyleSet<CharStyle> &docCharStyles) const
+{
+ return (plug && load) ? plug->readCharStyles(fileName, doc, docCharStyles) : false;
+}
+
+bool FileFormat::readLineStyles(const QString& fileName, QMap<QString,multiLine> *Sty) const
+{
+ return (plug && load) ? plug->readLineStyles(fileName, Sty) : false;
+}
+
+bool FileFormat::readColors(const QString& fileName, ColorList & colors) const
+{
+ return (plug && load) ? plug->readColors(fileName, colors) : false;
+}
+
+bool FileFormat::readPageCount(const QString& fileName, int *num1, int *num2, QStringList & masterPageNames) const
+{
+ return (plug && load) ? plug->readPageCount(fileName, num1, num2, masterPageNames) : false;
+}
+
+
+