Subversion Repositories Scribus

Rev

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