Subversion Repositories Scribus

Rev

Rev 12285 | 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
 
24
#include "commonstrings.h"
838 cbradney 25
#include "fileloader.h"
3650 cbradney 26
#include "fontreplacedialog.h"
6843 cbradney 27
#include "hyphenator.h"
517 fschmid 28
#include "missing.h"
3670 cbradney 29
#include "page.h"
1549 subik 30
#include "pluginmanager.h"
5642 cbradney 31
#include "plugins/formatidlist.h"
2445 cbradney 32
#include "pagestructs.h"
8775 cbradney 33
#include "resourcecollection.h"
2688 craig 34
#include "scconfig.h"
5781 cbradney 35
#include "scribuscore.h"
3650 cbradney 36
#include "scribusXml.h"
37
#include "units.h"
3696 craig 38
#include "loadsaveplugin.h"
5087 subik 39
#include "guidemanager.h"
5184 avox 40
#include "text/nlsconfig.h"
3650 cbradney 41
 
4024 craig 42
// We need to include the headers for the plugins we support until we start
43
// using LoadSavePlugin to pick them for us. We only use these headers to
44
// get the format IDs, NOTHING ELSE.
5642 cbradney 45
// #include "plugins/svgimplugin/svgplugin.h"
46
// #include "plugins/psimport/importpsplugin.h"
47
// #include "plugins/fileloader/oodraw/oodrawimp.h"
4024 craig 48
 
8022 jghali 49
#include <zlib.h>
2531 craig 50
#include "util.h"
2834 cbradney 51
#include "prefsmanager.h"
506 fschmid 52
 
53
/*!
54
 \author Franz Schmid
55
 \date
56
 \brief Constructor, sets the variable "FileName" to the input parameter fileName
4645 subik 57
 \param fileName filename to load
506 fschmid 58
 \retval None
59
 */
3644 craig 60
FileLoader::FileLoader(const QString & fileName) :
10469 cbradney 61
        QObject(0),
4024 craig 62
        FileName(fileName),
63
        FileType(-1),
5642 cbradney 64
        formatSLA12x(LoadSavePlugin::getFormatById(FORMATID_SLA12XIMPORT)),
65
        formatSLA13x(LoadSavePlugin::getFormatById(FORMATID_SLA13XIMPORT)),
5653 cbradney 66
        formatSLA134(LoadSavePlugin::getFormatById(FORMATID_SLA134IMPORT)),
4024 craig 67
        formatPS(LoadSavePlugin::getFormatById(FORMATID_PSIMPORT)),
68
        formatSVG(LoadSavePlugin::getFormatById(FORMATID_SVGIMPORT)),
69
        formatSXD(LoadSavePlugin::getFormatById(FORMATID_SXDIMPORT)),
70
        formatODG(LoadSavePlugin::getFormatById(FORMATID_ODGIMPORT)),
71
        prefsManager(PrefsManager::instance())
506 fschmid 72
{
73
}
74
 
3644 craig 75
// FIXME: This static method is here as a temporary transitional
76
// measure during the process of converting to file loader plugins.
77
const QString FileLoader::getLoadFilterString()
78
{
3696 craig 79
        return LoadSavePlugin::fileDialogLoadFilter().join(";;");
3644 craig 80
}
81
 
506 fschmid 82
/*!
83
 \fn int FileLoader::TestFile()
84
 \author Franz Schmid
85
 \date
86
 \brief Tests if the file "FileName" exists and determines the type of the file.
87
 \retval int -1 if the file doesn't exist or any other error has occured, 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
88
 */
