Scribus Developer Documentation - API
logo-pen

Scribus Developer Documentation - API

wmfimportplugin.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 "scconfig.h"
00008 #include "wmfimportplugin.h"
00009 
00010 #include <QFile>
00011 #include <QRegExp>
00012 #include <QCursor>
00013 
00014 #include "customfdialog.h"
00015 #include "scribus.h"
00016 #include "scribusXml.h"
00017 #include "prefsfile.h"
00018 
00019 #include <cmath>
00020 #include "commonstrings.h"
00021 #include "fpointarray.h"
00022 #include "menumanager.h"
00023 #include "prefsmanager.h"
00024 #include "pageitem.h"
00025 #include "scraction.h"
00026 #include "scribuscore.h"
00027 #include "scribusdoc.h"
00028 #include "selection.h"
00029 #include "undomanager.h"
00030 #include "loadsaveplugin.h"
00031 #include "util.h"
00032 #include "util_formats.h"
00033 #include "fonts/scfontmetrics.h"
00034 
00035 #include "wmfimport.h"
00036 
00037 using namespace std;
00038 
00039 int wmfimplugin_getPluginAPIVersion()
00040 {
00041     return PLUGIN_API_VERSION;
00042 }
00043 
00044 ScPlugin* wmfimplugin_getPlugin()
00045 {
00046     WMFImportPlugin* plug = new WMFImportPlugin();
00047     Q_CHECK_PTR(plug);
00048     return plug;
00049 }
00050 
00051 void wmfimplugin_freePlugin(ScPlugin* plugin)
00052 {
00053     WMFImportPlugin* plug = dynamic_cast<WMFImportPlugin*>(plugin);
00054     Q_ASSERT(plug);
00055     delete plug;
00056 }
00057 
00058 WMFImportPlugin::WMFImportPlugin() : LoadSavePlugin(),
00059     importAction(new ScrAction(ScrAction::DLL, QPixmap(), QPixmap(), "", QKeySequence(), this))
00060 {
00061     // Set action info in languageChange, so we only have to do
00062     // it in one place. This includes registering file format
00063     // support.
00064     languageChange();
00065 }
00066 
00067 void WMFImportPlugin::addToMainWindowMenu(ScribusMainWindow *mw)
00068 {
00069     importAction->setEnabled(true);
00070     connect( importAction, SIGNAL(triggered()), SLOT(import()) );
00071     mw->scrMenuMgr->addMenuItem(importAction, "FileImport");
00072 }
00073 
00074 WMFImportPlugin::~WMFImportPlugin()
00075 {
00076     unregisterAll();
00077 };
00078 
00079 void WMFImportPlugin::languageChange()
00080 {
00081     importAction->setText( tr("Import &WMF..."));
00082     // (Re)register file format support.
00083     unregisterAll();
00084     registerFormats();
00085 }
00086 
00087 const QString WMFImportPlugin::fullTrName() const
00088 {
00089     return QObject::tr("WMF Import");
00090 }
00091 
00092 const ScActionPlugin::AboutData* WMFImportPlugin::getAboutData() const
00093 {
00094     AboutData* about = new AboutData;
00095     about->authors = "Jean Ghali <jghali@scribus.info>";
00096     about->shortDescription = tr("Imports WMF Files");
00097     about->description = tr("Imports most WMF files into the current document,\nconverting their vector data into Scribus objects.");
00098     about->license = "GPL";
00099     Q_CHECK_PTR(about);
00100     return about;
00101 }
00102 
00103 void WMFImportPlugin::deleteAboutData(const AboutData* about) const
00104 {
00105     Q_ASSERT(about);
00106     delete about;
00107 }
00108 
00109 void WMFImportPlugin::registerFormats()
00110 {
00111     FileFormat fmt(this);
00112     fmt.trName = FormatsManager::instance()->nameOfFormat(FormatsManager::WMF);
00113     fmt.formatId = FORMATID_WMFIMPORT;
00114     fmt.filter = FormatsManager::instance()->extensionsForFormat(FormatsManager::WMF);
00115     fmt.nameMatch = QRegExp("\\."+FormatsManager::instance()->extensionListForFormat(FormatsManager::WMF, 1)+"$", Qt::CaseInsensitive);
00116     fmt.load = true;
00117     fmt.save = false;
00118     fmt.mimeTypes = FormatsManager::instance()->mimetypeOfFormat(FormatsManager::WMF);
00119     fmt.priority = 64;
00120     registerFormat(fmt);
00121 }
00122 
00123 bool WMFImportPlugin::fileSupported(QIODevice* /* file */, const QString & fileName) const
00124 {
00125     // TODO: identify valid WMF
00126     return true;
00127 }
00128 
00129 bool WMFImportPlugin::loadFile(const QString & fileName, const FileFormat & /* fmt */, int flags, int /*index*/)
00130 {
00131     // For now, "load file" and import are the same thing for this plugin
00132     return import(fileName, flags);
00133 }
00134 
00135 bool WMFImportPlugin::import(QString filename, int flags)
00136 {
00137     if (!checkFlags(flags))
00138         return false;
00139     m_Doc=ScCore->primaryMainWindow()->doc;
00140     ScribusMainWindow* mw=(m_Doc==0) ? ScCore->primaryMainWindow() : m_Doc->scMW();
00141     if (filename.isEmpty())
00142     {
00143         flags |= lfInteractive;
00144         PrefsContext* prefs = PrefsManager::instance()->prefsFile->getPluginContext("WMFPlugin");
00145         QString wdir = prefs->get("wdir", ".");
00146         CustomFDialog diaf(mw, wdir, QObject::tr("Open"), FormatsManager::instance()->fileDialogFormatList(FormatsManager::WMF));
00147         if (diaf.exec())
00148         {
00149             filename = diaf.selectedFile();
00150             prefs->set("wdir", filename.left(filename.lastIndexOf("/")));
00151         }
00152         else
00153             return true;
00154     }
00155     
00156     /*if (UndoManager::undoEnabled() && m_Doc)
00157     {
00158         UndoManager::instance()->beginTransaction(m_Doc->currentPage()->getUName(),Um::IImageFrame,Um::ImportWMF, filename, Um::IWMF);
00159     }
00160     else if (UndoManager::undoEnabled() && !m_Doc)
00161         UndoManager::instance()->setUndoEnabled(false);*/
00162     WMFImport *dia = new WMFImport(mw, flags);
00163     dia->import(filename, flags);
00164     Q_CHECK_PTR(dia);
00165     /*if (UndoManager::undoEnabled())
00166         UndoManager::instance()->commit();
00167     else
00168         UndoManager::instance()->setUndoEnabled(true);*/
00169     if (dia->importCanceled)
00170     {
00171         if (dia->importFailed)
00172             QMessageBox::warning(mw, CommonStrings::trWarning, tr("The file could not be imported"), 1, 0, 0);
00173         else if (dia->unsupported)
00174             QMessageBox::warning(mw, CommonStrings::trWarning, tr("WMF file contains some unsupported features"), 1, 0, 0);
00175     }
00176 
00177     bool success = !dia->importFailed;
00178     delete dia;
00179     return success;
00180 }
Created with personalized Doxygen. This is documentation for GPL software Scribus - Open Source Desktop Publishing.