Subversion Repositories Scribus

Rev

Rev 15673 | Rev 15705 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
10124 cbradney 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
 
10181 cbradney 8
#include <QImageReader>
9
#include <QMapIterator>
10292 cbradney 10
#include <QObject>
10124 cbradney 11
 
10292 cbradney 12
#include "commonstrings.h"
10212 cbradney 13
#include "util_formats.h"
10124 cbradney 14
 
10181 cbradney 15
FormatsManager* FormatsManager::_instance = 0;
16
 
17
FormatsManager::FormatsManager()
18
{
11678 cbradney 19
        m_fmts.insert(FormatsManager::EPS,  QStringList() << "eps" << "epsf" << "epsi" << "eps2" << "eps3" << "epi" << "ept");
10292 cbradney 20
        m_fmts.insert(FormatsManager::GIF,  QStringList() << "gif");
21
        m_fmts.insert(FormatsManager::JPEG, QStringList() << "jpg" << "jpeg");
22
        m_fmts.insert(FormatsManager::PAT,  QStringList() << "pat");
23
        m_fmts.insert(FormatsManager::PDF,  QStringList() << "pdf");
24
        m_fmts.insert(FormatsManager::PNG,  QStringList() << "png");
25
        m_fmts.insert(FormatsManager::PS,   QStringList() << "ps");
26
        m_fmts.insert(FormatsManager::PSD,  QStringList() << "psd");
27
        m_fmts.insert(FormatsManager::TIFF, QStringList() << "tif" << "tiff");
28
        m_fmts.insert(FormatsManager::XPM,  QStringList() << "xpm");
29
        m_fmts.insert(FormatsManager::WMF,  QStringList() << "wmf");
30
        m_fmts.insert(FormatsManager::SVG,  QStringList() << "svg" << "svgz");
31
        m_fmts.insert(FormatsManager::AI,   QStringList() << "ai");
11615 fschmid 32
        m_fmts.insert(FormatsManager::XFIG, QStringList() << "fig");
13957 herm 33
        m_fmts.insert(FormatsManager::CVG,  QStringList() << "cvg");
34
        m_fmts.insert(FormatsManager::WPG,  QStringList() << "wpg");
15673 craig 35
        m_fmts.insert(FormatsManager::BMP,  QStringList() << "bmp");
13963 fschmid 36
#ifdef GMAGICK_FOUND
14087 fschmid 37
        m_fmts.insert(FormatsManager::GMAGICK, QStringList() << "xbm" << "tga" << "ptif" << "ppm" << "pnm" << "pgm" << "pcds" << "pcd" << "pbm" << "mng" << "ico" << "gif" << "fax" << "dpx" << "bmp" << "xcf");
13963 fschmid 38
#endif
15677 christoph 39
        m_fmts.insert(FormatsManager::UNICONV, QStringList() << "cdr" << "cdt" << "ccx" << "cmx" << "aff" << "sk" << "sk1" << "cgm" << "plt" << "dxf" << "dst" << "pes" << "exp" << "pcs");
13980 fschmid 40
        m_fmts.insert(FormatsManager::PCT,  QStringList() << "pct" << "pic" << "pict");
10271 cbradney 41
 
14160 fschmid 42
        m_fmtNames[FormatsManager::EPS]  = QObject::tr("Encapsulated PostScript \"*.eps\"");
10292 cbradney 43
        m_fmtNames[FormatsManager::GIF]  = QObject::tr("GIF");
44
        m_fmtNames[FormatsManager::JPEG] = QObject::tr("JPEG");
45
        m_fmtNames[FormatsManager::PAT]  = QObject::tr("Pattern Files");
46
        m_fmtNames[FormatsManager::PDF]  = QObject::tr("PDF Document");
47
        m_fmtNames[FormatsManager::PNG]  = QObject::tr("PNG");
14160 fschmid 48
        m_fmtNames[FormatsManager::PS]   = QObject::tr("PostScript \"*.ps\"");
49
        m_fmtNames[FormatsManager::PSD]  = QObject::tr("Adobe Photoshop \"*.psd\"");
10292 cbradney 50
        m_fmtNames[FormatsManager::TIFF] = QObject::tr("TIFF");
51
        m_fmtNames[FormatsManager::XPM]  = QObject::tr("XPM");
14160 fschmid 52
        m_fmtNames[FormatsManager::WMF]  = QObject::tr("Windows Meta File \"*.wmf\"");
53
        m_fmtNames[FormatsManager::SVG]  = QObject::tr("Scalable Vector Graphics \"*.svg\"");
54
        m_fmtNames[FormatsManager::AI]   = QObject::tr("Adobe Illustrator \"*.ai\"");
11615 fschmid 55
        m_fmtNames[FormatsManager::XFIG] = QObject::tr("Xfig File");
15673 craig 56
        m_fmtNames[FormatsManager::CVG]  = QObject::tr("Calamus CVG File");
57
        m_fmtNames[FormatsManager::WPG]  = QObject::tr("Word Perfect WPG File");
58
        m_fmtNames[FormatsManager::BMP]  = QObject::tr("BMP");
13963 fschmid 59
#ifdef GMAGICK_FOUND
13957 herm 60
        m_fmtNames[FormatsManager::GMAGICK] = QObject::tr("GraphicsMagick File");
13963 fschmid 61
#endif
13957 herm 62
        m_fmtNames[FormatsManager::UNICONV] = QObject::tr("UniConvertor File");
14479 cbradney 63
        m_fmtNames[FormatsManager::PCT]  = QObject::tr("Macintosh Pict File");
10181 cbradney 64
 
10292 cbradney 65
        m_fmtMimeTypes.insert(FormatsManager::EPS,  QStringList() << "application/postscript");
66
        m_fmtMimeTypes.insert(FormatsManager::GIF,  QStringList() << "image/gif");
67
        m_fmtMimeTypes.insert(FormatsManager::JPEG, QStringList() << "image/jpeg");
68
        m_fmtMimeTypes.insert(FormatsManager::PAT,  QStringList() << "");
69
        m_fmtMimeTypes.insert(FormatsManager::PDF,  QStringList() << "application/pdf");
70
        m_fmtMimeTypes.insert(FormatsManager::PNG,  QStringList() << "image/png");
71
        m_fmtMimeTypes.insert(FormatsManager::PS,   QStringList() << "application/postscript");
72
        m_fmtMimeTypes.insert(FormatsManager::PSD,  QStringList() << "application/photoshop");
73
        m_fmtMimeTypes.insert(FormatsManager::TIFF, QStringList() << "image/tiff");
74
        m_fmtMimeTypes.insert(FormatsManager::XPM,  QStringList() << "image/xpm ");
75
        m_fmtMimeTypes.insert(FormatsManager::WMF,  QStringList() << "image/wmf");
76
        m_fmtMimeTypes.insert(FormatsManager::SVG,  QStringList() << "image/svg+xml");
77
        m_fmtMimeTypes.insert(FormatsManager::AI,   QStringList() << "application/illustrator");
11615 fschmid 78
        m_fmtMimeTypes.insert(FormatsManager::XFIG, QStringList() << "image/x-xfig");
13838 fschmid 79
        m_fmtMimeTypes.insert(FormatsManager::CVG,  QStringList() << "");
13885 fschmid 80
        m_fmtMimeTypes.insert(FormatsManager::WPG,  QStringList() << "");
13975 fschmid 81
        m_fmtMimeTypes.insert(FormatsManager::PCT,  QStringList() << "");
10292 cbradney 82
 
10271 cbradney 83
        QMapIterator<int, QStringList> i(m_fmts);
84
        while (i.hasNext())
85
        {
86
                i.next();
10398 cbradney 87
                m_fmtList << i.value().first().toUpper();
10271 cbradney 88
        }
89
 
90
        m_qtSupportedImageFormats=QImageReader::supportedImageFormats();
10272 cbradney 91
        m_supportedImageFormats=m_qtSupportedImageFormats;
10181 cbradney 92
        updateSupportedImageFormats(m_supportedImageFormats);
93
}
94
 