89
int FileLoader::TestFile()
90
{
91
        QFileInfo fi = QFileInfo(FileName);
92
        int ret = -1;
93
        if (!fi.exists())
94
                ret = -1;
10469 cbradney 95
        QString ext = fi.completeSuffix().toLower();
506 fschmid 96
 
9803 fschmid 97
        QList<FileFormat> fileFormats(LoadSavePlugin::supportedFormats());
98
        QList<FileFormat>::const_iterator it(fileFormats.constBegin());
99
        QList<FileFormat>::const_iterator itEnd(fileFormats.constEnd());
5642 cbradney 100
        for ( ; it != itEnd ; ++it )
506 fschmid 101
        {
10469 cbradney 102
                if ((*it).nameMatch.indexIn("."+ext)!=-1)
3968 craig 103
                {
5653 cbradney 104
//                      qDebug(QString("Match :%1: :.%2: on %3").arg((*it).nameMatch.pattern()).arg(ext).arg((*it).trName));
5642 cbradney 105
                        if ((*it).plug!=0)
3968 craig 106
                        {
5642 cbradney 107
                                if ((*it).plug->fileSupported(0, FileName))
108
                                {
109
//                                      qDebug(QString("File Supported With: %1").arg((*it).trName));
110
                                        ret=(*it).formatId;
111
                                        break;
112
                                }
3968 craig 113
                        }
506 fschmid 114
                }
5642 cbradney 115
//              else
116
//                      qDebug(QString("No Match :%1: :.%2: on %3").arg((*it).nameMatch.pattern()).arg(ext).arg((*it).trName));
506 fschmid 117
        }
5642 cbradney 118
 
119
//      if (ret==-1)
120
//      {
121
//              if ((ext.endsWith("sla.gz")) || (ext.endsWith("sla")) || (ext.endsWith("scd.gz")) || (ext.endsWith("scd")))
122
//                      ret = CheckScribus();
123
//              else 
124
//              if (((ext.endsWith("ps")) || (ext.endsWith("eps"))) && (formatPS))
125
//                      ret = FORMATID_PSIMPORT;
126
//              else if (((ext.endsWith("svg")) || (ext.endsWith("svgz"))) && (formatSVG))
127
//                      ret = FORMATID_SVGIMPORT;
128
//              else if ((ext.endsWith("sxd")) && (formatSXD))
129
//                      ret = FORMATID_SXDIMPORT;
130
//              else if ((ext.endsWith("odg")) && (formatODG))
131
//                      ret = FORMATID_ODGIMPORT;
132
//      }
133
/*      if (ext == "pdf")
134
                ret = 4; */
135
        FileType = ret;
136
        return ret;
506 fschmid 137
}
8775 cbradney 138
/*
5781 cbradney 139
static void replaceFonts(ScribusDoc* currDoc, PageItem *it, QMap<QString, int> UsedFonts, QMap<QString, QString> ReplacedFonts)
5559 avox 140
{      
5465 avox 141
        if ((it->asTextFrame()) || (it->asPathText()))
142
        {
143
                CharStyle newFontStyle;
144
                for (uint e = 0; e < it->itemText.nrOfRuns(); ++e)
145
                {
146
                        int start = it->itemText.startOfRun(e);
5980 avox 147
                        ScFace oldFont = it->itemText.charStyle(start).font();
148
                        if (!UsedFonts.contains(oldFont.scName())) {
149
                                newFontStyle.setFont((*currDoc->AllFonts)[ReplacedFonts[oldFont.scName()]]);
5721 avox 150
                                it->itemText.applyCharStyle(start, it->itemText.endOfRun(e) - start, newFontStyle );
5465 avox 151
                        }
152
                }
153
        }
154
}
155
 
8775 cbradney 156
*/
5781 cbradney 157
bool FileLoader::LoadPage(ScribusDoc* currDoc, int PageToLoad, bool Mpage, QString renamedPageName)
3197 fschmid 158
{
159
        bool ret = false;
8775 cbradney 160
//      newReplacement = false;
161
        ReplacedFonts = currDoc->AllFonts->getSubstitutions();
162
//      dummyScFaces.clear();
9803 fschmid 163
        QList<FileFormat>::const_iterator it;
5642 cbradney 164
        if (findFormat(FileType, it))
3197 fschmid 165
        {
5642 cbradney 166
                if (FileType==FORMATID_SLA12XIMPORT)
167
                {
5781 cbradney 168
                        (*it).plug->setupTargets(currDoc, currDoc->view(), currDoc->scMW(), currDoc->scMW()->mainWindowProgressBar, &(prefsManager->appPrefs.AvailFonts));
5642 cbradney 169
                        ret=(*it).plug->loadPage(FileName, PageToLoad, Mpage, renamedPageName);
8775 cbradney 170
//                      if (ret)
171
//                              (*it).plug->getReplacedFontData(newReplacement, ReplacedFonts, dummyScFaces);
5642 cbradney 172
                }
5653 cbradney 173
                if (FileType==FORMATID_SLA13XIMPORT || FileType==FORMATID_SLA134IMPORT)
5642 cbradney 174
                {
5781 cbradney 175
                        (*it).plug->setupTargets(currDoc, 0, currDoc->scMW(), currDoc->scMW()->mainWindowProgressBar, &(prefsManager->appPrefs.AvailFonts));
5642 cbradney 176
                        ret=(*it).plug->loadPage(FileName, PageToLoad, Mpage, renamedPageName);
8775 cbradney 177
//                      if (ret)
178
//                              (*it).plug->getReplacedFontData(newReplacement, ReplacedFonts, dummyScFaces);
5642 cbradney 179
                }
3197 fschmid 180
        }
8775 cbradney 181
        if (ret)
182
                ret = postLoad(currDoc);  // FIXME: return false if user doesnt want to replace fonts??
183
 
184
        /*
7442 avox 185
        //FIXME: this goes into scribusdoc and should work with substitutes
3197 fschmid 186
        if (ReplacedFonts.count() != 0)
187
        {
188
                if ((prefsManager->appPrefs.askBeforeSubstituite) || (newReplacement))
189
                {
190
                        qApp->setOverrideCursor(QCursor(Qt::arrowCursor), true);
4209 craig 191
                        FontReplaceDialog dia(0, &ReplacedFonts);
192
                        if (dia.exec())
3197 fschmid 193
                        {
194
                                QMap<QString,QString>::Iterator itfsu;
195
                                for (itfsu = ReplacedFonts.begin(); itfsu != ReplacedFonts.end(); ++itfsu)
196
                                {
4209 craig 197
                                        if (dia.stickyReplacements->isChecked())
3197 fschmid 198
                                                prefsManager->appPrefs.GFontSub[itfsu.key()] = itfsu.data();
199
                                }
200
                        }
201
                        else
202
                        {
203
                                return false;
204
                        }
205
                }
5781 cbradney 206
                for (uint d = 0; d < currDoc->MasterItems.count(); ++d)
3197 fschmid 207
                {
5781 cbradney 208
                        replaceFonts(currDoc, currDoc->MasterItems.at(d), currDoc->UsedFonts, ReplacedFonts);
3197 fschmid 209
                }
5781 cbradney 210
                for (uint d = 0; d < currDoc->DocItems.count(); ++d)
3197 fschmid 211
                {
5781 cbradney 212
                        replaceFonts(currDoc, currDoc->DocItems.at(d), currDoc->UsedFonts, ReplacedFonts);
3197 fschmid 213
                }
5781 cbradney 214
                for (uint d = 0; d < currDoc->FrameItems.count(); ++d)
3197 fschmid 215
                {
5781 cbradney 216
                        replaceFonts(currDoc, currDoc->FrameItems.at(d), currDoc->UsedFonts, ReplacedFonts);
3197 fschmid 217
                }
7442 avox 218
                for (uint a = 0; a < currDoc->paragraphStyles().count(); ++a)
3197 fschmid 219
                {
7442 avox 220
//                      if ( !currDoc->paragraphStyles()[a].charStyle().font().isNone() && !currDoc->UsedFonts.contains(currDoc->paragraphStyles()[a].charStyle().font().scName()))
221
//                              currDoc->paragraphStyles()[a].charStyle().setFont
222
//                                      ((*currDoc->AllFonts)[ReplacedFonts[currDoc->paragraphStyles()[a].charStyle().font().scName()]]);
3197 fschmid 223
                }
224
                QMap<QString,QString>::Iterator itfsu;
225
                for (itfsu = ReplacedFonts.begin(); itfsu != ReplacedFonts.end(); ++itfsu)
226
                {
5781 cbradney 227
                        if (!currDoc->UsedFonts.contains(itfsu.data()))
3197 fschmid 228
                        {
3544 avox 229
//                              QFont fo = prefsManager->appPrefs.AvailFonts[itfsu.data()]->Font;
4026 craig 230
//                              fo.setPointSize(qRound(ScMW->doc->toolSettings.defSize / 10.0));
5781 cbradney 231
                                currDoc->AddFont(itfsu.data(), qRound(currDoc->toolSettings.defSize / 10.0));
3197 fschmid 232
                        }
233
                }
234
                if (prefsManager->appPrefs.askBeforeSubstituite)
235
                        ReplacedFonts.clear();
8775 cbradney 236
//              dummyScFaces.clear();
3197 fschmid 237
        }
8775 cbradney 238
        */
3197 fschmid 239
        return ret;
240
}
241
 
