Scribus Developer Documentation - API
logo-pen

Scribus Developer Documentation - API

importpsplugin.cpp

Go to the documentation of this file.
00001 /*
00002 For general Scribus (>=1.3.2) copyright and licensing information please refer
00003 to the COPYING file provided with the program. Following this notice may exist
00004 a copyright and/or license notice that predates the release of Scribus 1.3.2
00005 for which a new license (GPL+exception) is in place.
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     // Set action info in languageChange, so we only have to do it in one
00044     // place. This includes registering file format support.
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     // (Re)register file format support
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); // Human readable name
00095     fmt.formatId = FORMATID_PSIMPORT;
00096     fmt.filter = FormatsManager::instance()->extensionsForFormat(FormatsManager::EPS|FormatsManager::PS);// QFileDialog filter
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); // MIME types
00101     fmt.priority = 64; // Priority
00102     registerFormat(fmt);
00103 
00104     FileFormat fmt2(this);
00105     fmt2.trName = FormatsManager::instance()->nameOfFormat(FormatsManager::PDF); // Human readable name
00106     fmt2.formatId = FORMATID_PDFIMPORT;
00107     fmt2.filter = FormatsManager::instance()->extensionsForFormat(FormatsManager::PDF);// QFileDialog filter
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); // MIME types
00112     fmt2.priority = 64; // Priority
00113     registerFormat(fmt2);
00114 }
00115 
00116 bool ImportPSPlugin::fileSupported(QIODevice* /* file */, const QString & fileName) const
00117 {
00118     // TODO: check for %!PS-Adobe
00119     return true;
00120 }
00121 
00122 bool ImportPSPlugin::loadFile(const QString & fileName, const FileFormat &, int flags, int /*index*/)
00123 {
00124     // There's only one format to handle, so we just call import(...)
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 }
Created with personalized Doxygen. This is documentation for GPL software Scribus - Open Source Desktop Publishing.