95
FormatsManager::~FormatsManager()
96
{
97
}
98
 
99
FormatsManager* FormatsManager::instance()
100
{
101
        if (_instance == 0)
102
                _instance = new FormatsManager();
103
 
104
        return _instance;
105
}
106
 
107
void FormatsManager::deleteInstance()
108
{
109
        if (_instance)
110
                delete _instance;
111
        _instance = 0;
112
}
113
 
114
void FormatsManager::imageFormatSupported(const QString& ext)
115
{
10273 cbradney 116
//      return m_supportedImageFormats.contains(QByteArray(ext).toLatin1());
10181 cbradney 117
}
118
 
119
void FormatsManager::updateSupportedImageFormats(QList<QByteArray>& supportedImageFormats)
120
{
121
        QMapIterator<int, QStringList> it(m_fmts);
122
        while (it.hasNext())
123
        {
124
                it.next();
125
                QStringListIterator itSL(it.value());
126
                while (itSL.hasNext())
127
                {
128
                        QString t(itSL.next());
129
                        supportedImageFormats.append(t.toLocal8Bit());
130
                }
131
        }
132
}
133
 
10292 cbradney 134
QString FormatsManager::nameOfFormat(int type)
135
{
136
        QMapIterator<int, QString> it(m_fmtNames);
137
        while (it.hasNext())
138
        {
139
                it.next();
140
                if (type & it.key())
141
                        return it.value();
142
        }
143
        return QString::null;
144
}
145
 