506 fschmid 242
/*!
12071 subik 243
 \fn bool FileLoader::LoadFile(ScribusDoc* currDoc)
506 fschmid 244
 \author Franz Schmid
245
 \date
246
 \brief Loads the file "FileName" as a Scribus document
12071 subik 247
 \param currDoc the current document
506 fschmid 248
 \retval bool true when loading is succsessful, false otherwise
249
 */
5781 cbradney 250
bool FileLoader::LoadFile(ScribusDoc* currDoc)
506 fschmid 251
{
1468 fschmid 252
        newReplacement = false;
5781 cbradney 253
        currDoc->guidesSettings.marginsShown = prefsManager->appPrefs.guidesSettings.marginsShown;
254
        currDoc->guidesSettings.framesShown = prefsManager->appPrefs.guidesSettings.framesShown;
255
        currDoc->guidesSettings.layerMarkersShown = prefsManager->appPrefs.guidesSettings.layerMarkersShown;
256
        currDoc->guidesSettings.gridShown = prefsManager->appPrefs.guidesSettings.gridShown;
257
        currDoc->guidesSettings.guidesShown = prefsManager->appPrefs.guidesSettings.guidesShown;
258
        currDoc->guidesSettings.colBordersShown = prefsManager->appPrefs.guidesSettings.colBordersShown;
259
        currDoc->guidesSettings.baseShown = prefsManager->appPrefs.guidesSettings.baseShown;
260
        currDoc->guidesSettings.linkShown = prefsManager->appPrefs.guidesSettings.linkShown;
261
        currDoc->toolSettings.polyC = prefsManager->appPrefs.toolSettings.polyC;
262
        currDoc->toolSettings.polyF = prefsManager->appPrefs.toolSettings.polyF;
263
        currDoc->toolSettings.polyR = prefsManager->appPrefs.toolSettings.polyR;
264
        currDoc->toolSettings.polyFd = prefsManager->appPrefs.toolSettings.polyFd;
265
        currDoc->toolSettings.polyS = prefsManager->appPrefs.toolSettings.polyS;
266
        currDoc->AutoSave = prefsManager->appPrefs.AutoSave;
267
        currDoc->AutoSaveTime = prefsManager->appPrefs.AutoSaveTime;
8775 cbradney 268
        ReplacedFonts = currDoc->AllFonts->getSubstitutions();
269
        //dummyScFaces.clear();
5642 cbradney 270
        bool ret = false;
9803 fschmid 271
        QList<FileFormat>::const_iterator it;
5642 cbradney 272
        if (findFormat(FileType, it))
9101 avox 273
        {
10469 cbradney 274
//              qDebug("fileloader: type %d plugin %s"),FileType,(*it).trName);
5642 cbradney 275
                switch (FileType)
276
                {
277
                        case FORMATID_SLA12XIMPORT:
278
                                {
5781 cbradney 279
                                        (*it).setupTargets(currDoc, currDoc->view(), currDoc->scMW(), currDoc->scMW()->mainWindowProgressBar, &(prefsManager->appPrefs.AvailFonts));
5642 cbradney 280
                                        ret=(*it).loadFile(FileName, LoadSavePlugin::lfCreateDoc);
8775 cbradney 281
//                                      if (ret)
282
//                                              (*it).getReplacedFontData(newReplacement, ReplacedFonts, dummyScFaces);
5642 cbradney 283
                                }
284
                                break;
285
                        case FORMATID_SLA13XIMPORT:
5653 cbradney 286
                        case FORMATID_SLA134IMPORT:
5642 cbradney 287
                                {
5781 cbradney 288
                                        (*it).setupTargets(currDoc, 0, currDoc->scMW(), currDoc->scMW()->mainWindowProgressBar, &(prefsManager->appPrefs.AvailFonts));
5642 cbradney 289
                                        ret=(*it).loadFile(FileName, LoadSavePlugin::lfCreateDoc);
8775 cbradney 290
//                                      if (ret)
291
//                                              (*it).getReplacedFontData(newReplacement, ReplacedFonts, dummyScFaces);
5642 cbradney 292
                                }
293
                                break;
294
                        default:
5781 cbradney 295
                                (*it).setupTargets(currDoc, currDoc->view(), currDoc->scMW(), currDoc->scMW()->mainWindowProgressBar, &(prefsManager->appPrefs.AvailFonts));
5642 cbradney 296
                                ret = (*it).loadFile(FileName, LoadSavePlugin::lfCreateDoc);
297
                                break;
298
                }
9101 avox 299
        }
506 fschmid 300
        return ret;
301
}
517 fschmid 302
 
