Subversion Repositories Scribus

Rev

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