Subversion Repositories Scribus

Rev

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

Rev Author Line No. Line
4430 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
*/
10028 cbradney 7
#include <QDomElement>
8
#include <QFile>
9
#include <QFileInfo>
10002 fschmid 10
#include <QtAlgorithms>
10028 cbradney 11
#include <QCursor>
12
#include <QRegExp>
13
#include <QDir>
14
#include <QTextCodec>
15
#include <QCheckBox>
16
#include <QMessageBox>
9953 cbradney 17
#include <QProgressBar>
10002 fschmid 18
 
9803 fschmid 19
#include <QList>
517 fschmid 20
#include <cstdlib>
21
#include <cmath>
10002 fschmid 22
#include <QTextStream>
3650 cbradney 23
 
16736 jghali 24
#include "scconfig.h"
25
 
3650 cbradney 26
#include "commonstrings.h"
838 cbradney 27
#include "fileloader.h"
6843 cbradney 28
#include "hyphenator.h"
16736 jghali 29
#include "loadsaveplugin.h"
30
#include "pagestructs.h"
1549 subik 31
#include "pluginmanager.h"
16736 jghali 32
#include "prefsmanager.h"
8775 cbradney 33
#include "resourcecollection.h"
13465 cbradney 34
#include "scclocale.h"
16736 jghali 35
#include "scpage.h"
5781 cbradney 36
#include "scribuscore.h"
3650 cbradney 37
#include "scribusXml.h"
38
#include "units.h"
16736 jghali 39
#include "util.h"
40
 
41
#include "plugins/formatidlist.h"
13544 cbradney 42
#include "ui/guidemanager.h"
16736 jghali 43
#include "ui/fontreplacedialog.h"
44
#include "ui/missing.h"
3650 cbradney 45
 
4024 craig 46
// We need to include the headers for the plugins we support until we start
47
// using LoadSavePlugin to pick them for us. We only use these headers to
48
// get the format IDs, NOTHING ELSE.
5642 cbradney 49
// #include "plugins/svgimplugin/svgplugin.h"
50
// #include "plugins/psimport/importpsplugin.h"
51
// #include "plugins/fileloader/oodraw/oodrawimp.h"
8022 jghali 52
#include <zlib.h>
506 fschmid 53
 
54
/*!
55
 \author Franz Schmid
56
 \date
57
 \brief Constructor, sets the variable "FileName" to the input parameter fileName
4645 subik 58
 \param fileName filename to load
506 fschmid 59
 \retval None
60
 */
3644 craig 61
FileLoader::FileLoader(const QString & fileName) :
10469 cbradney 62
        QObject(0),
5642 cbradney 63
        formatSLA12x(LoadSavePlugin::getFormatById(FORMATID_SLA12XIMPORT)),
64
        formatSLA13x(LoadSavePlugin::getFormatById(FORMATID_SLA13XIMPORT)),
5653 cbradney 65
        formatSLA134(LoadSavePlugin::getFormatById(FORMATID_SLA134IMPORT)),
13746 jghali 66
        formatSLA150(LoadSavePlugin::getFormatById(FORMATID_SLA150IMPORT)),
17326 jghali 67
        prefsManager(PrefsManager::instance()),
68
        m_fileName(fileName),
69
        m_fileType(-1)
506 fschmid 70
{
17326 jghali 71
        QString realPath = QFileInfo(fileName).canonicalFilePath();
72
        if (!realPath.isEmpty())
73
                m_fileName = realPath;
506 fschmid 74
}
75
 
3644 craig 76
// FIXME: This static method is here as a temporary transitional
77
// measure during the process of converting to file loader plugins.
78
const QString FileLoader::getLoadFilterString()
79
{
14061 fschmid 80
//      return LoadSavePlugin::fileDialogLoadFilter().join(";;");
81
        QStringList fmts = LoadSavePlugin::fileDialogLoadFilter();
82
        QString fmtString = QObject::tr("All Supported Formats")+" (";
83
        int ind = -1;
84
        for (int a = 0; a < fmts.count()-1; a++)
85
        {
86
                QString fmt = fmts[a];
87
                int s = fmt.indexOf("(");
88
                int e = fmt.lastIndexOf(")");
89
                QString f = fmt.mid(s+1, e-s-1);
16729 fschmid 90
#ifndef HAVE_POPPLER
14061 fschmid 91
                if (f.contains("pdf"))  // for removing PDF from the list
92
                {
93
                        ind = a;
94
                        continue;
95
                }
16729 fschmid 96
#endif
14061 fschmid 97
                fmtString += f + " ";
98
        }
99
        fmtString += ");;";
100
        if (ind != -1)
101
                fmts.removeAt(ind);
102
        fmtString += fmts.join(";;");
103
        return fmtString.simplified();
3644 craig 104
}
105
 