11212 jghali 303
bool FileLoader::SaveFile(const QString& fileName, ScribusDoc *doc, QString *savedFile)
5647 cbradney 304
{
305
        bool ret = false;
9803 fschmid 306
        QList<FileFormat>::const_iterator it;
5653 cbradney 307
        if (findFormat(FORMATID_SLA134EXPORT, it))
11212 jghali 308
        {
309
                it->setupTargets(doc, 0, doc->scMW(), doc->scMW()->mainWindowProgressBar, &(prefsManager->appPrefs.AvailFonts));
310
                ret = it->saveFile(fileName);
311
                if (savedFile)
312
                        *savedFile = it->lastSavedFile();
313
        }
5647 cbradney 314
        return ret;
315
}
316
 
12343 pierre 317
bool FileLoader::ReadStyles(const QString& fileName, ScribusDoc* doc)
5642 cbradney 318
{
9803 fschmid 319
        QList<FileFormat>::const_iterator it;
8155 avox 320
        if (findFormat(FileType, it)) {
321
                (*it).plug->setupTargets(doc, 0, doc->scMW(), doc->scMW()->mainWindowProgressBar, &(prefsManager->appPrefs.AvailFonts));
12343 pierre 322
                return (*it).readStyles(fileName, doc);
8155 avox 323
        }
5642 cbradney 324
        return false;
325
}
5184 avox 326
 
