1 /*
2 For general Scribus (>=1.3.2) copyright and licensing information please refer
3 to the COPYING file provided with the program. Following this notice may exist
4 a copyright and/or license notice that predates the release of Scribus 1.3.2
5 for which a new license (GPL+exception) is in place.
6 */
7 /***************************************************************************
8 importcgmplugin.cpp - description
9 -------------------
10 begin : Wed Dez 23 2009
11 copyright : (C) 2009 by Franz Schmid
12 email : Franz.Schmid@altmuehlnet.de
13 ***************************************************************************/
14 #include "commonstrings.h"
15
16 #include "importcgm.h"
17 #include "importcgmplugin.h"
18 #include "prefscontext.h"
19 #include "prefsfile.h"
20 #include "prefsmanager.h"
21 #include "scpage.h"
22 #include "scraction.h"
23 #include "scribuscore.h"
24 #include "undomanager.h"
25 #include "util_formats.h"
26
27 #include "ui/customfdialog.h"
28 #include "ui/scmwmenumanager.h"
29
importcgm_getPluginAPIVersion()30 int importcgm_getPluginAPIVersion()
31 {
32 return PLUGIN_API_VERSION;
33 }
34
importcgm_getPlugin()35 ScPlugin* importcgm_getPlugin()
36 {
37 ImportCgmPlugin* plug = new ImportCgmPlugin();
38 Q_CHECK_PTR(plug);
39 return plug;
40 }
41
importcgm_freePlugin(ScPlugin * plugin)42 void importcgm_freePlugin(ScPlugin* plugin)
43 {
44 ImportCgmPlugin* plug = qobject_cast<ImportCgmPlugin*>(plugin);
45 Q_ASSERT(plug);
46 delete plug;
47 }
48
ImportCgmPlugin()49 ImportCgmPlugin::ImportCgmPlugin() :
50 importAction(new ScrAction(ScrAction::DLL, QPixmap(), QPixmap(), "", QKeySequence(), this))
51 {
52 // Set action info in languageChange, so we only have to do it in one
53 // place. This includes registering file format support.
54 registerFormats();
55 languageChange();
56 }
57
languageChange()58 void ImportCgmPlugin::languageChange()
59 {
60 importAction->setText( tr("Import Computer Graphics Metafile..."));
61 FileFormat* fmt = getFormatByExt("cgm");
62 fmt->trName = tr("Computer Graphics Metafile");
63 fmt->filter = tr("Computer Graphics Metafile (*.cgm *.CGM)");
64 }
65
~ImportCgmPlugin()66 ImportCgmPlugin::~ImportCgmPlugin()
67 {
68 unregisterAll();
69 }
70
fullTrName() const71 QString ImportCgmPlugin::fullTrName() const
72 {
73 return QObject::tr("Cgm Importer");
74 }
75
76
getAboutData() const77 const ScActionPlugin::AboutData* ImportCgmPlugin::getAboutData() const
78 {
79 AboutData* about = new AboutData;
80 about->authors = "Franz Schmid <franz@scribus.info>";
81 about->shortDescription = tr("Imports CGM Files");
82 about->description = tr("Imports most binary CGM files into the current document, converting their vector data into Scribus objects.");
83 about->license = "GPL";
84 Q_CHECK_PTR(about);
85 return about;
86 }
87
deleteAboutData(const AboutData * about) const88 void ImportCgmPlugin::deleteAboutData(const AboutData* about) const
89 {
90 Q_ASSERT(about);
91 delete about;
92 }
93
registerFormats()94 void ImportCgmPlugin::registerFormats()
95 {
96 FileFormat fmt(this);
97 fmt.trName = tr("CGM File"); // Human readable name
98 fmt.formatId = 0;
99 fmt.filter = tr("CGM File (*.cgm *.CGM)"); // QFileDialog filter
100 fmt.fileExtensions = QStringList() << "cgm";
101 fmt.load = true;
102 fmt.save = false;
103 fmt.thumb = true;
104 fmt.mimeTypes = QStringList(); // MIME types
105 fmt.priority = 64; // Priority
106 registerFormat(fmt);
107 }
108
fileSupported(QIODevice *,const QString & fileName) const109 bool ImportCgmPlugin::fileSupported(QIODevice* /* file */, const QString & fileName) const
110 {
111 return true;
112 }
113
loadFile(const QString & fileName,const FileFormat &,int flags,int)114 bool ImportCgmPlugin::loadFile(const QString & fileName, const FileFormat &, int flags, int /*index*/)
115 {
116 // There's only one format to handle, so we just call import(...)
117 return import(fileName, flags);
118 }
119
import(QString fileName,int flags)120 bool ImportCgmPlugin::import(QString fileName, int flags)
121 {
122 if (!checkFlags(flags))
123 return false;
124 if (fileName.isEmpty())
125 {
126 flags |= lfInteractive;
127 PrefsContext* prefs = PrefsManager::instance().prefsFile->getPluginContext("importcgm");
128 QString wdir = prefs->get("wdir", ".");
129 CustomFDialog diaf(ScCore->primaryMainWindow(), wdir, QObject::tr("Open"), tr("All Supported Formats")+" (*.cgm *.CGM);;All Files (*)");
130 if (diaf.exec())
131 {
132 fileName = diaf.selectedFile();
133 prefs->set("wdir", fileName.left(fileName.lastIndexOf("/")));
134 }
135 else
136 return true;
137 }
138 m_Doc=ScCore->primaryMainWindow()->doc;
139 UndoTransaction activeTransaction;
140 bool emptyDoc = (m_Doc == nullptr);
141 bool hasCurrentPage = (m_Doc && m_Doc->currentPage());
142 TransactionSettings trSettings;
143 trSettings.targetName = hasCurrentPage ? m_Doc->currentPage()->getUName() : "";
144 trSettings.targetPixmap = Um::IImageFrame;
145 trSettings.actionName = Um::ImportCGM;
146 trSettings.description = fileName;
147 trSettings.actionPixmap = Um::IXFIG;
148 if (emptyDoc || !(flags & lfInteractive) || !(flags & lfScripted))
149 UndoManager::instance()->setUndoEnabled(false);
150 if (UndoManager::undoEnabled())
151 activeTransaction = UndoManager::instance()->beginTransaction(trSettings);
152 CgmPlug *dia = new CgmPlug(m_Doc, flags);
153 Q_CHECK_PTR(dia);
154 dia->import(fileName, trSettings, flags, !(flags & lfScripted));
155 if (activeTransaction)
156 activeTransaction.commit();
157 if (emptyDoc || !(flags & lfInteractive) || !(flags & lfScripted))
158 UndoManager::instance()->setUndoEnabled(true);
159 delete dia;
160 return true;
161 }
162
readThumbnail(const QString & fileName)163 QImage ImportCgmPlugin::readThumbnail(const QString& fileName)
164 {
165 if (fileName.isEmpty())
166 return QImage();
167 UndoManager::instance()->setUndoEnabled(false);
168 m_Doc = nullptr;
169 CgmPlug *dia = new CgmPlug(m_Doc, lfCreateThumbnail);
170 Q_CHECK_PTR(dia);
171 QImage ret = dia->readThumbnail(fileName);
172 UndoManager::instance()->setUndoEnabled(true);
173 delete dia;
174 return ret;
175 }
176