506 fschmid 106
/*!
107
 \fn int FileLoader::TestFile()
108
 \author Franz Schmid
109
 \date
110
 \brief Tests if the file "FileName" exists and determines the type of the file.
13274 cbradney 111
 \retval int -1 if the file doesn't exist or any other error has occurred, 0 for the old Format, 1 for the new Format, 2 for EPS and PS files, 3 for SVG files and 4 for PDF files
506 fschmid 112
 */
17326 jghali 113
int FileLoader::testFile()
506 fschmid 114
{
17326 jghali 115
        QFileInfo fi = QFileInfo(m_fileName);
506 fschmid 116
        int ret = -1;
117
        if (!fi.exists())
118
                ret = -1;
10469 cbradney 119
        QString ext = fi.completeSuffix().toLower();
506 fschmid 120
 
9803 fschmid 121
        QList<FileFormat> fileFormats(LoadSavePlugin::supportedFormats());
122
        QList<FileFormat>::const_iterator it(fileFormats.constBegin());
123
        QList<FileFormat>::const_iterator itEnd(fileFormats.constEnd());
5642 cbradney 124
        for ( ; it != itEnd ; ++it )
506 fschmid 125
        {
18341 fschmid 126
                bool found = false;
127
                for (int a = 0; a < it->fileExtensions.count(); a++)
3968 craig 128
                {
18341 fschmid 129
                        QString exts = it->fileExtensions[a];
130
                        if (ext.contains(exts, Qt::CaseInsensitive))
3968 craig 131
                        {
18341 fschmid 132
                                if (it->plug != 0)
5642 cbradney 133
                                {
18341 fschmid 134
                                        if (it->plug->fileSupported(0, m_fileName))
135
                                        {
136
                                                ret = it->formatId;
137
                                                found = true;
138
                                                break;
139
                                        }
5642 cbradney 140
                                }
3968 craig 141
                        }
506 fschmid 142
                }
18341 fschmid 143
                if (found)
144
                        break;
506 fschmid 145
        }
17326 jghali 146
        m_fileType = ret;
5642 cbradney 147
        return ret;
506 fschmid 148
}
5465 avox 149
 
17326 jghali 150
bool FileLoader::loadPage(ScribusDoc* currDoc, int PageToLoad, bool Mpage, QString renamedPageName)
3197 fschmid 151
{
152
        bool ret = false;
8775 cbradney 153
//      newReplacement = false;
154
        ReplacedFonts = currDoc->AllFonts->getSubstitutions();
155
//      dummyScFaces.clear();
9803 fschmid 156
        QList<FileFormat>::const_iterator it;
17326 jghali 157
        if (findFormat(m_fileType, it))
3197 fschmid 158
        {
17326 jghali 159
                if (m_fileType == FORMATID_SLA12XIMPORT)
5642 cbradney 160
                {
17326 jghali 161
                        it->plug->setupTargets(currDoc, currDoc->view(), currDoc->scMW(), currDoc->scMW()->mainWindowProgressBar, &(prefsManager->appPrefs.fontPrefs.AvailFonts));
162
                        ret = it->plug->loadPage(m_fileName, PageToLoad, Mpage, renamedPageName);
8775 cbradney 163
//                      if (ret)
17326 jghali 164
//                              it->plug->getReplacedFontData(newReplacement, ReplacedFonts, dummyScFaces);
5642 cbradney 165
                }
17326 jghali 166
                if (m_fileType == FORMATID_SLA13XIMPORT || m_fileType == FORMATID_SLA134IMPORT || m_fileType == FORMATID_SLA150IMPORT)
5642 cbradney 167
                {
17326 jghali 168
                        it->plug->setupTargets(currDoc, 0, currDoc->scMW(), currDoc->scMW()->mainWindowProgressBar, &(prefsManager->appPrefs.fontPrefs.AvailFonts));
169
                        ret = it->plug->loadPage(m_fileName, PageToLoad, Mpage, renamedPageName);
8775 cbradney 170
//                      if (ret)
17326 jghali 171
//                              it->plug->getReplacedFontData(newReplacement, ReplacedFonts, dummyScFaces);
5642 cbradney 172
                }
3197 fschmid 173
        }
8775 cbradney 174
        if (ret)
175
                ret = postLoad(currDoc);  // FIXME: return false if user doesnt want to replace fonts??
17326 jghali 176
 
3197 fschmid 177
        return ret;
178
}
179
 