12343 pierre 327
bool FileLoader::ReadCharStyles(const QString& fileName, ScribusDoc* doc)
8156 avox 328
{
9803 fschmid 329
        QList<FileFormat>::const_iterator it;
8156 avox 330
        if (findFormat(FileType, it)) {
331
                (*it).plug->setupTargets(doc, 0, doc->scMW(), doc->scMW()->mainWindowProgressBar, &(prefsManager->appPrefs.AvailFonts));
12343 pierre 332
                return (*it).readCharStyles(fileName, doc);
8156 avox 333
        }
334
        return false;
335
}
336
 
5642 cbradney 337
bool FileLoader::ReadColors(const QString& fileName, ColorList & colors)
338
{
9803 fschmid 339
        QList<FileFormat>::const_iterator it;
5642 cbradney 340
        if (findFormat(FileType, it))
5669 cbradney 341
                return (*it).readColors(fileName, colors);
5642 cbradney 342
        return false;
343
}
344
 
345
 
346
bool FileLoader::ReadPageCount(const QString& fileName, int *num1, int *num2, QStringList & masterPageNames)
347
{
9803 fschmid 348
        QList<FileFormat>::const_iterator it;
5642 cbradney 349
        if (findFormat(FileType, it))
5669 cbradney 350
                return (*it).readPageCount(fileName, num1, num2, masterPageNames);
5642 cbradney 351
        return false;
352
}
353
 
354
bool FileLoader::ReadLineStyles(const QString& fileName, QMap<QString,multiLine> *Sty)
355
{
9803 fschmid 356
        QList<FileFormat>::const_iterator it;
5642 cbradney 357
        if (findFormat(FileType, it))
5669 cbradney 358
                return (*it).readLineStyles(fileName, Sty);
5642 cbradney 359
        return false;
360
}
361
 
