Rev 19420 |
Rev 20101 |
Go to most recent revision |
Blame |
Compare with Previous |
Last modification |
View Log
| RSS feed
/*
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 "commonstrings.h"
#include "importcdr.h"
#include "importcdrplugin.h"
#include "prefscontext.h"
#include "prefsfile.h"
#include "prefsmanager.h"
#include "scpage.h"
#include "scraction.h"
#include "scribuscore.h"
#include "undomanager.h"
#include "util_formats.h"
#include "ui/customfdialog.h"
#include "ui/scmessagebox.h"
#include "ui/scmwmenumanager.h"
#include <QMessageBox>
int importcdr_getPluginAPIVersion()
{
return PLUGIN_API_VERSION;
}
ScPlugin* importcdr_getPlugin()
{
ImportCdrPlugin* plug = new ImportCdrPlugin();
Q_CHECK_PTR(plug);
return plug;
}
void importcdr_freePlugin(ScPlugin* plugin)
{
ImportCdrPlugin* plug = dynamic_cast<ImportCdrPlugin*>(plugin);
Q_ASSERT(plug);
delete plug;
}
ImportCdrPlugin::ImportCdrPlugin() : LoadSavePlugin(),
importAction(new ScrAction(ScrAction::DLL, QPixmap(), QPixmap(), "", QKeySequence(), this))
{
// Set action info in languageChange, so we only have to do it in one
// place. This includes registering file format support.
registerFormats();
languageChange();
}
void ImportCdrPlugin::languageChange()
{
importAction->setText( tr("Import Corel Draw..."));
FileFormat* fmt = getFormatByExt("cdr");
fmt->trName = tr("Corel Draw");
fmt->filter = tr("Corel Draw CDR (*.cdr *.CDR)");
}
ImportCdrPlugin::~ImportCdrPlugin()
{
unregisterAll();
}
const QString ImportCdrPlugin::fullTrName() const
{
return QObject::tr("Corel Draw Importer");
}
const ScActionPlugin::AboutData* ImportCdrPlugin::getAboutData() const
{
AboutData* about = new AboutData;
about->authors = "Franz Schmid <franz@scribus.info>";
about->shortDescription = tr("Imports Corel Draw Files");
about->description = tr("Imports most Corel Draw files into the current document,\nconverting their vector data into Scribus objects.");
about->license = "GPL";
Q_CHECK_PTR(about);
return about;
}
void ImportCdrPlugin::deleteAboutData(const AboutData* about) const
{
Q_ASSERT(about);
delete about;
}
void ImportCdrPlugin::registerFormats()
{
FileFormat fmt(this);
fmt.trName = tr("Corel Draw");
fmt.filter = tr("Corel Draw (*.cdr *.CDR)");
fmt.formatId = 0;
fmt.fileExtensions = QStringList() << "cdr";
fmt.load = true;
fmt.save = false;
fmt.thumb = true;
fmt.colorReading = true;
fmt.mimeTypes = QStringList();
fmt.mimeTypes.append("application/x-coreldraw");
fmt.priority = 64; // Priority
registerFormat(fmt);
}
bool ImportCdrPlugin::fileSupported(QIODevice* /* file */, const QString & fileName) const
{
return true;
}
bool ImportCdrPlugin::loadFile(const QString & fileName, const FileFormat &, int flags, int /*index*/)
{
// There's only one format to handle, so we just call import(...)
return import(fileName, flags);
}
bool ImportCdrPlugin::import(QString fileName, int flags)
{
if (!checkFlags(flags))
return false;
if( fileName.isEmpty() )
{
flags |= lfInteractive;
PrefsContext* prefs = PrefsManager::instance()->prefsFile->getPluginContext("importcdr");
QString wdir = prefs->get("wdir", ".");
CustomFDialog diaf(ScCore->primaryMainWindow(), wdir, QObject::tr("Open"), tr("All Supported Formats")+" (*.cdr *.CDR);;All Files (*)");
if (diaf.exec())
{
fileName = diaf.selectedFile();
prefs->set("wdir", fileName.left(fileName.lastIndexOf("/")));
}
else
return true;
}
m_Doc=ScCore->primaryMainWindow()->doc;
UndoTransaction activeTransaction;
bool emptyDoc = (m_Doc == NULL);
bool hasCurrentPage = (m_Doc && m_Doc->currentPage());
TransactionSettings trSettings;
trSettings.targetName = hasCurrentPage ? m_Doc->currentPage()->getUName() : "";
trSettings.targetPixmap = Um::IImageFrame;
trSettings.actionName = Um::ImportXfig;
trSettings.description = fileName;
trSettings.actionPixmap = Um::IXFIG;
if (emptyDoc || !(flags & lfInteractive) || !(flags & lfScripted))
UndoManager::instance()->setUndoEnabled(false);
if (UndoManager::undoEnabled())
activeTransaction = UndoManager::instance()->beginTransaction(trSettings);
CdrPlug *dia = new CdrPlug(m_Doc, flags);
Q_CHECK_PTR(dia);
if (!dia->import(fileName, trSettings, flags))
{
ScribusMainWindow* mw=(m_Doc==0) ? ScCore->primaryMainWindow() : m_Doc->scMW();
//Import per Uniconverter
qDebug() << "ERROR: Parsing with libcdr failed! Trying now Uniconverter.";
const FileFormat *fmt = LoadSavePlugin::getFormatByExt("cdt");
if (!fmt)
{
ScMessageBox::warning(mw, CommonStrings::trWarning, tr("The Uniconverter Import plugin could not be found"));
return false;
}
flags &= ~LoadSavePlugin::lfCreateDoc;
flags |= LoadSavePlugin::lfInsertPage;
if (!fmt->loadFile(fileName, flags))
{
if (flags & LoadSavePlugin::lfCreateDoc)
{
ScMessageBox::warning(mw, CommonStrings::trWarning, tr("Parsing failed!\n\nPlease submit your file (if possible) to the\nDocument Liberation Project http://www.documentliberation.org"));
}
return false;
}
}
if (activeTransaction)
activeTransaction.commit();
if (emptyDoc || !(flags & lfInteractive) || !(flags & lfScripted))
UndoManager::instance()->setUndoEnabled(true);
delete dia;
return true;
}
QImage ImportCdrPlugin::readThumbnail(const QString& fileName)
{
if( fileName.isEmpty() )
return QImage();
UndoManager::instance()->setUndoEnabled(false);
m_Doc = NULL;
CdrPlug *dia = new CdrPlug(m_Doc, lfCreateThumbnail);
Q_CHECK_PTR(dia);
QImage ret = dia->readThumbnail(fileName);
UndoManager::instance()->setUndoEnabled(true);
delete dia;
return ret;
}