146
QStringList FormatsManager::mimetypeOfFormat(int type)
147
{
148
        QMapIterator<int, QStringList> it(m_fmtMimeTypes);
149
        while (it.hasNext())
150
        {
151
                it.next();
152
                if (type & it.key())
153
                        return it.value();
154
        }
155
        return QStringList();
156
}
157
 
158
QString FormatsManager::extensionsForFormat(int type)
159
{
160
        QString a,b,c;
161
        fileTypeStrings(type, a, b, c);
162
        return b;
163
}
164
 
165
QString FormatsManager::fileDialogFormatList(int type)
166
{
167
        QString a,b,c;
168
        fileTypeStrings(type, a, b, c);
169
        return a + b + ";;" +c;
170
}
171
 
172
QString FormatsManager::extensionListForFormat(int type, int listType)
173
{
174
        QString nameMatch;
175
        QString separator(listType==0 ? " *." : "|");
176
        QMapIterator<int, QStringList> it(m_fmts);
177
        bool first=true;
178
        int n=0;
179
        while (it.hasNext())
180
        {
181
                it.next();
182
                if (type & it.key())
183
                {
184
                        //Just in case the Qt used doesn't support jpeg or gif
185
                        if ((JPEG & it.key()) && !m_supportedImageFormats.contains(QByteArray("jpg")))
186
                                continue;
187
                        if ((GIF & it.key()) && !m_supportedImageFormats.contains(QByteArray("gif")))
188
                                continue;
189
                        if (first)
190
                                first=false;
191
                        QStringListIterator itSL(it.value());
192
                        while (itSL.hasNext())
193
                        {
194
                                if (listType==0)
195
                                        nameMatch += separator;
196
                                nameMatch += itSL.next();
197
                                if (listType==1 && itSL.hasNext())
198
                                        nameMatch += separator;
199
                        }
200
                }
201
                ++n;
202
                if (listType==1 && it.hasNext() && nameMatch.length()>0 && !nameMatch.endsWith(separator))
203
                        nameMatch += separator;
204
        }
205
        if (listType==0 && nameMatch.startsWith(" "))
206
                nameMatch.remove(0,1);
207
        if (listType==1 && nameMatch.endsWith("|"))
208
                nameMatch.chop(1);
209
        return nameMatch;
210
}
211
 
10271 cbradney 212
void FormatsManager::fileTypeStrings(int type, QString& formatList, QString& formatText, QString& formatAll, bool lowerCaseOnly)
10181 cbradney 213
{
10271 cbradney 214
        QString fmtList = QObject::tr("All Supported Formats")+" (";
10181 cbradney 215
        QString fmtText;
216
        QMapIterator<int, QStringList> it(m_fmts);
217
        bool first=true;
218
        int n=0;
219
        while (it.hasNext())
220
        {
221
                it.next();
222
                if (type & it.key())
223
                {
10271 cbradney 224
                        //Just in case the Qt used doesn't support jpeg or gif
225
                        if ((JPEG & it.key()) && !m_supportedImageFormats.contains(QByteArray("jpg")))
10292 cbradney 226
                                continue;
10271 cbradney 227
                        if ((GIF & it.key()) && !m_supportedImageFormats.contains(QByteArray("gif")))
10292 cbradney 228
                                continue;
10181 cbradney 229
                        if (first)
230
                                first=false;
231
                        else
10292 cbradney 232
                        {
10181 cbradney 233
                                fmtList += " ";
10292 cbradney 234
                                fmtText += ";;";
235
                        }
236
                        QString text=m_fmtNames[it.key()] + " (";
10181 cbradney 237
                        QStringListIterator itSL(it.value());
238
                        while (itSL.hasNext())
239
                        {
240
                                QString t("*." + itSL.next());
241
                                fmtList += t;
242
                                text += t;
243
                                if(!lowerCaseOnly)
244
                                {
10398 cbradney 245
                                        fmtList += " " + t.toUpper();
246
                                        text += " " + t.toUpper();
10181 cbradney 247
                                }
248
                                if (itSL.hasNext())
249
                                {
250
                                        fmtList += " ";
251
                                        text += " ";
252
                                }
253
                        }
10292 cbradney 254
                        text += ")";
10181 cbradney 255
                        fmtText += text;
256
                }
257
                ++n;
258
        }
10292 cbradney 259
        formatList+=fmtList + ");;";
10181 cbradney 260
        formatText+=fmtText;
10271 cbradney 261
        formatAll=QObject::tr("All Files (*)");
10181 cbradney 262
}
263
 