5781 cbradney 362
void FileLoader::readParagraphStyle(ParagraphStyle& vg, const QDomElement& pg, SCFonts &avail, ScribusDoc *currDoc)
5184 avox 363
{
364
        vg.setName(pg.attribute("NAME"));
365
        vg.setLineSpacingMode(static_cast<ParagraphStyle::LineSpacingMode>(pg.attribute("LINESPMode", "0").toInt()));
366
        vg.setLineSpacing(pg.attribute("LINESP").toDouble());
367
        vg.setLeftMargin(pg.attribute("INDENT", "0").toDouble());
368
        if (pg.hasAttribute("RMARGIN"))
369
                vg.setRightMargin(pg.attribute("RMARGIN", "0").toDouble());
370
        else
371
                vg.setRightMargin(0);
372
        vg.setFirstIndent(pg.attribute("FIRST", "0").toDouble());
6733 avox 373
        vg.setAlignment(static_cast<ParagraphStyle::AlignmentType>(pg.attribute("ALIGN").toInt()));
5184 avox 374
        vg.setGapBefore(pg.attribute("VOR", "0").toDouble());
375
        vg.setGapAfter(pg.attribute("NACH", "0").toDouble());
5781 cbradney 376
        QString tmpf = pg.attribute("FONT", currDoc->toolSettings.defFont);
8775 cbradney 377
        currDoc->AllFonts->findFont(tmpf, currDoc);
5781 cbradney 378
                vg.charStyle().setFont((*currDoc->AllFonts)[tmpf]);
5691 avox 379
                vg.charStyle().setFontSize(qRound(pg.attribute("FONTSIZE", "12").toDouble() * 10.0));
5184 avox 380
                vg.setHasDropCap(static_cast<bool>(pg.attribute("DROP", "0").toInt()));
381
                vg.setDropCapLines(pg.attribute("DROPLIN", "2").toInt());
382
                vg.setDropCapOffset(pg.attribute("DROPDIST", "0").toDouble());
9607 avox 383
                vg.charStyle().setFeatures(static_cast<StyleFlag>(pg.attribute("EFFECT", "0").toInt()).featureList());
5781 cbradney 384
                vg.charStyle().setFillColor(pg.attribute("FCOLOR", currDoc->toolSettings.dBrush));
5691 avox 385
                vg.charStyle().setFillShade(pg.attribute("FSHADE", "100").toInt());
5781 cbradney 386
                vg.charStyle().setStrokeColor(pg.attribute("SCOLOR", currDoc->toolSettings.dPen));
5691 avox 387
                vg.charStyle().setStrokeShade(pg.attribute("SSHADE", "100").toInt());
8871 cbradney 388
                if (static_cast<bool>(pg.attribute("BASE", "0").toInt()))
389
                        vg.setLineSpacingMode(ParagraphStyle::BaselineGridLineSpacing);
5691 avox 390
                vg.charStyle().setShadowXOffset(qRound(pg.attribute("TXTSHX", "5").toDouble() * 10));
391
                vg.charStyle().setShadowYOffset(qRound(pg.attribute("TXTSHY", "-5").toDouble() * 10));
392
                vg.charStyle().setOutlineWidth(qRound(pg.attribute("TXTOUT", "1").toDouble() * 10));
393
                vg.charStyle().setUnderlineOffset(qRound(pg.attribute("TXTULP", "-0.1").toDouble() * 10));
394
                vg.charStyle().setUnderlineWidth(qRound(pg.attribute("TXTULW", "-0.1").toDouble() * 10));
395
                vg.charStyle().setStrikethruOffset(qRound(pg.attribute("TXTSTP", "-0.1").toDouble() * 10));
396
                vg.charStyle().setStrikethruWidth(qRound(pg.attribute("TXTSTW", "-0.1").toDouble() * 10));
397
                vg.charStyle().setScaleH(qRound(pg.attribute("SCALEH", "100").toDouble() * 10));
398
                vg.charStyle().setScaleV(qRound(pg.attribute("SCALEV", "100").toDouble() * 10));
399
                vg.charStyle().setBaselineOffset(qRound(pg.attribute("BASEO", "0").toDouble() * 10));
400
                vg.charStyle().setTracking(qRound(pg.attribute("KERN", "0").toDouble() * 10));
5184 avox 401
                if ((pg.hasAttribute("NUMTAB")) && (pg.attribute("NUMTAB", "0").toInt() != 0))
402
                {
9803 fschmid 403
                        QList<ParagraphStyle::TabRecord> tbs;
5184 avox 404
                        ParagraphStyle::TabRecord tb;
405
                        QString tmp = pg.attribute("TABS");
10002 fschmid 406
                        QTextStream tgv(&tmp, QIODevice::ReadOnly);
5184 avox 407
                        double xf, xf2;
408
                        for (int cxv = 0; cxv < pg.attribute("NUMTAB", "0").toInt(); cxv += 2)
409
                        {
410
                                tgv >> xf;
411
                                tgv >> xf2;
412
                                tb.tabPosition = xf2;
413
                                tb.tabType = static_cast<int>(xf);
414
                                tb.tabFillChar =  QChar();
6733 avox 415
                                tbs.append(tb);
5184 avox 416
                        }
6733 avox 417
                        vg.setTabValues(tbs);
5184 avox 418
                        tmp = "";
419
                }
420
                else
421
                {
9803 fschmid 422
                        QList<ParagraphStyle::TabRecord> tbs;
5184 avox 423
                        QDomNode IT = pg.firstChild();
424
                        while(!IT.isNull())
425
                        {
426
                                QDomElement it = IT.toElement();
427
                                if (it.tagName()=="Tabs")
428
                                {
429
                                        ParagraphStyle::TabRecord tb;
430
                                        tb.tabPosition = it.attribute("Pos").toDouble();
431
                                        tb.tabType = it.attribute("Type").toInt();
432
                                        QString tbCh = "";
433
                                        tbCh = it.attribute("Fill","");
434
                                        if (tbCh.isEmpty())
435
                                                tb.tabFillChar = QChar();
436
                                        else
437
                                                tb.tabFillChar = tbCh[0];
6733 avox 438
                                        tbs.append(tb);
5184 avox 439
                                }
440
                                IT=IT.nextSibling();
441
                        }
6733 avox 442
                        vg.setTabValues(tbs);
5184 avox 443
                }
444
}
445
 
