importpsplugin.cpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007 #include "commonstrings.h"
00008 #include "customfdialog.h"
00009 #include "importps.h"
00010 #include "importpsplugin.h"
00011 #include "menumanager.h"
00012 #include "page.h"
00013 #include "prefscontext.h"
00014 #include "prefsfile.h"
00015 #include "prefsmanager.h"
00016 #include "scraction.h"
00017 #include "scribuscore.h"
00018 #include "undomanager.h"
00019 #include "util_formats.h"
00020
00021 int importps_getPluginAPIVersion()
00022 {
00023 return PLUGIN_API_VERSION;
00024 }
00025
00026 ScPlugin* importps_getPlugin()
00027 {
00028 ImportPSPlugin* plug = new ImportPSPlugin();
00029 Q_CHECK_PTR(plug);
00030 return plug;
00031 }
00032
00033 void importps_freePlugin(ScPlugin* plugin)
00034 {
00035 ImportPSPlugin* plug = dynamic_cast<ImportPSPlugin*>(plugin);
00036 Q_ASSERT(plug);
00037 delete plug;
00038 }
00039
00040 ImportPSPlugin::ImportPSPlugin() : LoadSavePlugin(),
00041 importAction(new ScrAction(ScrAction::DLL, QPixmap(), QPixmap(), "", QKeySequence(), this))
00042 {
00043
00044
00045 languageChange();
00046 }
00047
00048 void ImportPSPlugin::addToMainWindowMenu(ScribusMainWindow *mw)
00049 {
00050 importAction->setEnabled(true);
00051 connect( importAction, SIGNAL(triggered()), SLOT(import()) );
00052 mw->scrMenuMgr->addMenuItem(importAction, "FileImport");
00053 }
00054
00055 void ImportPSPlugin::languageChange()
00056 {
00057 importAction->setText( tr("Import PostScript..."));
00058
00059 unregisterAll();
00060 registerFormats();
00061 }
00062
00063 ImportPSPlugin::~ImportPSPlugin()
00064 {
00065 unregisterAll();
00066 };
00067
00068 const QString ImportPSPlugin::fullTrName() const
00069 {
00070 return QObject::tr("PostScript Importer");
00071 }
00072
00073
00074 const ScActionPlugin::AboutData* ImportPSPlugin::getAboutData() const
00075 {
00076 AboutData* about = new AboutData;
00077 about->authors = "Franz Schmid <franz@scribus.info>";
00078 about->shortDescription = tr("Imports PostScript Files");
00079 about->description = tr("Imports most PostScript files into the current document,\nconverting their vector data into Scribus objects.");
00080 about->license = "GPL";
00081 Q_CHECK_PTR(about);
00082 return about;
00083 }
00084
00085 void ImportPSPlugin::deleteAboutData(const AboutData* about) const
00086 {
00087 Q_ASSERT(about);
00088 delete about;
00089 }
00090
00091 void ImportPSPlugin::registerFormats()
00092 {
00093 FileFormat fmt(this);
00094 fmt.trName = FormatsManager::instance()->nameOfFormat(FormatsManager::PS);
00095 fmt.formatId = FORMATID_PSIMPORT;
00096 fmt.filter = FormatsManager::instance()->extensionsForFormat(FormatsManager::EPS|FormatsManager::PS);
00097 fmt.nameMatch = QRegExp("\\.("+FormatsManager::instance()->extensionListForFormat(FormatsManager::EPS|FormatsManager::PS, 1)+")$", Qt::CaseInsensitive);
00098 fmt.load = true;
00099 fmt.save = false;
00100 fmt.mimeTypes = FormatsManager::instance()->mimetypeOfFormat(FormatsManager::PS);
00101 fmt.priority = 64;
00102 registerFormat(fmt);
00103
00104 FileFormat fmt2(this);
00105 fmt2.trName = FormatsManager::instance()->nameOfFormat(FormatsManager::PDF);
00106 fmt2.formatId = FORMATID_PDFIMPORT;
00107 fmt2.filter = FormatsManager::instance()->extensionsForFormat(FormatsManager::PDF);
00108 fmt2.nameMatch = QRegExp("\\."+FormatsManager::instance()->extensionListForFormat(FormatsManager::PDF, 1)+"$", Qt::CaseInsensitive);
00109 fmt2.load = true;
00110 fmt2.save = false;
00111 fmt2.mimeTypes = FormatsManager::instance()->mimetypeOfFormat(FormatsManager::PDF);
00112 fmt2.priority = 64;
00113 registerFormat(fmt2);
00114 }
00115
00116 bool ImportPSPlugin::fileSupported(QIODevice* , const QString & fileName) const
00117 {
00118
00119 return true;
00120 }
00121
00122 bool ImportPSPlugin::loadFile(const QString & fileName, const FileFormat &, int flags, int )
00123 {
00124
00125 return import(fileName, flags);
00126 }
00127
00128 bool ImportPSPlugin::import(QString fileName, int flags)
00129 {
00130 if (!checkFlags(flags))
00131 return false;
00132 if (!(flags & lfInteractive))
00133 UndoManager::instance()->setUndoEnabled(false);
00134 if( fileName.isEmpty() )
00135 {
00136 flags |= lfInteractive;
00137 PrefsContext* prefs = PrefsManager::instance()->prefsFile->getPluginContext("importps");
00138 QString wdir = prefs->get("wdir", ".");
00139 CustomFDialog diaf(ScCore->primaryMainWindow(), wdir, QObject::tr("Open"), FormatsManager::instance()->fileDialogFormatList(FormatsManager::EPS|FormatsManager::PS));
00140 if (diaf.exec())
00141 {
00142 fileName = diaf.selectedFile();
00143 prefs->set("wdir", fileName.left(fileName.lastIndexOf("/")));
00144 }
00145 else
00146 return true;
00147 }
00148 m_Doc=ScCore->primaryMainWindow()->doc;
00149 UndoTransaction* activeTransaction = NULL;
00150 bool emptyDoc = (m_Doc == NULL);
00151 if (UndoManager::undoEnabled() && !emptyDoc)
00152 {
00153 activeTransaction = new UndoTransaction(UndoManager::instance()->beginTransaction(m_Doc->currentPage()->getUName(),
00154 Um::IImageFrame,
00155 Um::ImportEPS,
00156 fileName, Um::IEPS));
00157 }
00158 else if (UndoManager::undoEnabled() && emptyDoc)
00159 UndoManager::instance()->setUndoEnabled(false);
00160 EPSPlug *dia = new EPSPlug(m_Doc, flags);
00161 Q_CHECK_PTR(dia);
00162 dia->import(fileName, flags);
00163 if (activeTransaction)
00164 {
00165 activeTransaction->commit();
00166 delete activeTransaction;
00167 activeTransaction = NULL;
00168 }
00169 else if (UndoManager::undoEnabled() && emptyDoc)
00170 UndoManager::instance()->setUndoEnabled(true);
00171 delete dia;
00172 return true;
00173 }