506 fschmid 180
/*!
12071 subik 181
 \fn bool FileLoader::LoadFile(ScribusDoc* currDoc)
506 fschmid 182
 \author Franz Schmid
183
 \date
184
 \brief Loads the file "FileName" as a Scribus document
12071 subik 185
 \param currDoc the current document
506 fschmid 186
 \retval bool true when loading is succsessful, false otherwise
187
 */
17326 jghali 188
bool FileLoader::loadFile(ScribusDoc* currDoc)
506 fschmid 189
{
1468 fschmid 190
        newReplacement = false;
14932 cbradney 191
        currDoc->guidesPrefs().marginsShown = prefsManager->appPrefs.guidesPrefs.marginsShown;
192
        currDoc->guidesPrefs().framesShown = prefsManager->appPrefs.guidesPrefs.framesShown;
193
        currDoc->guidesPrefs().layerMarkersShown = prefsManager->appPrefs.guidesPrefs.layerMarkersShown;
194
        currDoc->guidesPrefs().gridShown = prefsManager->appPrefs.guidesPrefs.gridShown;
195
        currDoc->guidesPrefs().guidesShown = prefsManager->appPrefs.guidesPrefs.guidesShown;
196
        currDoc->guidesPrefs().colBordersShown = prefsManager->appPrefs.guidesPrefs.colBordersShown;
197
        currDoc->guidesPrefs().baselineGridShown = prefsManager->appPrefs.guidesPrefs.baselineGridShown;
198
        currDoc->guidesPrefs().linkShown = prefsManager->appPrefs.guidesPrefs.linkShown;
199
        currDoc->itemToolPrefs().polyCorners = prefsManager->appPrefs.itemToolPrefs.polyCorners;
200
        currDoc->itemToolPrefs().polyFactor = prefsManager->appPrefs.itemToolPrefs.polyFactor;
201
        currDoc->itemToolPrefs().polyRotation = prefsManager->appPrefs.itemToolPrefs.polyRotation;
202
        currDoc->itemToolPrefs().polyCurvature = prefsManager->appPrefs.itemToolPrefs.polyCurvature;
16192 fschmid 203
        currDoc->itemToolPrefs().polyOuterCurvature = prefsManager->appPrefs.itemToolPrefs.polyOuterCurvature;
204
        currDoc->itemToolPrefs().polyInnerRot = prefsManager->appPrefs.itemToolPrefs.polyInnerRot;
14932 cbradney 205
        currDoc->itemToolPrefs().polyUseFactor = prefsManager->appPrefs.itemToolPrefs.polyUseFactor;
14925 cbradney 206
        currDoc->setAutoSave(prefsManager->appPrefs.docSetupPrefs.AutoSave);
207
        currDoc->setAutoSaveTime(prefsManager->appPrefs.docSetupPrefs.AutoSaveTime);
8775 cbradney 208
        ReplacedFonts = currDoc->AllFonts->getSubstitutions();
209
        //dummyScFaces.clear();
5642 cbradney 210
        bool ret = false;
9803 fschmid 211
        QList<FileFormat>::const_iterator it;
17326 jghali 212
        if (findFormat(m_fileType, it))
9101 avox 213
        {
17326 jghali 214
//              qDebug("fileloader: type %d plugin %s"),m_fileType,it->trName);
215
                switch (m_fileType)
5642 cbradney 216
                {
217
                        case FORMATID_SLA12XIMPORT:
218
                                {
17326 jghali 219
                                        it->setupTargets(currDoc, currDoc->view(), currDoc->scMW(), currDoc->scMW()->mainWindowProgressBar, &(prefsManager->appPrefs.fontPrefs.AvailFonts));
220
                                        ret=it->loadFile(m_fileName, LoadSavePlugin::lfCreateDoc);
8775 cbradney 221
//                                      if (ret)
17326 jghali 222
//                                              it->getReplacedFontData(newReplacement, ReplacedFonts, dummyScFaces);
5642 cbradney 223
                                }
224
                                break;
225
                        case FORMATID_SLA13XIMPORT:
5653 cbradney 226
                        case FORMATID_SLA134IMPORT:
13746 jghali 227
                        case FORMATID_SLA150IMPORT:
5642 cbradney 228
                                {
17326 jghali 229
                                        it->setupTargets(currDoc, 0, currDoc->scMW(), currDoc->scMW()->mainWindowProgressBar, &(prefsManager->appPrefs.fontPrefs.AvailFonts));
230
                                        ret=it->loadFile(m_fileName, LoadSavePlugin::lfCreateDoc);
8775 cbradney 231
//                                      if (ret)
17326 jghali 232
//                                              it->getReplacedFontData(newReplacement, ReplacedFonts, dummyScFaces);
5642 cbradney 233
                                }
234
                                break;
235
                        default:
17326 jghali 236
                                it->setupTargets(currDoc, currDoc->view(), currDoc->scMW(), currDoc->scMW()->mainWindowProgressBar, &(prefsManager->appPrefs.fontPrefs.AvailFonts));
237
                                ret = it->loadFile(m_fileName, LoadSavePlugin::lfCreateDoc);
5642 cbradney 238
                                break;
239
                }
9101 avox 240
        }
506 fschmid 241
        return ret;
242
}
517 fschmid 243
 