5781 cbradney 446
bool FileLoader::postLoad(ScribusDoc* currDoc)
3650 cbradney 447
{
6839 cbradney 448
        //CB #3749 We have to set these up in post load as each format will load into the doc itself
449
        //settings. As the hyphenator was created in the doc constructor, it needs to be updated.
450
        //FIXME: Remove these duplicate settings altogether
451
        if (currDoc->docHyphenator!=0)
452
        {
453
                        currDoc->docHyphenator->Automatic=currDoc->Automatic;
454
                        currDoc->docHyphenator->AutoCheck=currDoc->AutoCheck;
455
                        currDoc->docHyphenator->Language=currDoc->Language;
456
                        currDoc->docHyphenator->MinWordLen=currDoc->MinWordLen;
457
                        currDoc->docHyphenator->HyCount=currDoc->HyCount;
458
        }
4026 craig 459
/*      for (uint d = 0; d < ScMW->doc->MasterItems.count(); ++d)
3650 cbradney 460
        {
4026 craig 461
                PageItem *it = ScMW->doc->MasterItems.at(d);
3650 cbradney 462
                if ((it->itemType() == PageItem::TextFrame) || (it->itemType() == PageItem::PathText))
463
                {
464
                        for (uint e = 0; e < it->itemText.count(); ++e)
465
                        {
466
                                ScText *hl = it->itemText.at(e);
467
                                if ((hl->ch == QChar(25)) && ((int)hl->cembedded != -1))
4026 craig 468
                                        hl->cembedded = ScMW->doc->FrameItems.at((int)hl->cembedded);
3650 cbradney 469
                                else
470
                                        hl->cembedded = 0;
471
                        }
472
                }
473
        }
4026 craig 474
        for (uint d = 0; d < ScMW->doc->DocItems.count(); ++d)
3650 cbradney 475
        {
4026 craig 476
                PageItem *it = ScMW->doc->DocItems.at(d);
3650 cbradney 477
                if ((it->itemType() == PageItem::TextFrame) || (it->itemType() == PageItem::PathText))
478
                {
479
                        for (uint e = 0; e < it->itemText.count(); ++e)
480
                        {
481
                                ScText *hl = it->itemText.at(e);
482
                                if ((hl->ch == QChar(25)) && ((int)hl->cembedded != -1))
4026 craig 483
                                        hl->cembedded = ScMW->doc->FrameItems.at((int)hl->cembedded);
3650 cbradney 484
                                else
485
                                        hl->cembedded = 0;
486
                        }
487
                }
488
        } */
8775 cbradney 489
        //FIXME: this goes into scribusdoc
490
        //ResourceCollection rsc;
491
        //currDoc->getNamedResources(rsc);
492
        //ReplacedFonts.clear();
493
        //QMap<QString,QString>::ConstIterator it;
494
        //for (it = rsc.fonts().begin(); it != rsc.fonts().end(); ++it)
495
        //{
496
        //      const ScFace& font (rsc.availableFonts->findFont(it.key(), currDoc));
497
        //      if (font.isReplacement() )
498
        //              ReplacedFonts[it.key()] = font.replacementName();
499
        //}
500
                ReplacedFonts = currDoc->AllFonts->getSubstitutions(ReplacedFonts.keys());
3650 cbradney 501
        if (ReplacedFonts.count() != 0)
502
        {
8775 cbradney 503
                if ((prefsManager->appPrefs.askBeforeSubstituite))
3650 cbradney 504
                {
9380 fschmid 505
                        qApp->changeOverrideCursor(QCursor(Qt::ArrowCursor));
4209 craig 506
                        FontReplaceDialog dia(0, &ReplacedFonts);
507
                        if (dia.exec())
3650 cbradney 508
                        {
509
                                QMap<QString,QString>::Iterator itfsu;
510
                                for (itfsu = ReplacedFonts.begin(); itfsu != ReplacedFonts.end(); ++itfsu)
511
                                {
4209 craig 512
                                        if (dia.stickyReplacements->isChecked())
10469 cbradney 513
                                                prefsManager->appPrefs.GFontSub[itfsu.key()] = itfsu.value();
3650 cbradney 514
                                }
8775 cbradney 515
                                currDoc->AllFonts->setSubstitutions(ReplacedFonts, currDoc);
516
                                //ResourceCollection repl;
517
                                //repl.mapFonts(ReplacedFonts);
518
                                //currDoc->replaceNamedResources(repl);
519
                                return true;
3650 cbradney 520
                        }
521
                        else
522
                        {
523
                                return false;
524
                        }
525
                }
8775 cbradney 526
                /*
5781 cbradney 527
                for (uint d = 0; d < currDoc->MasterItems.count(); ++d)
3650 cbradney 528
                {
5781 cbradney 529
                        replaceFonts(currDoc, currDoc->MasterItems.at(d), currDoc->UsedFonts, ReplacedFonts);
3650 cbradney 530
                }
5781 cbradney 531
                for (uint d = 0; d < currDoc->DocItems.count(); ++d)
3650 cbradney 532
                {
5781 cbradney 533
                        replaceFonts(currDoc, currDoc->DocItems.at(d), currDoc->UsedFonts, ReplacedFonts);
3650 cbradney 534
                }
5781 cbradney 535
                for (uint d = 0; d < currDoc->FrameItems.count(); ++d)
3650 cbradney 536
                {
5781 cbradney 537
                        replaceFonts(currDoc, currDoc->FrameItems.at(d), currDoc->UsedFonts, ReplacedFonts);
3650 cbradney 538
                }
7442 avox 539
                for (uint a = 0; a < currDoc->paragraphStyles().count(); ++a)
3650 cbradney 540
                {
7442 avox 541
                        if ( !currDoc->paragraphStyles()[a].charStyle().font().isNone()
542
                                 && !currDoc->UsedFonts.contains(currDoc->paragraphStyles()[a].charStyle().font().scName()))
5721 avox 543
                        {
7442 avox 544
//                              currDoc->paragraphStyles()[a].charStyle().setFont
545
//                                      ((*currDoc->AllFonts)[ReplacedFonts[currDoc->paragraphStyles()[a].charStyle().font().scName()]]);
5721 avox 546
                        }
3650 cbradney 547
                }
10028 cbradney 548
                QList<QString> tmpList;
3650 cbradney 549
                tmpList.clear();
8545 cbradney 550
                for (int fe = 0; fe < currDoc->PDF_Options.EmbedList.count(); ++fe)
3650 cbradney 551
                {
5781 cbradney 552
                        if (ReplacedFonts.contains(currDoc->PDF_Options.EmbedList[fe]))
553
                                tmpList.append(ReplacedFonts[currDoc->PDF_Options.EmbedList[fe]]);
3650 cbradney 554
                        else
5781 cbradney 555
                                tmpList.append(currDoc->PDF_Options.EmbedList[fe]);
3650 cbradney 556
                }
5781 cbradney 557
                currDoc->PDF_Options.EmbedList = tmpList;
3650 cbradney 558
                tmpList.clear();
8545 cbradney 559
                for (int fe = 0; fe < currDoc->PDF_Options.SubsetList.count(); ++fe)
3650 cbradney 560
                {
5781 cbradney 561
                        if (ReplacedFonts.contains(currDoc->PDF_Options.SubsetList[fe]))
562
                                tmpList.append(ReplacedFonts[currDoc->PDF_Options.SubsetList[fe]]);
3650 cbradney 563
                        else
5781 cbradney 564
                                tmpList.append(currDoc->PDF_Options.SubsetList[fe]);
3650 cbradney 565
                }
5781 cbradney 566
                currDoc->PDF_Options.SubsetList = tmpList;
3650 cbradney 567
                QMap<QString,QString>::Iterator itfsu;
568
                for (itfsu = ReplacedFonts.begin(); itfsu != ReplacedFonts.end(); ++itfsu)
569
                {
5781 cbradney 570
                        if (!currDoc->UsedFonts.contains(itfsu.data()))
3650 cbradney 571
                        {
572
//                              QFont fo = prefsManager->appPrefs.AvailFonts[itfsu.data()]->Font;
4026 craig 573
//                              fo.setPointSize(qRound(ScMW->doc->toolSettings.defSize / 10.0));
5781 cbradney 574
                                currDoc->AddFont(itfsu.data(), qRound(currDoc->toolSettings.defSize / 10.0));
3650 cbradney 575
                        }
576
                }
577
                if (prefsManager->appPrefs.askBeforeSubstituite)
578
                        ReplacedFonts.clear();
5980 avox 579
                dummyScFaces.clear();
8775 cbradney 580
                */
3650 cbradney 581
        }
4546 subik 582
 
3650 cbradney 583
        return true;
584
}
585
 