10124 cbradney 264
bool extensionIndicatesPDF(const QString &ext)
265
{
10136 cbradney 266
//      QStringList strl;
267
//      strl << "pdf";
268
//      return strl.contains(ext, Qt::CaseInsensitive);
269
        return (QString::compare("pdf", ext, Qt::CaseInsensitive) == 0);
270
}
271
 
272
bool extensionIndicatesEPS(const QString &ext)
273
{
10124 cbradney 274
        QStringList strl;
11678 cbradney 275
        strl << "eps" << "epsf" << "epsi" << "eps2" << "eps3" << "epi" << "ept";
10124 cbradney 276
        return strl.contains(ext, Qt::CaseInsensitive);
277
}
278
 
10136 cbradney 279
bool extensionIndicatesEPSorPS(const QString &ext)
10124 cbradney 280
{
281
        QStringList strl;
11678 cbradney 282
        strl << "eps" << "epsf" << "epsi" << "ps" << "eps2" << "eps3" << "epi" << "ept";
10124 cbradney 283
        return strl.contains(ext, Qt::CaseInsensitive);
284
}
10136 cbradney 285
 
286
bool extensionIndicatesTIFF(const QString &ext)
287
{
288
        QStringList strl;
289
        strl << "tif" << "tiff";
290
        return strl.contains(ext, Qt::CaseInsensitive);
291
}
292
 
293
bool extensionIndicatesPSD(const QString &ext)
294
{
295
//      QStringList strl;
296
//      strl << "psd";
297
//      return strl.contains(ext, Qt::CaseInsensitive);
298
        return (QString::compare("psd", ext, Qt::CaseInsensitive) == 0);
299
}
300
 
301
bool extensionIndicatesJPEG(const QString &ext)
302
{
303
        QStringList strl;
304
        strl << "jpg" << "jpeg";
305
        return strl.contains(ext, Qt::CaseInsensitive);
306
}
10181 cbradney 307
 
308
bool extensionIndicatesPattern(const QString &ext)
309
{
310
        QStringList strl;
311
        strl << "pat";
312
        return strl.contains(ext, Qt::CaseInsensitive);
313
}
10303 cbradney 314
 
315
QString getImageType(QString filename)
316
{
317
        QString ret = "";
318
        QFile f(filename);
319
        QFileInfo fi(f);
320
        if (fi.exists())
321
        {
10398 cbradney 322
                QByteArray buf(20, ' ');
10303 cbradney 323
                if (f.open(QIODevice::ReadOnly))
324
                {
10398 cbradney 325
                        f.read(buf.data(), 20);
10303 cbradney 326
                        if ((buf[0] == '%') && (buf[1] == '!') && (buf[2] == 'P') && (buf[3] == 'S') && (buf[4] == '-') && (buf[5] == 'A'))
327
                                ret = "eps";
328
                        else if ((buf[0] == '\xC5') && (buf[1] == '\xD0') && (buf[2] == '\xD3') && (buf[3] == '\xC6'))
329
                                ret = "eps";
330
                        else if ((buf[0] == 'G') && (buf[1] == 'I') && (buf[2] == 'F') && (buf[3] == '8'))
331
                                ret = "gif";
332
                        else if ((buf[0] == '\xFF') && (buf[1] == '\xD8') && (buf[2] == '\xFF'))
333
                                ret = "jpg";
334
                        else if ((buf[0] == '%') && (buf[1] == 'P') && (buf[2] == 'D') && (buf[3] == 'F'))
335
                                ret = "pdf";
336
                        else if ((buf[0] == '\x89') && (buf[1] == 'P') && (buf[2] == 'N') && (buf[3] == 'G'))
337
                                ret = "png";
338
                        else if ((buf[0] == '8') && (buf[1] == 'B') && (buf[2] == 'P') && (buf[3] == 'S'))
339
                                ret = "psd";
340
                        else if (((buf[0] == 'I') && (buf[1] == 'I') && (buf[2] == '\x2A')) || ((buf[0] == 'M') && (buf[1] == 'M') && (buf[3] == '\x2A')))
341
                                ret = "tif";
342
                        else if ((buf[0] == '/') && (buf[1] == '*') && (buf[2] == ' ') && (buf[3] == 'X') && (buf[4] == 'P') && (buf[5] == 'M'))
343
                                ret = "xpm";
344
 
345
                        f.close();
346
                }
347
        }
348
        return ret;
349
}