17326 jghali 244
bool FileLoader::saveFile(const QString& fileName, ScribusDoc *doc, QString *savedFile)
5647 cbradney 245
{
246
        bool ret = false;
9803 fschmid 247
        QList<FileFormat>::const_iterator it;
13746 jghali 248
        if (findFormat(FORMATID_SLA150EXPORT, it))
11212 jghali 249
        {
13955 cbradney 250
                it->setupTargets(doc, 0, doc->scMW(), doc->scMW()->mainWindowProgressBar, &(prefsManager->appPrefs.fontPrefs.AvailFonts));
11212 jghali 251
                ret = it->saveFile(fileName);
252
                if (savedFile)
253
                        *savedFile = it->lastSavedFile();
254
        }
5647 cbradney 255
        return ret;
256
}
257
 
17326 jghali 258
bool FileLoader::readStyles(ScribusDoc* doc, StyleSet<ParagraphStyle> &docParagraphStyles)
5642 cbradney 259
{
9803 fschmid 260
        QList<FileFormat>::const_iterator it;
17326 jghali 261
        if (findFormat(m_fileType, it)) {
262
                it->plug->setupTargets(doc, 0, doc->scMW(), doc->scMW()->mainWindowProgressBar, &(prefsManager->appPrefs.fontPrefs.AvailFonts));
263
                return it->readStyles(m_fileName, doc, docParagraphStyles);
8155 avox 264
        }
5642 cbradney 265
        return false;
266
}
5184 avox 267
 
17326 jghali 268
bool FileLoader::readCharStyles(ScribusDoc* doc, StyleSet<CharStyle> &docCharStyles)
8156 avox 269
{
9803 fschmid 270
        QList<FileFormat>::const_iterator it;
17326 jghali 271
        if (findFormat(m_fileType, it)) {
272
                it->plug->setupTargets(doc, 0, doc->scMW(), doc->scMW()->mainWindowProgressBar, &(prefsManager->appPrefs.fontPrefs.AvailFonts));
273
                return it->readCharStyles(m_fileName, doc, docCharStyles);
8156 avox 274
        }
275
        return false;
276
}
277
 
17326 jghali 278
bool FileLoader::readColors(ColorList & colors)
5642 cbradney 279
{
9803 fschmid 280
        QList<FileFormat>::const_iterator it;
17326 jghali 281
        if (findFormat(m_fileType, it))
282
                return it->readColors(m_fileName, colors);
5642 cbradney 283
        return false;
284
}
285
 