586
void FileLoader::informReplacementFonts()
587
{
588
        if (ReplacedFonts.count() != 0)
589
        {
9380 fschmid 590
                qApp->changeOverrideCursor(QCursor(Qt::ArrowCursor));
3650 cbradney 591
                QString mess = tr("Some fonts used by this document have been substituted:")+"\n\n";
592
                QMap<QString,QString>::Iterator it;
593
                for (it = ReplacedFonts.begin(); it != ReplacedFonts.end(); ++it)
594
                {
10469 cbradney 595
                        mess += it.key() + tr(" was replaced by: ")+ it.value() +"\n";
3650 cbradney 596
                }
5781 cbradney 597
                QMessageBox::warning(ScCore->primaryMainWindow(), CommonStrings::trWarning, mess, 1, 0, 0);
3650 cbradney 598
        }
599
}
5642 cbradney 600
 
9803 fschmid 601
bool FileLoader::findFormat(uint formatId, QList<FileFormat>::const_iterator &it)
5642 cbradney 602
{
9803 fschmid 603
        QList<FileFormat> fileFormats(LoadSavePlugin::supportedFormats());
5642 cbradney 604
        it=fileFormats.constBegin();
9803 fschmid 605
        QList<FileFormat>::const_iterator itEnd(fileFormats.constEnd());
5642 cbradney 606
        for ( ; it != itEnd ; ++it )
607
        {
5647 cbradney 608
                if (formatId==(*it).formatId)
5642 cbradney 609
                        return true;
610
        }
611
        return false;
612
}