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 importdrwplugin.cpp - description
9 -------------------
10 begin : Mon Jan 11 2010
11 copyright : (C) 2010 by Franz Schmid
12 email : Franz.Schmid@altmuehlnet.de
13 ***************************************************************************/
14 #include "commonstrings.h"
15
16 #include "importdrw.h"
17 #include "importdrwplugin.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
importdrw_getPluginAPIVersion()30 int importdrw_getPluginAPIVersion()
31 {
32 return PLUGIN_API_VERSION;
33 }
34
importdrw_getPlugin()35 ScPlugin* importdrw_getPlugin()
36 {
37 ImportDrwPlugin* plug = new ImportDrwPlugin();
38 Q_CHECK_PTR(plug);
39 return plug;
40 }
41
importdrw_freePlugin(ScPlugin * plugin)42 void importdrw_freePlugin(ScPlugin* plugin)
43 {
44 ImportDrwPlugin* plug = qobject_cast<ImportDrwPlugin*>(plugin);
45 Q_ASSERT(plug);
46 delete plug;
47 }
48
ImportDrwPlugin()49 ImportDrwPlugin::ImportDrwPlugin() :
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 ImportDrwPlugin::languageChange()
59 {
60 importAction->setText( tr("Import Micrografx Draw..."));
61 FileFormat* fmt = getFormatByExt("drw");
62 fmt->trName = tr("Micrografx Draw");
63 fmt->filter = tr("Micrografx Draw (*.drw *.DRW)");
64 fmt->fileExtensions = QStringList() << "drw";
65 }
66
~ImportDrwPlugin()67 ImportDrwPlugin::~ImportDrwPlugin()
68 {
69 unregisterAll();
70 }
71
fullTrName() const72 QString ImportDrwPlugin::fullTrName() const
73 {
74 return QObject::tr("DRW Importer");
75 }
76
77
getAboutData() const78 const ScActionPlugin::AboutData* ImportDrwPlugin::getAboutData() const
79 {
80 AboutData* about = new AboutData;
81 about->authors = "Franz Schmid <franz@scribus.info>";
82 about->shortDescription = tr("Imports DRW Files");
83 about->description = tr("Imports most DRW files into the current document, converting their vector data into Scribus objects.");
84 about->license = "GPL";
85 Q_CHECK_PTR(about);
86 return about;
87 }
88
deleteAboutData(const AboutData * about) const89 void ImportDrwPlugin::deleteAboutData(const AboutData* about) const
90 {
91 Q_ASSERT(about);
92 delete about;
93 }
94
registerFormats()95 void ImportDrwPlugin::registerFormats()
96 {
97 FileFormat fmt(this);
98 fmt.trName = tr("Micrografx DRW File"); // Human readable name
99 fmt.formatId = 0;
100 fmt.filter = tr("Micrografx DRW File (*.drw *.DRW)"); // QFileDialog filter
101 fmt.fileExtensions = QStringList() << "drw";
102 fmt.load = true;
103 fmt.save = false;
104 fmt.thumb = true;
105 fmt.mimeTypes = QStringList(); // MIME types
106 fmt.priority = 64; // Priority
107 registerFormat(fmt);
108 }
109
fileSupported(QIODevice *,const QString & fileName) const110 bool ImportDrwPlugin::fileSupported(QIODevice* /* file */, const QString & fileName) const
111 {
112 return true;
113 }
114
loadFile(const QString & fileName,const FileFormat &,int flags,int)115 bool ImportDrwPlugin::loadFile(const QString & fileName, const FileFormat &, int flags, int /*index*/)
116 {
117 // There's only one format to handle, so we just call import(...)
118 return import(fileName, flags);
119 }
120
import(QString fileName,int flags)121 bool ImportDrwPlugin::import(QString fileName, int flags)
122 {
123 if (!checkFlags(flags))
124 return false;
125 if (fileName.isEmpty())
126 {
127 flags |= lfInteractive;
128 PrefsContext* prefs = PrefsManager::instance().prefsFile->getPluginContext("importdrw");
129 QString wdir = prefs->get("wdir", ".");
130 CustomFDialog diaf(ScCore->primaryMainWindow(), wdir, QObject::tr("Open"), tr("All Supported Formats")+" (*.drw *.DRW);;All Files (*)");
131 if (diaf.exec())
132 {
133 fileName = diaf.selectedFile();
134 prefs->set("wdir", fileName.left(fileName.lastIndexOf("/")));
135 }
136 else
137 return true;
138 }
139 m_Doc=ScCore->primaryMainWindow()->doc;
140 UndoTransaction activeTransaction;
141 bool emptyDoc = (m_Doc == nullptr);
142 bool hasCurrentPage = (m_Doc && m_Doc->currentPage());
143 TransactionSettings trSettings;
144 trSettings.targetName = hasCurrentPage ? m_Doc->currentPage()->getUName() : "";
145 trSettings.targetPixmap = Um::IImageFrame;
146 trSettings.actionName = Um::ImportDRW;
147 trSettings.description = fileName;
148 trSettings.actionPixmap = Um::IXFIG;
149 if (emptyDoc || !(flags & lfInteractive) || !(flags & lfScripted))
150 UndoManager::instance()->setUndoEnabled(false);
151 if (UndoManager::undoEnabled())
152 activeTransaction = UndoManager::instance()->beginTransaction(trSettings);
153 DrwPlug *dia = new DrwPlug(m_Doc, flags);
154 Q_CHECK_PTR(dia);
155 dia->import(fileName, trSettings, flags, !(flags & lfScripted));
156 if (activeTransaction)
157 activeTransaction.commit();
158 if (emptyDoc || !(flags & lfInteractive) || !(flags & lfScripted))
159 UndoManager::instance()->setUndoEnabled(true);
160 delete dia;
161 return true;
162 }
163
readThumbnail(const QString & fileName)164 QImage ImportDrwPlugin::readThumbnail(const QString& fileName)
165 {
166 if (fileName.isEmpty())
167 return QImage();
168 UndoManager::instance()->setUndoEnabled(false);
169 m_Doc = nullptr;
170 DrwPlug *dia = new DrwPlug(m_Doc, lfCreateThumbnail);
171 Q_CHECK_PTR(dia);
172 QImage ret = dia->readThumbnail(fileName);
173 UndoManager::instance()->setUndoEnabled(true);
174 delete dia;
175 return ret;
176 }
177