17326 jghali 286
bool FileLoader::readPageCount(int *num1, int *num2, QStringList & masterPageNames)
5642 cbradney 287
{
9803 fschmid 288
        QList<FileFormat>::const_iterator it;
17326 jghali 289
        if (findFormat(m_fileType, it))
290
                return it->readPageCount(m_fileName, num1, num2, masterPageNames);
5642 cbradney 291
        return false;
292
}
293
 
17400 fschmid 294
bool FileLoader::readLineStyles(QHash<QString,multiLine> *Sty)
5642 cbradney 295
{
9803 fschmid 296
        QList<FileFormat>::const_iterator it;
17326 jghali 297
        if (findFormat(m_fileType, it))
298
                return it->readLineStyles(m_fileName, Sty);
5642 cbradney 299
        return false;
300
}
301
 
5781 cbradney 302
void FileLoader::readParagraphStyle(ParagraphStyle& vg, const QDomElement& pg, SCFonts &avail, ScribusDoc *currDoc)
5184 avox 303
{
304
        vg.setName(pg.attribute("NAME"));
305
        vg.setLineSpacingMode(static_cast<ParagraphStyle::LineSpacingMode>(pg.attribute("LINESPMode", "0").toInt()));
13465 cbradney 306
        vg.setLineSpacing(ScCLocale::toDoubleC(pg.attribute("LINESP")));
307
        vg.setLeftMargin(ScCLocale::toDoubleC(pg.attribute("INDENT"), 0.0));
5184 avox 308
        if (pg.hasAttribute("RMARGIN"))
13465 cbradney 309
                vg.setRightMargin(ScCLocale::toDoubleC(pg.attribute("RMARGIN"), 0.0));
5184 avox 310
        else
311
                vg.setRightMargin(0);
13465 cbradney 312
        vg.setFirstIndent(ScCLocale::toDoubleC(pg.attribute("FIRST"), 0.0));
6733 avox 313
        vg.setAlignment(static_cast<ParagraphStyle::AlignmentType>(pg.attribute("ALIGN").toInt()));
13465 cbradney 314
        vg.setGapBefore(ScCLocale::toDoubleC(pg.attribute("VOR"), 0.0));
315
        vg.setGapAfter(ScCLocale::toDoubleC(pg.attribute("NACH"), 0.0));
14932 cbradney 316
        QString tmpf(pg.attribute("FONT", currDoc->itemToolPrefs().textFont));
8775 cbradney 317
        currDoc->AllFonts->findFont(tmpf, currDoc);
5781 cbradney 318
                vg.charStyle().setFont((*currDoc->AllFonts)[tmpf]);
13465 cbradney 319
                vg.charStyle().setFontSize(qRound(ScCLocale::toDoubleC(pg.attribute("FONTSIZE"), 12.0) * 10.0));
5184 avox 320
                vg.setHasDropCap(static_cast<bool>(pg.attribute("DROP", "0").toInt()));
18047 craig 321
                vg.setPeCharStyleName(pg.attribute("DROPCHSTYLE", ""));
322
                vg.setPeCharStyleName(pg.attribute("PECHSTYLE", ""));
5184 avox 323
                vg.setDropCapLines(pg.attribute("DROPLIN", "2").toInt());
18047 craig 324
                vg.setParEffectOffset(ScCLocale::toDoubleC(pg.attribute("DROPDIST"), 0.0));
325
                vg.setParEffectOffset(ScCLocale::toDoubleC(pg.attribute("PEDIST"), 0.0));
9607 avox 326
                vg.charStyle().setFeatures(static_cast<StyleFlag>(pg.attribute("EFFECT", "0").toInt()).featureList());
14932 cbradney 327
                vg.charStyle().setFillColor(pg.attribute("FCOLOR", currDoc->itemToolPrefs().shapeFillColor));
5691 avox 328
                vg.charStyle().setFillShade(pg.attribute("FSHADE", "100").toInt());
14932 cbradney 329
                vg.charStyle().setStrokeColor(pg.attribute("SCOLOR", currDoc->itemToolPrefs().shapeLineColor));
5691 avox 330
                vg.charStyle().setStrokeShade(pg.attribute("SSHADE", "100").toInt());
8871 cbradney 331
                if (static_cast<bool>(pg.attribute("BASE", "0").toInt()))
332
                        vg.setLineSpacingMode(ParagraphStyle::BaselineGridLineSpacing);
13465 cbradney 333
                vg.charStyle().setShadowXOffset(qRound(ScCLocale::toDoubleC(pg.attribute("TXTSHX"), 5.0)) * 10);
334
                vg.charStyle().setShadowYOffset(qRound(ScCLocale::toDoubleC(pg.attribute("TXTSHY"), -5.0)) * 10);
335
                vg.charStyle().setOutlineWidth(qRound(ScCLocale::toDoubleC(pg.attribute("TXTOUT"), 1.0)) * 10);
336
                vg.charStyle().setUnderlineOffset(qRound(ScCLocale::toDoubleC(pg.attribute("TXTULP"), -0.1)) * 10);
337
                vg.charStyle().setUnderlineWidth(qRound(ScCLocale::toDoubleC(pg.attribute("TXTULW"), -0.1)) * 10);
338
                vg.charStyle().setStrikethruOffset(qRound(ScCLocale::toDoubleC(pg.attribute("TXTSTP"), -0.1)) * 10);
339
                vg.charStyle().setStrikethruWidth(qRound(ScCLocale::toDoubleC(pg.attribute("TXTSTW"), -0.1)) * 10);
340
                vg.charStyle().setScaleH(qRound(ScCLocale::toDoubleC(pg.attribute("SCALEH"), 100.0)) * 10);
341
                vg.charStyle().setScaleV(qRound(ScCLocale::toDoubleC(pg.attribute("SCALEV"), 100.0)) * 10);
342
                vg.charStyle().setBaselineOffset(qRound(ScCLocale::toDoubleC(pg.attribute("BASEO"), 0.0)) * 10);
343
                vg.charStyle().setTracking(qRound(ScCLocale::toDoubleC(pg.attribute("KERN"), 0.0)) * 10);
5184 avox 344
                if ((pg.hasAttribute("NUMTAB")) && (pg.attribute("NUMTAB", "0").toInt() != 0))
345
                {
9803 fschmid 346
                        QList<ParagraphStyle::TabRecord> tbs;
5184 avox 347
                        ParagraphStyle::TabRecord tb;
348
                        QString tmp = pg.attribute("TABS");
10002 fschmid 349
                        QTextStream tgv(&tmp, QIODevice::ReadOnly);
13497 jghali 350
                        QString xf, xf2;
5184 avox 351
                        for (int cxv = 0; cxv < pg.attribute("NUMTAB", "0").toInt(); cxv += 2)
352
                        {
353
                                tgv >> xf;
354
                                tgv >> xf2;
13497 jghali 355
                                tb.tabPosition = ScCLocale::toDoubleC(xf2);
356
                                tb.tabType = static_cast<int>(ScCLocale::toDoubleC(xf));
5184 avox 357
                                tb.tabFillChar =  QChar();
6733 avox 358
                                tbs.append(tb);
5184 avox 359
                        }
6733 avox 360
                        vg.setTabValues(tbs);
5184 avox 361
                        tmp = "";
362
                }
363
                else
364
                {
9803 fschmid 365
                        QList<ParagraphStyle::TabRecord> tbs;
5184 avox 366
                        QDomNode IT = pg.firstChild();
367
                        while(!IT.isNull())
368
                        {
369
                                QDomElement it = IT.toElement();
370
                                if (it.tagName()=="Tabs")
371
                                {
372
                                        ParagraphStyle::TabRecord tb;
13465 cbradney 373
                                        tb.tabPosition = ScCLocale::toDoubleC(it.attribute("Pos"));
5184 avox 374
                                        tb.tabType = it.attribute("Type").toInt();
375
                                        QString tbCh = "";
376
                                        tbCh = it.attribute("Fill","");
377
                                        if (tbCh.isEmpty())
378
                                                tb.tabFillChar = QChar();
379
                                        else
380
                                                tb.tabFillChar = tbCh[0];
6733 avox 381
                                        tbs.append(tb);
5184 avox 382
                                }
383
                                IT=IT.nextSibling();
384
                        }
6733 avox 385
                        vg.setTabValues(tbs);
5184 avox 386
                }
387
}
388
 
