Scribus Developer Documentation - API
logo-pen

Scribus Developer Documentation - API

importaiplugin.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 "importai.h"
00010 #include "importaiplugin.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 
00022 int importai_getPluginAPIVersion()
00023 {
00024     return PLUGIN_API_VERSION;
00025 }
00026 
00027 ScPlugin* importai_getPlugin()
00028 {
00029     ImportAIPlugin* plug = new ImportAIPlugin();
00030     Q_CHECK_PTR(plug);
00031     return plug;
00032 }
00033 
00034 void importai_freePlugin(ScPlugin* plugin)
00035 {
00036     ImportAIPlugin* plug = dynamic_cast<ImportAIPlugin*>(plugin);
00037     Q_ASSERT(plug);
00038     delete plug;
00039 }
00040 
00041 ImportAIPlugin::ImportAIPlugin() : LoadSavePlugin(),
00042     importAction(new ScrAction(ScrAction::DLL, QPixmap(), QPixmap(), "", QKeySequence(), this))
00043 {
00044     // Set action info in languageChange, so we only have to do it in one
00045     // place. This includes registering file format support.
00046     languageChange();
00047 }
00048 
00049 void ImportAIPlugin::addToMainWindowMenu(ScribusMainWindow *mw)
00050 {
00051     importAction->setEnabled(true);
00052     connect( importAction, SIGNAL(triggered()), SLOT(import()) );
00053     mw->scrMenuMgr->addMenuItem(importAction, "FileImport");
00054 }
00055 
00056 void ImportAIPlugin::languageChange()
00057 {
00058     importAction->setText( tr("Import AI..."));
00059     // (Re)register file format support
00060     unregisterAll();
00061     registerFormats();
00062 }
00063 
00064 ImportAIPlugin::~ImportAIPlugin()
00065 {
00066     unregisterAll();
00067 };
00068 
00069 const QString ImportAIPlugin::fullTrName() const
00070 {
00071     return QObject::tr("Adobe Illustrator Importer");
00072 }
00073 
00074 
00075 const ScActionPlugin::AboutData* ImportAIPlugin::getAboutData() const
00076 {
00077     AboutData* about = new AboutData;
00078     about->authors = "Franz Schmid <franz@scribus.info>";
00079     about->shortDescription = tr("Imports Illustrator Files");
00080     about->description = tr("Imports most Illustrator files into the current document,\nconverting their vector data into Scribus objects.");
00081     about->license = "GPL";
00082     Q_CHECK_PTR(about);
00083     return about;
00084 }
00085 
00086 void ImportAIPlugin::deleteAboutData(const AboutData* about) const
00087 {
00088     Q_ASSERT(about);
00089     delete about;
00090 }
00091 
00092 void ImportAIPlugin::registerFormats()
00093 {
00094     FileFormat fmt(this);
00095     fmt.trName = FormatsManager::instance()->nameOfFormat(FormatsManager::AI); // Human readable name
00096     fmt.formatId = FORMATID_AIIMPORT;
00097     fmt.filter = FormatsManager::instance()->extensionsForFormat(FormatsManager::AI); // QFileDialog filter
00098     fmt.nameMatch = QRegExp("\\."+FormatsManager::instance()->extensionListForFormat(FormatsManager::AI, 1)+"$", Qt::CaseInsensitive);
00099     fmt.load = true;
00100     fmt.save = false;
00101     fmt.mimeTypes = FormatsManager::instance()->mimetypeOfFormat(FormatsManager::AI); // MIME types
00102     fmt.priority = 64; // Priority
00103     registerFormat(fmt);
00104 }
00105 
00106 bool ImportAIPlugin::fileSupported(QIODevice* /* file */, const QString & fileName) const
00107 {
00108     // TODO: check for %!PS-Adobe
00109     return true;
00110 }
00111 
00112 bool ImportAIPlugin::loadFile(const QString & fileName, const FileFormat &, int flags, int /*index*/)
00113 {
00114     // There's only one format to handle, so we just call import(...)
00115     return import(fileName, flags);
00116 }
00117 
00118 bool ImportAIPlugin::import(QString fileName, int flags)
00119 {
00120     if (!checkFlags(flags))
00121         return false;
00122 //  if (!(flags & lfInteractive))
00123         UndoManager::instance()->setUndoEnabled(false);
00124     if( fileName.isEmpty() )
00125     {
00126         flags |= lfInteractive;
00127         PrefsContext* prefs = PrefsManager::instance()->prefsFile->getPluginContext("importai");
00128         QString wdir = prefs->get("wdir", ".");
00129         CustomFDialog diaf(ScCore->primaryMainWindow(), wdir, QObject::tr("Open"), FormatsManager::instance()->fileDialogFormatList(FormatsManager::AI));
00130         if (diaf.exec())
00131         {
00132             fileName = diaf.selectedFile();
00133             prefs->set("wdir", fileName.left(fileName.lastIndexOf("/")));
00134         }
00135         else
00136             return true;
00137     }
00138     m_Doc=ScCore->primaryMainWindow()->doc;
00139 //  if (UndoManager::undoEnabled() && m_Doc)
00140 //  {
00141 //      UndoManager::instance()->beginTransaction(m_Doc->currentPage()->getUName(),
00142 //                                              Um::IImageFrame,
00143 //                                              Um::ImportEPS,
00144 //                                              fileName, Um::IEPS);
00145 //  }
00146 //  else if (UndoManager::undoEnabled() && !m_Doc)
00147 //      UndoManager::instance()->setUndoEnabled(false);
00148     AIPlug *dia = new AIPlug(m_Doc, flags);
00149     Q_CHECK_PTR(dia);
00150     dia->import(fileName, flags);
00151 //  if (UndoManager::undoEnabled())
00152 //      UndoManager::instance()->commit();
00153 //  else
00154         UndoManager::instance()->setUndoEnabled(true);
00155     delete dia;
00156     return true;
00157 }
Created with personalized Doxygen. This is documentation for GPL software Scribus - Open Source Desktop Publishing.