17326 jghali 389
QImage FileLoader::readThumbnail()
14659 fschmid 390
{
391
        QList<FileFormat>::const_iterator it;
17326 jghali 392
        if (findFormat(m_fileType, it))
393
                return it->readThumbnail(m_fileName);
14659 fschmid 394
        return QImage();
395
}
396
 
5781 cbradney 397
bool FileLoader::postLoad(ScribusDoc* currDoc)
3650 cbradney 398
{
6839 cbradney 399
        //CB #3749 We have to set these up in post load as each format will load into the doc itself
400
        //settings. As the hyphenator was created in the doc constructor, it needs to be updated.
401
        //FIXME: Remove these duplicate settings altogether
402
        if (currDoc->docHyphenator!=0)
403
        {
14924 cbradney 404
                        currDoc->docHyphenator->Automatic=currDoc->hyphAutomatic();
405
                        currDoc->docHyphenator->AutoCheck=currDoc->hyphAutoCheck();
406
                        currDoc->docHyphenator->Language=currDoc->hyphLanguage();
407
                        currDoc->docHyphenator->MinWordLen=currDoc->hyphMinimumWordLength();
408
                        currDoc->docHyphenator->HyCount=currDoc->hyphConsecutiveLines();
6839 cbradney 409
        }
17326 jghali 410
 
411
        ReplacedFonts = currDoc->AllFonts->getSubstitutions(ReplacedFonts.keys());
3650 cbradney 412
        if (ReplacedFonts.count() != 0)
413
        {
13955 cbradney 414
                if ((prefsManager->appPrefs.fontPrefs.askBeforeSubstitute))
3650 cbradney 415
                {
9380 fschmid 416
                        qApp->changeOverrideCursor(QCursor(Qt::ArrowCursor));
4209 craig 417
                        FontReplaceDialog dia(0, &ReplacedFonts);
418
                        if (dia.exec())
3650 cbradney 419
                        {
420
                                QMap<QString,QString>::Iterator itfsu;
421
                                for (itfsu = ReplacedFonts.begin(); itfsu != ReplacedFonts.end(); ++itfsu)
422
                                {
4209 craig 423
                                        if (dia.stickyReplacements->isChecked())
13967 cbradney 424
                                                prefsManager->appPrefs.fontPrefs.GFontSub[itfsu.key()] = itfsu.value();
3650 cbradney 425
                                }
8775 cbradney 426
                                currDoc->AllFonts->setSubstitutions(ReplacedFonts, currDoc);
12935 fschmid 427
                                ResourceCollection repl;
428
                                repl.availableFonts = currDoc->AllFonts;
429
                                repl.mapFonts(ReplacedFonts);
430
                                currDoc->replaceNamedResources(repl);
8775 cbradney 431
                                return true;
3650 cbradney 432
                        }
433
                        else
434
                        {
435
                                return false;
436
                        }
437
                }
438
        }
4546 subik 439
 
3650 cbradney 440
        return true;
441
}
442
 
443
void FileLoader::informReplacementFonts()
444
{
445
        if (ReplacedFonts.count() != 0)
446
        {
9380 fschmid 447
                qApp->changeOverrideCursor(QCursor(Qt::ArrowCursor));
3650 cbradney 448
                QString mess = tr("Some fonts used by this document have been substituted:")+"\n\n";
449
                QMap<QString,QString>::Iterator it;
450
                for (it = ReplacedFonts.begin(); it != ReplacedFonts.end(); ++it)
451
                {
10469 cbradney 452
                        mess += it.key() + tr(" was replaced by: ")+ it.value() +"\n";
3650 cbradney 453
                }
5781 cbradney 454
                QMessageBox::warning(ScCore->primaryMainWindow(), CommonStrings::trWarning, mess, 1, 0, 0);
3650 cbradney 455
        }
456
}
5642 cbradney 457
 
9803 fschmid 458
bool FileLoader::findFormat(uint formatId, QList<FileFormat>::const_iterator &it)
5642 cbradney 459
{
9803 fschmid 460
        QList<FileFormat> fileFormats(LoadSavePlugin::supportedFormats());
5642 cbradney 461
        it=fileFormats.constBegin();
9803 fschmid 462
        QList<FileFormat>::const_iterator itEnd(fileFormats.constEnd());
5642 cbradney 463
        for ( ; it != itEnd ; ++it )
464
        {
17326 jghali 465
                if (formatId == it->formatId)
5642 cbradney 466
                        return true;
467
        }
468
        return false;
469
}