Subversion Repositories Scribus

Rev

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

Rev Author Line No. Line
5653 cbradney 1
/*
2
For general Scribus (>=1.3.2) copyright and licensing information please refer
3
to the COPYING file provided with the program. Following this notice may exist
4
a copyright and/or license notice that predates the release of Scribus 1.3.2
5
for which a new license (GPL+exception) is in place.
6
*/
7
#include "scribus134format.h"
8
#include "scribus134format.moc"
9
#include "scribus134formatimpl.h"
10
 
11
#include "../../formatidlist.h"
12
#include "commonstrings.h"
13
#include "missing.h"
14
#include "prefsmanager.h"
15
#include "scconfig.h"
16
#include "scribusdoc.h"
17
#include "scribusview.h"
7478 jghali 18
#include "sccolorengine.h"
5653 cbradney 19
 
20
#include "units.h"
21
#include "util.h"
6125 cbradney 22
#include "colorutil.h"
5653 cbradney 23
#ifdef HAVE_LIBZ
24
        #include <zlib.h>
25
#endif
26
#include <qcursor.h>
27
#include <qfileinfo.h>
28
#include <qvaluelist.h>
29
 
30
 
31
// See scplugin.h and pluginmanager.{cpp,h} for detail on what these methods
32
// do. That documentatation is not duplicated here.
33
// Please don't implement the functionality of your plugin here; do that
34
// in scribus134formatimpl.h and scribus134formatimpl.cpp .
35
 
36
Scribus134Format::Scribus134Format() :
37
        LoadSavePlugin()
38
{
39
        // Set action info in languageChange, so we only have to do
40
        // it in one place. This includes registering file formats.
41
        languageChange();
42
}
43
 
44
Scribus134Format::~Scribus134Format()
45
{
46
        unregisterAll();
47
};
48
 
49
void Scribus134Format::languageChange()
50
{
51
        //(Re)register file formats.
52
        unregisterAll();
53
        registerFormats();
54
}
55
 
56
const QString Scribus134Format::fullTrName() const
57
{
58
        return QObject::tr("Scribus 1.3.4 Support");
59
}
60
 
61
const ScActionPlugin::AboutData* Scribus134Format::getAboutData() const
62
{
63
        AboutData* about = new AboutData;
64
        Q_CHECK_PTR(about);
65
        return about;
66
}
67
 
68
void Scribus134Format::deleteAboutData(const AboutData* about) const
69
{
70
        Q_ASSERT(about);
71
        delete about;
72
}
73
 
74
void Scribus134Format::registerFormats()
75
{
76
        FileFormat fmt(this);
77
        fmt.trName = tr("Scribus 1.3.4 Document");
78
        fmt.formatId = FORMATID_SLA134IMPORT;
79
        fmt.load = true;
80
        fmt.save = true;
81
#ifdef HAVE_LIBZ
82
        fmt.filter = fmt.trName + " (*.sla *.SLA *.sla.gz *.SLA.GZ *.scd *.SCD *.scd.gz *.SCD.GZ)";
83
        fmt.nameMatch = QRegExp("\\.(sla|scd)(\\.gz)?", false);
84
#else
85
        fmt.filter = fmt.trName + " (*.sla *.SLA *.scd *.SCD)";
86
        fmt.nameMatch = QRegExp("\\.(sla|scd)", false);
87
#endif
88
        fmt.mimeTypes = QStringList();
89
        fmt.mimeTypes.append("application/x-scribus");
90
        fmt.priority = 64;
91
        registerFormat(fmt);
92
}
93
 
94
bool Scribus134Format::fileSupported(QIODevice* /* file */, const QString & fileName) const
95
{
96
        QCString docBytes("");
97
        if(fileName.right(2) == "gz")
98
        {
99
#ifdef HAVE_LIBZ
100
                static const int gzipExpansionFactor=8;
101
                // The file is gzip encoded and we can load gzip files.
102
                // Set up to read the gzip file
103
                gzFile gzDoc;
104
                int i;
105
                gzDoc = gzopen(fileName.latin1(),"rb");
106
                if(gzDoc == NULL)
107
                {
108
                        // FIXME: Needs better error return
6855 jghali 109
                        return false;
5653 cbradney 110
                }
111
                // Allocate a buffer of a multiple of the compressed size of the file
112
                // as a starting point for loading. We'll expand this buffer by powers
113
                // of two if we run out of space.
114
                const QFileInfo fi(fileName);
115
                uint bufSize = QMIN(4096, fi.size()*gzipExpansionFactor);
116
                docBytes = QCString(bufSize);
117
                char* buf = docBytes.data();
118
                uint bytesRead = 0;
119
                // While there's free space, read into the buffer....
120
                while (bytesRead<4096 && (i = gzread(gzDoc,buf,bufSize-bytesRead-1)) > 0)
121
                {
122
                        // Ensure the string is null-terminated and move the
123
                        // write pointer to the current position.
124
                        buf[i]=0;
125
                        buf+=i;
126
                        bytesRead += i;
127
                        // And check that there's free space to work with, expanding the
128
                        // buffer if there's not.
129
                        if (bufSize - bytesRead < 4096)
130
                        {
131
                                bufSize *= 2;
132
                                docBytes.resize(bufSize);
133
                                buf = docBytes.data() + bytesRead;
134
                        }
135
                }
136
                gzclose(gzDoc);
137
#else
138
                // The file is gzip encoded but we can't load gzip files.
139
                // Leave `f' empty, since we have no way to
140
                // report a failure condition from here.
141
                return false;
142
#endif
143
        }
144
        else
145
        {
146
                // Not gzip encoded, just load it
147
                loadRawText(fileName, docBytes);
148
        }
7046 avox 149
//      if (docBytes.left(16) == "<SCRIBUSUTF8NEW " && docBytes.left(35).contains("Version=\"1.3.4"))
150
//              return true;
151
        int startElemPos = docBytes.left(512).find("<SCRIBUSUTF8NEW ");
152
        return startElemPos >= 0 && docBytes.mid(startElemPos, 64).find("Version=\"1.3.4") >= 0;
5653 cbradney 153
}
154
 
155
QString Scribus134Format::readSLA(const QString & fileName)
156
{
157
        QCString docBytes("");
158
        if(fileName.right(2) == "gz")
159
        {
160
#ifdef HAVE_LIBZ
161
                static const int gzipExpansionFactor=8;
162
                // The file is gzip encoded and we can load gzip files.
163
                // Set up to read the gzip file
164
                gzFile gzDoc;
165
                int i;
166
                gzDoc = gzopen(fileName.latin1(),"rb");
167
                if(gzDoc == NULL)
168
                {
169
                        // FIXME: Needs better error return
170
                        return "";
171
                }
172
                // Allocate a buffer of a multiple of the compressed size of the file
173
                // as a starting point for loading. We'll expand this buffer by powers
174
                // of two if we run out of space.
175
                const QFileInfo fi(fileName);
176
                uint bufSize = fi.size()*gzipExpansionFactor;
177
                docBytes = QCString(bufSize);
178
                char* buf = docBytes.data();
179
                uint bytesRead = 0;
180
                // While there's free space, read into the buffer....
181
                while ((i = gzread(gzDoc,buf,bufSize-bytesRead-1)) > 0)
182
                {
183
                        // Ensure the string is null-terminated and move the
184
                        // write pointer to the current position.
185
                        buf[i]=0;
186
                        buf+=i;
187
                        bytesRead += i;
188
                        // And check that there's free space to work with, expanding the
189
                        // buffer if there's not.
190
                        if (bufSize - bytesRead < 4096)
191
                        {
192
                                bufSize *= 2;
193
                                docBytes.resize(bufSize);
194
                                buf = docBytes.data() + bytesRead;
195
                        }
196
                }
197
                gzclose(gzDoc);
198
#else
199
                // The file is gzip encoded but we can't load gzip files.
200
                // Leave `f' empty, since we have no way to
201
                // report a failure condition from here.
202
                return false;
203
#endif
204
        }
205
        else
206
        {
207
                // Not gzip encoded, just load it
208
                loadRawText(fileName, docBytes);
209
        }
210
        QString docText("");
7046 avox 211
        int startElemPos = docBytes.left(512).find("<SCRIBUSUTF8NEW ");
212
        if (startElemPos >= 0 && docBytes.mid(startElemPos, 64).find("Version=\"1.3.4") >= 0)
5653 cbradney 213
                docText = QString::fromUtf8(docBytes);
214
        else
215
                return QString::null;
216
        if (docText.endsWith(QChar(10)) || docText.endsWith(QChar(13)))
217
                docText.truncate(docText.length()-1);
218
        return docText;
219
}
220
 
5980 avox 221
void Scribus134Format::getReplacedFontData(bool & getNewReplacement, QMap<QString,QString> &getReplacedFonts, QValueList<ScFace> &getDummyScFaces)
5653 cbradney 222
{
223
        getNewReplacement=newReplacement;
224
        getReplacedFonts=ReplacedFonts;
6733 avox 225
//      getDummyScFaces=dummyScFaces;
5653 cbradney 226
}
227
 
228
bool Scribus134Format::loadFile(const QString & fileName, const FileFormat & /* fmt */, int /* flags */, int /* index */)
229
{
230
        if (m_Doc==0 || m_AvailableFonts==0)
231
        {
232
                Q_ASSERT(m_Doc==0 || m_AvailableFonts==0);
233
                return false;
234
        }
235
        ReplacedFonts.clear();
236
        newReplacement = false;
5980 avox 237
        dummyScFaces.clear();
5653 cbradney 238
        ParagraphStyle vg;
239
        struct Layer la;
240
        struct ScribusDoc::BookMa bok;
241
        int counter;//, Pgc;
242
        //bool AtFl;
243
        bool newVersion = false;
244
        QString tmp, tmpf, tmp2, tmp3, tmp4, PgNam, Defont, tmf;
245
        QFont fo;
246
        QMap<int,int> TableID;
247
        QPtrList<PageItem> TableItems;
7450 fschmid 248
        QMap<int,int> TableIDM;
249
        QPtrList<PageItem> TableItemsM;
250
        QMap<int,int> TableIDF;
251
        QPtrList<PageItem> TableItemsF;
6451 fschmid 252
        QMap<PageItem*, int> groupID;
7444 fschmid 253
        QMap<PageItem*, int> groupIDM;
7450 fschmid 254
        QMap<PageItem*, int> groupIDF;
5653 cbradney 255
        int a;
256
        PageItem *Neu;
257
        Page* Apage;
258
        LFrames.clear();
259
        QDomDocument docu("scridoc");
260
        QString f(readSLA(fileName));
261
        if (f.isEmpty())
262
                return false;
263
        /* 2004/10/02 - petr vanek - bug #1092 - missing <PAGE> crash Scribus. The check constraint moved into IsScribus()
264
        FIXME: I've add test on containig tag PAGE but returning false freezes S. in scribus.cpp need some hack too...  */
265
        if (!docu.setContent(f))
266
                return false;
267
        m_Doc->PageColors.clear();
268
        m_Doc->Layers.clear();
269
        int layerToSetActive=0;
270
        ScColor lf = ScColor();
271
        QDomElement elem=docu.documentElement();
272
        if (elem.tagName() != "SCRIBUSUTF8NEW")
273
                return false;
274
        if (elem.hasAttribute("Version"))
275
                newVersion = true;
276
        QDomNode DOC=elem.firstChild();
277
        if (m_mwProgressBar!=0)
278
        {
279
                m_mwProgressBar->setTotalSteps(DOC.childNodes().count());
280
                m_mwProgressBar->setProgress(0);
281
        }
282
        int ObCount = 0;
283
        TableItems.clear();
284
        TableID.clear();
7450 fschmid 285
        TableItemsM.clear();
286
        TableIDM.clear();
287
        TableItemsF.clear();
288
        TableIDF.clear();
5653 cbradney 289
        PrefsManager* prefsManager=PrefsManager::instance();
290
        while(!DOC.isNull())
291
        {
292
                QDomElement dc=DOC.toElement();
293
        /*
294
        * Attribute von DOCUMENT auslesen
295
        */
296
                //CB Add this in to set this in the file in memory. Its saved, why not load it.
297
                //Will of course be replaced by per page settings although we still probably need a document default
5789 cbradney 298
                m_Doc->m_pageSize = dc.attribute("PAGESIZE");
5653 cbradney 299
                m_Doc->PageOri = dc.attribute("ORIENTATION", "0").toInt();
300
                m_Doc->FirstPnum = dc.attribute("FIRSTNUM", "1").toInt();
301
                m_Doc->currentPageLayout=dc.attribute("BOOK", "0").toInt();
302
                int fp;
303
                if (m_Doc->currentPageLayout == 0)
304
                        fp = 0;
305
                else
306
                {
307
                        if (dc.attribute("FIRSTLEFT", "0").toInt() == 1)
308
                                fp = 0;
309
                        else
310
                                fp = 1;
311
                }
312
                if (DOC.namedItem("PageSets").isNull())
313
                {
314
                        m_Doc->pageSets[m_Doc->currentPageLayout].FirstPage = fp;
315
                        m_Doc->pageSets[m_Doc->currentPageLayout].GapHorizontal = dc.attribute("GapHorizontal", "0").toDouble();
316
                        m_Doc->pageSets[m_Doc->currentPageLayout].GapVertical = 0.0;
317
                        m_Doc->pageSets[m_Doc->currentPageLayout].GapBelow = dc.attribute("GapVertical", "40").toDouble();
318
                }
319
                m_Doc->setUsesAutomaticTextFrames(dc.attribute("AUTOTEXT").toInt());
320
                m_Doc->PageSp=dc.attribute("AUTOSPALTEN").toInt();
321
                m_Doc->PageSpa=dc.attribute("ABSTSPALTEN").toDouble();
322
                m_Doc->setUnitIndex(dc.attribute("UNITS", "0").toInt());
323
                m_Doc->toolSettings.defSize=qRound(dc.attribute("DSIZE").toDouble() * 10);
324
                Defont=dc.attribute("DFONT");
5980 avox 325
                if ((!m_AvailableFonts->contains(Defont)) || (!(*m_AvailableFonts)[Defont].usable()))
5653 cbradney 326
                {
327
                        ReplacedFonts.insert(Defont, prefsManager->appPrefs.toolSettings.defFont);
328
                        Defont = prefsManager->appPrefs.toolSettings.defFont;
329
                }
330
                else
331
                {
332
//                      QFont fo = avail[Defont]->Font;
333
//                      fo.setPointSize(qRound(m_Doc->toolSettings.defSize / 10.0));
334
                        m_Doc->AddFont(Defont, qRound(m_Doc->toolSettings.defSize / 10.0));
335
                }
336
                m_Doc->toolSettings.defFont = Defont;
337
                m_Doc->toolSettings.dCols=dc.attribute("DCOL", "1").toInt();
338
                m_Doc->toolSettings.dGap=dc.attribute("DGAP", "0.0").toDouble();
339
                m_Doc->documentInfo.setAuthor(dc.attribute("AUTHOR"));
340
                m_Doc->documentInfo.setComments(dc.attribute("COMMENTS"));
341
                m_Doc->documentInfo.setKeywords(dc.attribute("KEYWORDS",""));
342
                m_Doc->documentInfo.setTitle(dc.attribute("TITLE"));
343
                m_Doc->documentInfo.setPublisher(dc.attribute("PUBLISHER", ""));
344
                m_Doc->documentInfo.setDate(dc.attribute("DOCDATE", ""));
345
                m_Doc->documentInfo.setType(dc.attribute("DOCTYPE", ""));
346
                m_Doc->documentInfo.setFormat(dc.attribute("DOCFORMAT", ""));
347
                m_Doc->documentInfo.setIdent(dc.attribute("DOCIDENT", ""));
348
                m_Doc->documentInfo.setSource(dc.attribute("DOCSOURCE", ""));
349
                m_Doc->documentInfo.setLangInfo(dc.attribute("DOCLANGINFO", ""));
350
                m_Doc->documentInfo.setRelation(dc.attribute("DOCRELATION", ""));
351
                m_Doc->documentInfo.setCover(dc.attribute("DOCCOVER", ""));
352
                m_Doc->documentInfo.setRights(dc.attribute("DOCRIGHTS", ""));
353
                m_Doc->documentInfo.setContrib(dc.attribute("DOCCONTRIB", ""));
354
                m_Doc->typographicSettings.valueSuperScript = dc.attribute("VHOCH").toInt();
355
                m_Doc->typographicSettings.scalingSuperScript = dc.attribute("VHOCHSC").toInt();
356
                m_Doc->typographicSettings.valueSubScript = dc.attribute("VTIEF").toInt();
357
                m_Doc->typographicSettings.scalingSubScript = dc.attribute("VTIEFSC").toInt();
358
                m_Doc->typographicSettings.valueSmallCaps = dc.attribute("VKAPIT").toInt();
359
                m_Doc->typographicSettings.valueBaseGrid = dc.attribute("BASEGRID", "12").toDouble();
360
                m_Doc->typographicSettings.offsetBaseGrid = dc.attribute("BASEO", "0").toDouble();
361
                m_Doc->typographicSettings.autoLineSpacing = dc.attribute("AUTOL", "20").toInt();
362
                m_Doc->typographicSettings.valueUnderlinePos = dc.attribute("UnderlinePos", "-1").toInt();
363
                m_Doc->typographicSettings.valueUnderlineWidth = dc.attribute("UnderlineWidth", "-1").toInt();
364
                m_Doc->typographicSettings.valueStrikeThruPos = dc.attribute("StrikeThruPos", "-1").toInt();
365
                m_Doc->typographicSettings.valueStrikeThruWidth = dc.attribute("StrikeThruWidth", "-1").toInt();
366
                m_Doc->GroupCounter=dc.attribute("GROUPC", "1").toInt();
5880 jghali 367
                //m_Doc->HasCMS = static_cast<bool>(dc.attribute("HCMS", "0").toInt());
5653 cbradney 368
                m_Doc->CMSSettings.SoftProofOn = static_cast<bool>(dc.attribute("DPSo", "0").toInt());
369
                m_Doc->CMSSettings.SoftProofFullOn = static_cast<bool>(dc.attribute("DPSFo", "0").toInt());
370
                m_Doc->CMSSettings.CMSinUse = static_cast<bool>(dc.attribute("DPuse", "0").toInt());
371
                m_Doc->CMSSettings.GamutCheck = static_cast<bool>(dc.attribute("DPgam", "0").toInt());
372
                m_Doc->CMSSettings.BlackPoint = static_cast<bool>(dc.attribute("DPbla", "1").toInt());
373
                m_Doc->CMSSettings.DefaultMonitorProfile = dc.attribute("DPMo","");
374
                m_Doc->CMSSettings.DefaultPrinterProfile = dc.attribute("DPPr","");
375
                m_Doc->CMSSettings.DefaultImageRGBProfile = dc.attribute("DPIn","");
376
                m_Doc->CMSSettings.DefaultImageCMYKProfile = dc.attribute("DPInCMYK","");
377
                m_Doc->CMSSettings.DefaultSolidColorRGBProfile = dc.attribute("DPIn2","");
378
                if (dc.hasAttribute("DPIn3"))
379
                        m_Doc->CMSSettings.DefaultSolidColorCMYKProfile = dc.attribute("DPIn3","");
380
                else
381
                        m_Doc->CMSSettings.DefaultSolidColorCMYKProfile = dc.attribute("DPPr","");
382
                //m_Doc->CMSSettings.DefaultIntentPrinter = dc.attribute("DIPr", "0").toInt();
383
                //m_Doc->CMSSettings.DefaultIntentMonitor = dc.attribute("DIMo", "1").toInt();
384
                m_Doc->CMSSettings.DefaultIntentColors = dc.attribute("DISc", "1").toInt();
385
                m_Doc->CMSSettings.DefaultIntentImages = dc.attribute("DIIm", "0").toInt();
386
                layerToSetActive=dc.attribute("ALAYER", "0").toInt();
387
                m_Doc->Language = dc.attribute("LANGUAGE", "");
388
                m_Doc->MinWordLen = dc.attribute("MINWORDLEN", "3").toInt();
389
                m_Doc->HyCount = dc.attribute("HYCOUNT", "2").toInt();
390
                if (dc.hasAttribute("PAGEWIDTH"))
391
                        m_Doc->pageWidth=dc.attribute("PAGEWIDTH").toDouble();
392
                else
393
                        m_Doc->pageWidth=dc.attribute("PAGEWITH").toDouble();
394
                m_Doc->pageHeight=dc.attribute("PAGEHEIGHT").toDouble();
395
                m_Doc->pageMargins.Left=QMAX(0.0, dc.attribute("BORDERLEFT").toDouble());
396
                m_Doc->pageMargins.Right=QMAX(0.0, dc.attribute("BORDERRIGHT").toDouble());
397
                m_Doc->pageMargins.Top=QMAX(0.0, dc.attribute("BORDERTOP").toDouble());
398
                m_Doc->pageMargins.Bottom=QMAX(0.0, dc.attribute("BORDERBOTTOM").toDouble());
7225 cbradney 399
                m_Doc->bleeds.Top = dc.attribute("BleedTop", "0").toDouble();
400
                m_Doc->bleeds.Left = dc.attribute("BleedLeft", "0").toDouble();
401
                m_Doc->bleeds.Right = dc.attribute("BleedRight", "0").toDouble();
402
                m_Doc->bleeds.Bottom = dc.attribute("BleedBottom", "0").toDouble();
5653 cbradney 403
                m_Doc->Automatic = static_cast<bool>(dc.attribute("AUTOMATIC", "1").toInt());
404
                m_Doc->AutoCheck = static_cast<bool>(dc.attribute("AUTOCHECK", "0").toInt());
405
                m_Doc->GuideLock = static_cast<bool>(dc.attribute("GUIDELOCK", "0").toInt());
406
                m_Doc->guidesSettings.minorGrid = dc.attribute("MINGRID", tmp.setNum(prefsManager->appPrefs.guidesSettings.minorGrid)).toDouble();
407
                m_Doc->guidesSettings.majorGrid = dc.attribute("MAJGRID", tmp.setNum(prefsManager->appPrefs.guidesSettings.majorGrid)).toDouble();
408
                m_Doc->guidesSettings.gridShown = static_cast<bool>(dc.attribute("SHOWGRID", "0").toInt());
409
                m_Doc->guidesSettings.guidesShown = static_cast<bool>(dc.attribute("SHOWGUIDES", "1").toInt());
410
                m_Doc->guidesSettings.colBordersShown = static_cast<bool>(dc.attribute("showcolborders", "0").toInt());
411
                m_Doc->guidesSettings.framesShown = static_cast<bool>(dc.attribute("SHOWFRAME", "1").toInt());
412
                m_Doc->guidesSettings.layerMarkersShown = static_cast<bool>(dc.attribute("SHOWLAYERM", "0").toInt());
413
                m_Doc->guidesSettings.marginsShown = static_cast<bool>(dc.attribute("SHOWMARGIN", "1").toInt());
414
                m_Doc->guidesSettings.baseShown = static_cast<bool>(dc.attribute("SHOWBASE", "0").toInt());
415
                m_Doc->guidesSettings.showPic = static_cast<bool>(dc.attribute("SHOWPICT", "1").toInt());
416
                m_Doc->guidesSettings.linkShown = static_cast<bool>(dc.attribute("SHOWLINK", "0").toInt());
417
                m_Doc->guidesSettings.showControls = static_cast<bool>(dc.attribute("SHOWControl", "0").toInt());
418
                m_Doc->guidesSettings.rulerMode = static_cast<bool>(dc.attribute("rulerMode", "1").toInt());
419
                m_Doc->guidesSettings.rulersShown = static_cast<bool>(dc.attribute("showrulers", "1").toInt());
7051 fschmid 420
                m_Doc->guidesSettings.showBleed = static_cast<bool>(dc.attribute("showBleed", "1").toInt());
5653 cbradney 421
                m_Doc->rulerXoffset = dc.attribute("rulerXoffset", "0").toDouble();
422
                m_Doc->rulerYoffset =dc.attribute("rulerYoffset", "0").toDouble();
423
                m_Doc->SnapGuides = static_cast<bool>(dc.attribute("SnapToGuides", "0").toInt());
424
                m_Doc->useRaster = static_cast<bool>(dc.attribute("SnapToGrid", "0").toInt());
425
                m_Doc->toolSettings.polyC = dc.attribute("POLYC", "4").toInt();
426
                m_Doc->toolSettings.polyF = dc.attribute("POLYF", "0.5").toDouble();
427
                m_Doc->toolSettings.polyR = dc.attribute("POLYR", "0").toDouble();
428
                m_Doc->toolSettings.polyFd = dc.attribute("POLYFD", "0").toInt();
429
                m_Doc->toolSettings.polyS = static_cast<bool>(dc.attribute("POLYS", "0").toInt());
430
                m_Doc->AutoSave = static_cast<bool>(dc.attribute("AutoSave", "0").toInt());
431
                m_Doc->AutoSaveTime = dc.attribute("AutoSaveTime", "600000").toInt();
432
                m_Doc->ScratchBottom = dc.attribute("ScratchBottom", "20").toDouble();
433
                // FIXME A typo in early 1.3cvs (MAR 05) means we must support loading of
434
                // FIXME 'ScatchLeft' for a while too. This can be removed in a few months.
435
                if (dc.hasAttribute("ScatchLeft"))
436
                        m_Doc->ScratchLeft = dc.attribute("ScatchLeft", "100").toDouble();
437
                else
438
                        m_Doc->ScratchLeft = dc.attribute("ScratchLeft", "100").toDouble();
439
                m_Doc->ScratchRight = dc.attribute("ScratchRight", "100").toDouble();
440
                m_Doc->ScratchTop = dc.attribute("ScratchTop", "20").toDouble();
441
                m_Doc->toolSettings.dStartArrow = dc.attribute("StartArrow", "0").toInt();
442
                m_Doc->toolSettings.dEndArrow = dc.attribute("EndArrow", "0").toInt();
443
                m_Doc->toolSettings.scaleX = dc.attribute("PICTSCX", "1").toDouble();
444
                m_Doc->toolSettings.scaleY = dc.attribute("PICTSCY", "1").toDouble();
445
                m_Doc->toolSettings.scaleType = static_cast<bool>(dc.attribute("PSCALE", "1").toInt());
446
                m_Doc->toolSettings.aspectRatio = static_cast<bool>(dc.attribute("PASPECT", "0").toInt());
447
                m_Doc->toolSettings.lowResType = dc.attribute("HalfRes", "1").toInt();
448
                m_Doc->toolSettings.useEmbeddedPath = static_cast<bool>(dc.attribute("EmbeddedPath", "0").toInt());
449
                if (dc.hasAttribute("PEN"))
450
                        m_Doc->toolSettings.dPen = dc.attribute("PEN");
451
                if (dc.hasAttribute("BRUSH"))
452
                        m_Doc->toolSettings.dBrush = dc.attribute("BRUSH");
453
                if (dc.hasAttribute("PENLINE"))
454
                        m_Doc->toolSettings.dPenLine = dc.attribute("PENLINE");
455
                if (dc.hasAttribute("PENTEXT"))
456
                        m_Doc->toolSettings.dPenText = dc.attribute("PENTEXT");
457
                if (dc.hasAttribute("StrokeText"))
458
                        m_Doc->toolSettings.dStrokeText = dc.attribute("StrokeText");
459
                m_Doc->toolSettings.dTextBackGround = dc.attribute("TextBackGround", CommonStrings::None);
460
                m_Doc->toolSettings.dTextLineColor = dc.attribute("TextLineColor", CommonStrings::None);
461
                m_Doc->toolSettings.dTextBackGroundShade = dc.attribute("TextBackGroundShade", "100").toInt();
462
                m_Doc->toolSettings.dTextLineShade = dc.attribute("TextLineShade", "100").toInt();
463
                m_Doc->toolSettings.dTextPenShade = dc.attribute("TextPenShade", "100").toInt();
464
                m_Doc->toolSettings.dTextStrokeShade = dc.attribute("TextStrokeShade", "100").toInt();
465
                m_Doc->toolSettings.dLineArt = static_cast<Qt::PenStyle>(dc.attribute("STIL").toInt());
466
                m_Doc->toolSettings.dLstyleLine = static_cast<Qt::PenStyle>(dc.attribute("STILLINE").toInt());
467
                m_Doc->toolSettings.dWidth = dc.attribute("WIDTH", "1").toDouble();
468
                m_Doc->toolSettings.dWidthLine = dc.attribute("WIDTHLINE", "1").toDouble();
469
                m_Doc->toolSettings.dShade2 = dc.attribute("PENSHADE", "100").toInt();
470
                m_Doc->toolSettings.dShadeLine = dc.attribute("LINESHADE", "100").toInt();
471
                m_Doc->toolSettings.dShade = dc.attribute("BRUSHSHADE", "100").toInt();
472
                m_Doc->toolSettings.magMin = dc.attribute("MAGMIN", "10").toInt();
473
                m_Doc->toolSettings.magMax = dc.attribute("MAGMAX", "3200").toInt();
474
                m_Doc->toolSettings.magStep = dc.attribute("MAGSTEP", "200").toInt();
6606 fschmid 475
                m_Doc->toolSettings.dispX = dc.attribute("dispX", "10").toDouble();
476
                m_Doc->toolSettings.dispY = dc.attribute("dispY", "10").toDouble();
6618 fschmid 477
                m_Doc->toolSettings.constrain = dc.attribute("constrain", "15").toDouble();
5653 cbradney 478
                //CB Reset doc zoom step value to 200% instead of old values.
479
                if (m_Doc->toolSettings.magStep<100)
480
                        m_Doc->toolSettings.magStep=200;
481
                m_Doc->toolSettings.tabFillChar = dc.attribute("TabFill","");
482
                m_Doc->toolSettings.dTabWidth=dc.attribute("TabWidth", "36.0").toDouble();
483
                if (dc.hasAttribute("CPICT"))
484
                        m_Doc->toolSettings.dBrushPict = dc.attribute("CPICT");
485
                m_Doc->toolSettings.shadePict = dc.attribute("PICTSHADE", "100").toInt();
486
                if (dc.hasAttribute("PAGEC"))
487
                        m_Doc->papColor = QColor(dc.attribute("PAGEC"));
488
                if (dc.hasAttribute("MARGC"))
489
                        m_Doc->guidesSettings.margColor = QColor(dc.attribute("MARGC"));
490
                if (dc.hasAttribute("MINORC"))
491
                        m_Doc->guidesSettings.minorColor = QColor(dc.attribute("MINORC"));
492
                if (dc.hasAttribute("MAJORC"))
493
                        m_Doc->guidesSettings.majorColor = QColor(dc.attribute("MAJORC"));
494
                if (dc.hasAttribute("GuideC"))
495
                        m_Doc->guidesSettings.guideColor = QColor(dc.attribute("GuideC"));
496
                if (dc.hasAttribute("BaseC"))
497
                        m_Doc->guidesSettings.baseColor = QColor(dc.attribute("BaseC"));
498
                m_Doc->marginColored = static_cast<bool>(dc.attribute("RANDF", "0").toInt());
499
                m_Doc->guidesSettings.before = static_cast<bool>(dc.attribute("BACKG", "1").toInt());
500
                m_Doc->guidesSettings.guideRad = dc.attribute("GuideRad", "10").toDouble();
501
                m_Doc->guidesSettings.grabRad = dc.attribute("GRAB", "4").toInt();
502
                if (dc.hasAttribute("currentProfile"))
503
                {
504
                        m_Doc->checkerProfiles.clear();
505
                        m_Doc->curCheckProfile = dc.attribute("currentProfile");
506
                }
507
                m_Doc->LastAuto = 0;
508
                QDomNode PAGE=DOC.firstChild();
509
                counter = 0;
510
                while(!PAGE.isNull())
511
                {
512
                        ObCount++;
513
                        if (m_mwProgressBar!=0)
514
                                m_mwProgressBar->setProgress(ObCount);
515
                        QDomElement pg=PAGE.toElement();
516
                        if (pg.tagName()=="PageSets")
517
                        {
518
                                QDomNode PGS = PAGE.firstChild();
519
                                m_Doc->pageSets.clear();
520
                                while(!PGS.isNull())
521
                                {
522
                                        QDomElement PgsAttr = PGS.toElement();
523
                                        if(PgsAttr.tagName() == "Set")
524
                                        {
525
                                                struct PageSet pageS;
526
                                                pageS.Name = CommonStrings::untranslatePageSetString(PgsAttr.attribute("Name"));
527
                                                pageS.FirstPage = PgsAttr.attribute("FirstPage", "0").toInt();
528
                                                pageS.Rows = PgsAttr.attribute("Rows", "1").toInt();
529
                                                pageS.Columns = PgsAttr.attribute("Columns", "1").toInt();
530
                                                pageS.GapHorizontal = PgsAttr.attribute("GapHorizontal", "0").toDouble();
531
                                                pageS.GapVertical = PgsAttr.attribute("GapVertical", "0").toDouble();
532
                                                pageS.GapBelow = PgsAttr.attribute("GapBelow", "0").toDouble();
533
                                                pageS.pageNames.clear();
534
                                                QDomNode PGSN = PGS.firstChild();
535
                                                while(!PGSN.isNull())
536
                                                {
537
                                                        QDomElement PgsAttrN = PGSN.toElement();
538
                                                        if(PgsAttrN.tagName() == "PageNames")
539
                                                                pageS.pageNames.append(CommonStrings::untranslatePageSetLocString(PgsAttrN.attribute("Name")));
540
                                                        PGSN = PGSN.nextSibling();
541
                                                }
542
                                                m_Doc->pageSets.append(pageS);
543
                                        }
544
                                        PGS = PGS.nextSibling();
545
                                }
546
                        }
547
                        if (pg.tagName()=="CheckProfile")
548
                        {
549
                                struct checkerPrefs checkerSettings;
550
                                checkerSettings.ignoreErrors = static_cast<bool>(pg.attribute("ignoreErrors", "0").toInt());
551
                                checkerSettings.autoCheck = static_cast<bool>(pg.attribute("autoCheck", "1").toInt());
552
                                checkerSettings.checkGlyphs = static_cast<bool>(pg.attribute("checkGlyphs", "1").toInt());
553
                                checkerSettings.checkOrphans = static_cast<bool>(pg.attribute("checkOrphans", "1").toInt());
554
                                checkerSettings.checkOverflow = static_cast<bool>(pg.attribute("checkOverflow", "1").toInt());
555
                                checkerSettings.checkPictures = static_cast<bool>(pg.attribute("checkPictures", "1").toInt());
556
                                checkerSettings.checkResolution = static_cast<bool>(pg.attribute("checkResolution", "1").toInt());
557
                                checkerSettings.checkTransparency = static_cast<bool>(pg.attribute("checkTransparency", "1").toInt());
558
                                checkerSettings.minResolution = pg.attribute("minResolution", "72").toDouble();
559
                                checkerSettings.maxResolution = pg.attribute("maxResolution", "4800").toDouble();
560
                                checkerSettings.checkAnnotations = static_cast<bool>(pg.attribute("checkAnnotations", "0").toInt());
561
                                checkerSettings.checkRasterPDF = static_cast<bool>(pg.attribute("checkRasterPDF", "1").toInt());
562
                                checkerSettings.checkForGIF = static_cast<bool>(pg.attribute("checkForGIF", "1").toInt());
6619 fschmid 563
                                checkerSettings.ignoreOffLayers = static_cast<bool>(pg.attribute("ignoreOffLayers", "0").toInt());
5653 cbradney 564
                                m_Doc->checkerProfiles[pg.attribute("Name")] = checkerSettings;
565
                        }
566
                        // 10/25/2004 pv - None is "reserved" color. cannot be defined in any file...
567
                        if(pg.tagName()=="COLOR" && pg.attribute("NAME")!=CommonStrings::None)
568
                        {
569
                                if (pg.hasAttribute("CMYK"))
570
                                        lf.setNamedColor(pg.attribute("CMYK"));
571
                                else
572
                                        lf.fromQColor(QColor(pg.attribute("RGB")));
573
                                if (pg.hasAttribute("Spot"))
574
                                        lf.setSpotColor(static_cast<bool>(pg.attribute("Spot").toInt()));
575
                                else
576
                                        lf.setSpotColor(false);
577
                                if (pg.hasAttribute("Register"))
578
                                        lf.setRegistrationColor(static_cast<bool>(pg.attribute("Register").toInt()));
579
                                else
580
                                        lf.setRegistrationColor(false);
7478 jghali 581
                                m_Doc->PageColors.insert(pg.attribute("NAME"), lf);
5653 cbradney 582
                        }
583
                        if(pg.tagName()=="STYLE")
584
                        {
585
                                readParagraphStyle(vg, pg, *m_AvailableFonts, m_Doc);
7442 avox 586
                                StyleSet<ParagraphStyle>tmp;
587
                                tmp.create(vg);
588
                                m_Doc->redefineStyles(tmp, false);
5653 cbradney 589
                        }
7000 avox 590
                        if(pg.tagName()=="CHARSTYLE")
591
                        {
592
                                readParagraphStyle(vg, pg, *m_AvailableFonts, m_Doc);
7442 avox 593
                                StyleSet<CharStyle> temp;
594
                                temp.create(vg.charStyle());
595
                                m_Doc->redefineCharStyles(temp, false);
7000 avox 596
                        }
5653 cbradney 597
                        if(pg.tagName()=="JAVA")
598
                                m_Doc->JavaScripts[pg.attribute("NAME")] = pg.attribute("SCRIPT");
599
                        if(pg.tagName()=="LAYERS")
600
                        {
601
                                la.LNr = pg.attribute("NUMMER").toInt();
602
                                la.Level = pg.attribute("LEVEL").toInt();
603
                                la.Name = pg.attribute("NAME");
604
                                la.isViewable = pg.attribute("SICHTBAR").toInt();
605
                                la.isPrintable = pg.attribute("DRUCKEN").toInt();
606
                                la.isEditable = pg.attribute("EDIT", "1").toInt();
607
                                la.flowControl = pg.attribute("FLOW", "1").toInt();
608
                                la.transparency = pg.attribute("TRANS", "1").toDouble();
609
                                la.blendMode = pg.attribute("BLEND", "0").toInt();
610
                                la.outlineMode = pg.attribute("OUTL", "0").toInt();
611
                                if (pg.hasAttribute("LAYERC"))
612
                                        la.markerColor =  QColor(pg.attribute("LAYERC","#000000"));
613
                                else
614
                                {
615
                                        QColor marker;
616
                                        switch (la.LNr % 7)
617
                                        {
618
                                                case 0:
619
                                                        marker = Qt::black;
620
                                                        break;
621
                                                case 1:
622
                                                        marker = Qt::red;
623
                                                        break;
624
                                                case 2:
625
                                                        marker = Qt::green;
626
                                                        break;
627
                                                case 3:
628
                                                        marker = Qt::blue;
629
                                                        break;
630
                                                case 4:
631
                                                        marker = Qt::cyan;
632
                                                        break;
633
                                                case 5:
634
                                                        marker = Qt::magenta;
635
                                                        break;
636
                                                case 6:
637
                                                        marker = Qt::yellow;;
638
                                                        break;
639
                                        }
640
                                        la.markerColor = marker;
641
                                }
642
                                m_Doc->Layers.append(la);
643
                        }
644
/*                      if(pg.tagName()=="Bookmark")
645
                        {
646
                                bok.Title = pg.attribute("Title");
647
                                bok.Text = pg.attribute("Text");
648
                                bok.Aktion = pg.attribute("Aktion");
649
                                bok.ItemNr = pg.attribute("ItemNr").toInt();
650
                                bok.Seite = pg.attribute("Seite").toInt();
651
                                bok.Element = pg.attribute("Element").toInt();
652
                                bok.First = pg.attribute("First").toInt();
653
                                bok.Last = pg.attribute("Last").toInt();
654
                                bok.Prev = pg.attribute("Prev").toInt();
655
                                bok.Next = pg.attribute("Next").toInt();
656
                                bok.Parent = pg.attribute("Parent").toInt();
657
                                m_Doc->BookMarks.append(bok);
658
                        } */
659
                        if(pg.tagName()=="MultiLine")
660
                        {
661
                                multiLine ml;
662
                                QDomNode MuLn = PAGE.firstChild();
663
                                while(!MuLn.isNull())
664
                                {
665
                                        QDomElement MuL = MuLn.toElement();
666
                                        struct SingleLine sl;
667
                                        sl.Color = MuL.attribute("Color");
668
                                        sl.Dash = MuL.attribute("Dash").toInt();
669
                                        sl.LineEnd = MuL.attribute("LineEnd").toInt();
670
                                        sl.LineJoin = MuL.attribute("LineJoin").toInt();
671
                                        sl.Shade = MuL.attribute("Shade").toInt();
672
                                        sl.Width = MuL.attribute("Width").toDouble();
673
                                        ml.push_back(sl);
674
                                        MuLn = MuLn.nextSibling();
675
                                }
676
                                m_Doc->MLineStyles.insert(pg.attribute("Name"), ml);
677
                        }
678
                        if(pg.tagName()=="Arrows")
679
                        {
680
                                struct ArrowDesc arrow;
681
                                arrow.name = pg.attribute("Name");
682
                                arrow.userArrow = true;
683
                                double xa, ya;
684
                                QString tmp = pg.attribute("Points");
685
                                QTextStream fp(&tmp, IO_ReadOnly);
686
                                for (uint cx = 0; cx < pg.attribute("NumPoints").toUInt(); ++cx)
687
                                {
688
                                        fp >> xa;
689
                                        fp >> ya;
690
                                        arrow.points.addPoint(xa, ya);
691
                                }
692
                                m_Doc->arrowStyles.append(arrow);
693
                        }
7104 fschmid 694
                        if(pg.tagName()=="Printer")
695
                        {
696
                                m_Doc->Print_Options.firstUse = static_cast<bool>(pg.attribute("firstUse").toInt());
697
                                m_Doc->Print_Options.toFile = static_cast<bool>(pg.attribute("toFile").toInt());
698
                                m_Doc->Print_Options.useAltPrintCommand = static_cast<bool>(pg.attribute("useAltPrintCommand").toInt());
699
                                m_Doc->Print_Options.outputSeparations = static_cast<bool>(pg.attribute("outputSeparations").toInt());
700
                                m_Doc->Print_Options.useSpotColors = static_cast<bool>(pg.attribute("useSpotColors").toInt());
701
                                m_Doc->Print_Options.useColor = static_cast<bool>(pg.attribute("useColor").toInt());
702
                                m_Doc->Print_Options.mirrorH = static_cast<bool>(pg.attribute("mirrorH").toInt());
703
                                m_Doc->Print_Options.mirrorV = static_cast<bool>(pg.attribute("mirrorV").toInt());
704
                                m_Doc->Print_Options.useICC = static_cast<bool>(pg.attribute("useICC").toInt());
705
                                m_Doc->Print_Options.doGCR = static_cast<bool>(pg.attribute("doGCR").toInt());
706
                                m_Doc->Print_Options.doClip = static_cast<bool>(pg.attribute("doClip").toInt());
707
                                m_Doc->Print_Options.setDevParam = static_cast<bool>(pg.attribute("setDevParam").toInt());
708
                                m_Doc->Print_Options.doOverprint = static_cast<bool>(pg.attribute("doOverprint").toInt());
709
                                m_Doc->Print_Options.cropMarks = static_cast<bool>(pg.attribute("cropMarks").toInt());
710
                                m_Doc->Print_Options.bleedMarks = static_cast<bool>(pg.attribute("bleedMarks").toInt());
711
                                m_Doc->Print_Options.registrationMarks = static_cast<bool>(pg.attribute("registrationMarks").toInt());
712
                                m_Doc->Print_Options.colorMarks = static_cast<bool>(pg.attribute("colorMarks").toInt());
713
                                m_Doc->Print_Options.PSLevel = pg.attribute("PSLevel").toInt();
714
                                m_Doc->Print_Options.markOffset = pg.attribute("markOffset").toDouble();
7225 cbradney 715
                                m_Doc->Print_Options.bleeds.Top = pg.attribute("BleedTop").toDouble();
716
                                m_Doc->Print_Options.bleeds.Left = pg.attribute("BleedLeft").toDouble();
717
                                m_Doc->Print_Options.bleeds.Right = pg.attribute("BleedRight").toDouble();
718
                                m_Doc->Print_Options.bleeds.Bottom = pg.attribute("BleedBottom").toDouble();
7104 fschmid 719
                                m_Doc->Print_Options.printer = pg.attribute("printer");
720
                                m_Doc->Print_Options.filename = pg.attribute("filename");
721
                                m_Doc->Print_Options.separationName = pg.attribute("separationName");
722
                                m_Doc->Print_Options.printerCommand = pg.attribute("printerCommand");
723
                                m_Doc->Print_Options.copies = 1;
724
                                QDomNode PFO = PAGE.firstChild();
725
                                while(!PFO.isNull())
726
                                {
727
                                        QDomElement pdfF = PFO.toElement();
728
                                        if(pdfF.tagName() == "Separation")
729
                                                m_Doc->Print_Options.allSeparations.append(pdfF.attribute("Name"));
730
                                        PFO = PFO.nextSibling();
731
                                }
732
                        }
5653 cbradney 733
                        if(pg.tagName()=="PDF")
734
                        {
735
                                m_Doc->PDF_Options.Articles = static_cast<bool>(pg.attribute("Articles").toInt());
736
                                m_Doc->PDF_Options.Thumbnails = static_cast<bool>(pg.attribute("Thumbnails").toInt());
737
                                m_Doc->PDF_Options.Compress = static_cast<bool>(pg.attribute("Compress").toInt());
738
                                m_Doc->PDF_Options.CompressMethod = pg.attribute("CMethod", "0").toInt();
739
                                m_Doc->PDF_Options.Quality = pg.attribute("Quality", "0").toInt();
740
                                m_Doc->PDF_Options.RecalcPic = static_cast<bool>(pg.attribute("RecalcPic").toInt());
741
                                m_Doc->PDF_Options.Bookmarks = static_cast<bool>(pg.attribute("Bookmarks").toInt());
6493 fschmid 742
                                if (pg.hasAttribute("firstUse"))
743
                                        m_Doc->PDF_Options.firstUse = static_cast<bool>(pg.attribute("firstUse").toInt());
744
                                else
745
                                        m_Doc->PDF_Options.firstUse = true;
5653 cbradney 746
                                if (pg.hasAttribute("MirrorH"))
747
                                        m_Doc->PDF_Options.MirrorH = static_cast<bool>(pg.attribute("MirrorH").toInt());
748
                                else
749
                                        m_Doc->PDF_Options.MirrorH = false;
750
                                if (pg.hasAttribute("MirrorV"))
751
                                        m_Doc->PDF_Options.MirrorV = static_cast<bool>(pg.attribute("MirrorV").toInt());
752
                                else
753
                                        m_Doc->PDF_Options.MirrorV = false;
754
                                if (pg.hasAttribute("RotateDeg"))
755
                                        m_Doc->PDF_Options.RotateDeg = pg.attribute("RotateDeg", "0").toInt();
756
                                else
757
                                        m_Doc->PDF_Options.RotateDeg = 0;
758
                                if (pg.hasAttribute("Clip"))
759
                                        m_Doc->PDF_Options.doClip = static_cast<bool>(pg.attribute("Clip").toInt());
760
                                else
761
                                        m_Doc->PDF_Options.doClip = false;
762
                                m_Doc->PDF_Options.PresentMode = static_cast<bool>(pg.attribute("PresentMode").toInt());
763
                                m_Doc->PDF_Options.PicRes = pg.attribute("PicRes").toInt();
764
                                // Fixme: check input pdf version
765
                                m_Doc->PDF_Options.Version = (PDFOptions::PDFVersion)pg.attribute("Version").toInt();
766
                                m_Doc->PDF_Options.Resolution = pg.attribute("Resolution").toInt();
767
                                m_Doc->PDF_Options.Binding = pg.attribute("Binding").toInt();
768
                                m_Doc->PDF_Options.Datei = "";
769
                                m_Doc->PDF_Options.isGrayscale = static_cast<bool>(pg.attribute("Grayscale", "0").toInt());
770
                                m_Doc->PDF_Options.UseRGB = static_cast<bool>(pg.attribute("RGBMode", "0").toInt());
771
                                m_Doc->PDF_Options.UseProfiles = static_cast<bool>(pg.attribute("UseProfiles", "0").toInt());
772
                                m_Doc->PDF_Options.UseProfiles2 = static_cast<bool>(pg.attribute("UseProfiles2", "0").toInt());
773
                                m_Doc->PDF_Options.Intent = pg.attribute("Intent", "1").toInt();
774
                                m_Doc->PDF_Options.Intent2 = pg.attribute("Intent2", "1").toInt();
775
                                m_Doc->PDF_Options.SolidProf = pg.attribute("SolidP", "");
776
                                m_Doc->PDF_Options.ImageProf = pg.attribute("ImageP", "");
777
                                m_Doc->PDF_Options.PrintProf = pg.attribute("PrintP", "");
778
                                m_Doc->PDF_Options.Info = pg.attribute("InfoString", "");
7225 cbradney 779
                                m_Doc->PDF_Options.bleeds.Top = pg.attribute("BTop", "0").toDouble();
780
                                m_Doc->PDF_Options.bleeds.Left = pg.attribute("BLeft", "0").toDouble();
781
                                m_Doc->PDF_Options.bleeds.Right = pg.attribute("BRight", "0").toDouble();
782
                                m_Doc->PDF_Options.bleeds.Bottom = pg.attribute("BBottom", "0").toDouble();
7076 fschmid 783
                                m_Doc->PDF_Options.useDocBleeds = static_cast<bool>(pg.attribute("useDocBleeds", "0").toInt());
6921 fschmid 784
                                m_Doc->PDF_Options.cropMarks = static_cast<bool>(pg.attribute("cropMarks", "0").toInt());
785
                                m_Doc->PDF_Options.bleedMarks = static_cast<bool>(pg.attribute("bleedMarks", "0").toInt());
786
                                m_Doc->PDF_Options.registrationMarks = static_cast<bool>(pg.attribute("registrationMarks", "0").toInt());
787
                                m_Doc->PDF_Options.colorMarks = static_cast<bool>(pg.attribute("colorMarks", "0").toInt());
788
                                m_Doc->PDF_Options.docInfoMarks = static_cast<bool>(pg.attribute("docInfoMarks", "0").toInt());
789
                                m_Doc->PDF_Options.markOffset = pg.attribute("markOffset", "0").toDouble();
5653 cbradney 790
                                m_Doc->PDF_Options.EmbeddedI = static_cast<bool>(pg.attribute("ImagePr", "0").toInt());
791
                                m_Doc->PDF_Options.PassOwner = pg.attribute("PassOwner", "");
792
                                m_Doc->PDF_Options.PassUser = pg.attribute("PassUser", "");
793
                                m_Doc->PDF_Options.Permissions = pg.attribute("Permissions", "-4").toInt();
794
                                m_Doc->PDF_Options.Encrypt = static_cast<bool>(pg.attribute("Encrypt", "0").toInt());
795
                                m_Doc->PDF_Options.useLayers = static_cast<bool>(pg.attribute("UseLayers", "0").toInt());
796
                                m_Doc->PDF_Options.UseLPI = static_cast<bool>(pg.attribute("UseLpi", "0").toInt());
797
                                m_Doc->PDF_Options.UseSpotColors = static_cast<bool>(pg.attribute("UseSpotColors", "1").toInt());
798
                                m_Doc->PDF_Options.doOverprint = static_cast<bool>(pg.attribute("doOverprint", "0").toInt());
799
                                m_Doc->PDF_Options.doMultiFile = static_cast<bool>(pg.attribute("doMultiFile", "0").toInt());
800
                                m_Doc->PDF_Options.displayBookmarks = static_cast<bool>(pg.attribute("displayBookmarks", "0").toInt());
801
                                m_Doc->PDF_Options.displayFullscreen = static_cast<bool>(pg.attribute("displayFullscreen", "0").toInt());
802
                                m_Doc->PDF_Options.displayLayers = static_cast<bool>(pg.attribute("displayLayers", "0").toInt());
803
                                m_Doc->PDF_Options.displayThumbs = static_cast<bool>(pg.attribute("displayThumbs", "0").toInt());
804
                                m_Doc->PDF_Options.hideMenuBar = static_cast<bool>(pg.attribute("hideMenuBar", "0").toInt());
805
                                m_Doc->PDF_Options.hideToolBar = static_cast<bool>(pg.attribute("hideToolBar", "0").toInt());
806
                                m_Doc->PDF_Options.fitWindow = static_cast<bool>(pg.attribute("fitWindow", "0").toInt());
807
                                m_Doc->PDF_Options.PageLayout = pg.attribute("PageLayout", "0").toInt();
808
                                m_Doc->PDF_Options.openAction = pg.attribute("openAction", "");
809
                                QDomNode PFO = PAGE.firstChild();
810
                                while(!PFO.isNull())
811
                                {
812
                                        QDomElement pdfF = PFO.toElement();
813
                                        if(pdfF.tagName() == "LPI")
814
                                        {
815
                                                struct LPIData lpo;
816
                                                lpo.Angle = pdfF.attribute("Angle").toInt();
817
                                                lpo.Frequency = pdfF.attribute("Frequency").toInt();
818
                                                lpo.SpotFunc = pdfF.attribute("SpotFunction").toInt();
819
                                                m_Doc->PDF_Options.LPISettings[pdfF.attribute("Color")] = lpo;
820
                                        }
821
                                        if(pdfF.tagName() == "Fonts")
822
                                        {
823
                                                if (!m_Doc->PDF_Options.EmbedList.contains(pdfF.attribute("Name")))
824
                                                        m_Doc->PDF_Options.EmbedList.append(pdfF.attribute("Name"));
825
                                        }
826
                                        if(pdfF.tagName() == "Subset")
827
                                        {
828
                                                if (!m_Doc->PDF_Options.SubsetList.contains(pdfF.attribute("Name")))
829
                                                        m_Doc->PDF_Options.SubsetList.append(pdfF.attribute("Name"));
830
                                        }
831
                                        if(pdfF.tagName() == "Effekte")
832
                                        {
833
                                                struct PDFPresentationData ef;
834
                                                ef.pageEffectDuration = pdfF.attribute("pageEffectDuration").toInt();
835
                                                ef.pageViewDuration = pdfF.attribute("pageViewDuration").toInt();
836
                                                ef.effectType = pdfF.attribute("effectType").toInt();
837
                                                ef.Dm = pdfF.attribute("Dm").toInt();
838
                                                ef.M = pdfF.attribute("M").toInt();
839
                                                ef.Di = pdfF.attribute("Di").toInt();
840
                                                m_Doc->PDF_Options.PresentVals.append(ef);
841
                                        }
842
                                        PFO = PFO.nextSibling();
843
                                }
844
                        }
845
                        if(pg.tagName()=="DocItemAttributes")
846
                        {
847
                                QDomNode DIA = PAGE.firstChild();
848
                                m_Doc->docItemAttributes.clear();
849
                                while(!DIA.isNull())
850
                                {
851
                                        QDomElement itemAttr = DIA.toElement();
852
                                        if(itemAttr.tagName() == "ItemAttribute")
853
                                        {
854
                                                ObjectAttribute objattr;
855
                                                objattr.name=itemAttr.attribute("Name");
856
                                                objattr.type=itemAttr.attribute("Type");
857
                                                objattr.value=itemAttr.attribute("Value");
858
                                                objattr.parameter=itemAttr.attribute("Parameter");
859
                                                objattr.relationship=itemAttr.attribute("Relationship");
860
                                                objattr.relationshipto=itemAttr.attribute("RelationshipTo");
861
                                                objattr.autoaddto=itemAttr.attribute("AutoAddTo");
862
                                                m_Doc->docItemAttributes.append(objattr);
863
                                        }
864
                                        DIA = DIA.nextSibling();
865
                                }
866
                        }
867
                        if(pg.tagName()=="TablesOfContents")
868
                        {
869
                                QDomNode TOC = PAGE.firstChild();
870
                                m_Doc->docToCSetups.clear();
871
                                while(!TOC.isNull())
872
                                {
873
                                        QDomElement tocElem = TOC.toElement();
874
                                        if(tocElem.tagName() == "TableOfContents")
875
                                        {
876
                                                ToCSetup tocsetup;
877
                                                tocsetup.name=tocElem.attribute("Name");
878
                                                tocsetup.itemAttrName=tocElem.attribute("ItemAttributeName");
879
                                                tocsetup.frameName=tocElem.attribute("FrameName");
880
                                                tocsetup.listNonPrintingFrames=tocElem.attribute("ListNonPrinting");
881
                                                tocsetup.textStyle=tocElem.attribute("Style");
882
                                                QString numberPlacement=tocElem.attribute("NumberPlacement");
883
                                                if (numberPlacement=="Beginning")
884
                                                        tocsetup.pageLocation=Beginning;
885
                                                if (numberPlacement=="End")
886
                                                        tocsetup.pageLocation=End;
887
                                                if (numberPlacement=="NotShown")
888
                                                        tocsetup.pageLocation=NotShown;
889
                                                m_Doc->docToCSetups.append(tocsetup);
890
                                        }
891
                                        TOC = TOC.nextSibling();
892
                                }
893
                        }
894
                        if(pg.tagName()=="Sections")
895
                        {
896
                                QDomNode Section = PAGE.firstChild();
897
                                while(!Section.isNull())
898
                                {
899
                                        QDomElement sectionElem = Section.toElement();
900
                                        if(sectionElem.tagName() == "Section")
901
                                        {
902
                                                struct DocumentSection newSection;
903
                                                newSection.number=sectionElem.attribute("Number").toInt();
904
                                                newSection.name=sectionElem.attribute("Name");
905
                                                newSection.fromindex=sectionElem.attribute("From").toInt();
906
                                                newSection.toindex=sectionElem.attribute("To").toInt();
907
                                                if (sectionElem.attribute("Type")=="Type_1_2_3")
908
                                                        newSection.type=Type_1_2_3;
909
                                                if (sectionElem.attribute("Type")=="Type_i_ii_iii")
910
                                                        newSection.type=Type_i_ii_iii;
911
                                                if (sectionElem.attribute("Type")=="Type_I_II_III")
912
                                                        newSection.type=Type_I_II_III;
913
                                                if (sectionElem.attribute("Type")=="Type_a_b_c")
914
                                                        newSection.type=Type_a_b_c;
915
                                                if (sectionElem.attribute("Type")=="Type_A_B_C")
916
                                                        newSection.type=Type_A_B_C;
917
                                                newSection.sectionstartindex=sectionElem.attribute("Start").toInt();
918
                                                newSection.reversed=static_cast<bool>(sectionElem.attribute("Reversed").toInt());
919
                                                newSection.active=static_cast<bool>(sectionElem.attribute("Active").toInt());
920
                                                m_Doc->sections.insert(newSection.number, newSection);
921
                                        }
922
                                        Section = Section.nextSibling();
923
                                }
924
                        }
925
                        if ((pg.tagName()=="PAGE") || (pg.tagName()=="MASTERPAGE"))
926
                        {
927
                                a = pg.attribute("NUM").toInt();
928
                                PgNam = "";
929
                                PgNam = pg.attribute("NAM", "");
930
                                //Pgc = m_Doc->pageCount;
931
                                //AtFl = m_Doc->usesAutomaticTextFrames();
932
                                if (PgNam.isEmpty())
933
                                {
934
                                        //m_Doc->pageCount = Pgc;
935
                                        //m_Doc->Pages = &m_Doc->DocPages;
936
                                        //m_Doc->setUsesAutomaticTextFrames(AtFl);
937
                                        m_Doc->setMasterPageMode(false);
938
                                }
939
                                else
940
                                {
941
                                        //m_Doc->pageCount = 0;
942
                                        //m_Doc->setUsesAutomaticTextFrames(false);
943
                                        //m_Doc->Pages = &m_Doc->MasterPages;
944
                                        m_Doc->setMasterPageMode(true);
945
                                }
946
                                //CB: Stop calling damn GUI code in loading docs! IT doesnt *look* like
947
                                //this makes a difference apart from being faster, of course.
948
                                //ScMW->slotNewPage(a);
949
                                //Apage = m_Doc->Pages.at(a);
950
                                if (PgNam.isEmpty())
951
                                {
952
                                        Apage = m_Doc->addPage(a);
953
                                        //m_Doc->DocPages = m_Doc->Pages;
954
                                        //++m_Doc->pageCount;
955
                                }
956
                                else
957
                                {
958
                                        Apage = m_Doc->addMasterPage(a, PgNam);
959
                                        //Apage->setPageName(PgNam);
960
                                        //m_Doc->MasterNames[PgNam] = a;
961
                                        //m_Doc->MasterPages = m_Doc->Pages;
962
                                        //m_Doc->pageCount = Pgc;
963
                                }
964
                                //m_Doc->setUsesAutomaticTextFrames(AtFl);
965
                                Apage->LeftPg=pg.attribute("LEFT", "0").toInt();
966
                                QString Mus = "";
967
                                Mus = pg.attribute("MNAM","Normal");
968
                                if (!m_Doc->masterPageMode())
969
                                        Apage->MPageNam = Mus;
970
                                else
971
                                        Apage->MPageNam = "";
972
                                if (pg.hasAttribute("Size"))
5789 cbradney 973
                                        Apage->m_pageSize = pg.attribute("Size");
5653 cbradney 974
                                if (pg.hasAttribute("Orientation"))
975
                                        Apage->PageOri = pg.attribute("Orientation").toInt();
976
                                Apage->setXOffset(pg.attribute("PAGEXPOS").toDouble());
977
                                Apage->setYOffset(pg.attribute("PAGEYPOS").toDouble());
978
                                if (pg.hasAttribute("PAGEWIDTH"))
979
                                        Apage->setWidth(pg.attribute("PAGEWIDTH").toDouble());
980
                                else
981
                                        Apage->setWidth(pg.attribute("PAGEWITH").toDouble());
982
                                Apage->setHeight(pg.attribute("PAGEHEIGHT").toDouble());
983
                                Apage->setInitialHeight(Apage->height());
984
                                Apage->setInitialWidth(Apage->width());
985
                                Apage->initialMargins.Top = QMAX(0.0, pg.attribute("BORDERTOP").toDouble());
986
                                Apage->initialMargins.Bottom = QMAX(0.0, pg.attribute("BORDERBOTTOM").toDouble());
987
                                Apage->initialMargins.Left = QMAX(0.0, pg.attribute("BORDERLEFT").toDouble());
988
                                Apage->initialMargins.Right = QMAX(0.0, pg.attribute("BORDERRIGHT").toDouble());
989
                                Apage->Margins.Top = Apage->initialMargins.Top;
990
                                Apage->Margins.Bottom = Apage->initialMargins.Bottom;
991
                                m_Doc->setMasterPageMode(false);
992
                                //m_Doc->Pages=&m_Doc->DocPages;
993
                                // guides reading
994
                                tmp = "";
6027 subik 995
                                Apage->guides.setHorizontalAutoGap(pg.attribute("AGhorizontalAutoGap", "0.0").toDouble());
996
                                Apage->guides.setVerticalAutoGap(pg.attribute("AGverticalAutoGap", "0.0").toDouble());
997
                                Apage->guides.setHorizontalAutoCount(pg.attribute("AGhorizontalAutoCount", "0").toInt());
998
                                Apage->guides.setVerticalAutoCount(pg.attribute("AGverticalAutoCount", "0").toInt());
6747 subik 999
                                Apage->guides.setHorizontalAutoRefer(pg.attribute("AGhorizontalAutoRefer", "0").toInt());
1000
                                Apage->guides.setVerticalAutoRefer(pg.attribute("AGverticalAutoRefer", "0").toInt());
7682 subik 1001
                                GuideManagerIO::readVerticalGuides(pg.attribute("VerticalGuides"),
5653 cbradney 1002
                                                Apage,
1003
                                                GuideManagerCore::Standard,
1004
                                                pg.hasAttribute("NumVGuides"));
7682 subik 1005
                                GuideManagerIO::readHorizontalGuides(pg.attribute("HorizontalGuides"),
5653 cbradney 1006
                                                Apage,
1007
                                                GuideManagerCore::Standard,
1008
                                                pg.hasAttribute("NumHGuides"));
7715 subik 1009
                                GuideManagerIO::readSelection(pg.attribute("AGSelection"), Apage);
1010
 
5653 cbradney 1011
                        }
1012
                        if ((pg.tagName()=="PAGEOBJECT") || (pg.tagName()=="MASTEROBJECT") || (pg.tagName()=="FRAMEOBJECT"))
1013
                        {
1014
                                        if ((pg.tagName()=="PAGEOBJECT") || (pg.tagName()=="FRAMEOBJECT"))
1015
                                        {
1016
                                                //m_Doc->Items = m_Doc->DocItems;
1017
                                                //m_Doc->Pages = &m_Doc->DocPages;
1018
                                                m_Doc->setMasterPageMode(false);
1019
                                        }
1020
                                        else
1021
                                        {
1022
                                                //m_Doc->Items = m_Doc->MasterItems;
1023
                                                //m_Doc->Pages = &m_Doc->MasterPages;
1024
                                                m_Doc->setMasterPageMode(true);
1025
                                        }
1026
                                        if ((!pg.attribute("OnMasterPage").isEmpty()) && (pg.tagName()=="MASTEROBJECT"))
1027
                                                m_Doc->setCurrentPage(m_Doc->MasterPages.at(m_Doc->MasterNames[pg.attribute("OnMasterPage")]));
1028
                                        if ((pg.attribute("NEXTITEM").toInt() != -1) || (static_cast<bool>(pg.attribute("AUTOTEXT").toInt())))
1029
                                        {
1030
                                                if (pg.attribute("BACKITEM").toInt() == -1)
1031
                                                        LFrames.append(m_Doc->Items->count());
1032
                                        }
1033
                                        int docGc = m_Doc->GroupCounter;
1034
                                        m_Doc->GroupCounter = 0;
1035
                                        Neu = PasteItem(&pg, m_Doc);
1036
                                        Neu->setRedrawBounding();
1037
                                        if (pg.tagName()=="MASTEROBJECT")
1038
                                                Neu->OwnPage = m_Doc->OnPage(Neu);
1039
                                        else
1040
                                                Neu->OwnPage = pg.attribute("OwnPage").toInt();
1041
                                        if (pg.tagName()=="PAGEOBJECT")
1042
                                                Neu->OnMasterPage = "";
1043
                                        m_Doc->GroupCounter = docGc;
1044
                                        tmpf = pg.attribute("IFONT", m_Doc->toolSettings.defFont);
5980 avox 1045
                                        if ((!m_AvailableFonts->contains(tmpf)) || (!(*m_AvailableFonts)[tmpf].usable()))
5653 cbradney 1046
                                        {
5980 avox 1047
                                                if ((!prefsManager->appPrefs.GFontSub.contains(tmpf)) || (!(*m_AvailableFonts)[prefsManager->appPrefs.GFontSub[tmpf]].usable()))
5653 cbradney 1048
                                                {
1049
                                                        newReplacement = true;
1050
                                                        ReplacedFonts.insert(tmpf, prefsManager->appPrefs.toolSettings.defFont);
1051
                                                }
1052
                                                else
1053
                                                        ReplacedFonts.insert(tmpf, prefsManager->appPrefs.GFontSub[tmpf]);
1054
                                        }
1055
                                        else
1056
                                        {
1057
                                                if (!m_Doc->UsedFonts.contains(tmpf))
1058
                                                {
1059
//                                                      QFont fo = avail[tmpf]->Font;
1060
//                                                      fo.setPointSize(qRound(m_Doc->toolSettings.defSize / 10.0));
1061
                                                        m_Doc->AddFont(tmpf, qRound(m_Doc->toolSettings.defSize / 10.0));
1062
                                                }
1063
                                        }
1064
                                        QDomNode IT=pg.firstChild();
1065
                                        LastStyles * last = new LastStyles();
1066
                                        while(!IT.isNull())
1067
                                        {
1068
                                                QDomElement it=IT.toElement();
1069
                                                if (it.tagName()=="CSTOP")
1070
                                                {
1071
                                                        QString name = it.attribute("NAME");
1072
                                                        double ramp = it.attribute("RAMP", "0.0").toDouble();
1073
                                                        int shade = it.attribute("SHADE", "100").toInt();
1074
                                                        double opa = it.attribute("TRANS", "1").toDouble();
1075
                                                        Neu->fill_gradient.addStop(SetColor(m_Doc, name, shade), ramp, 0.5, opa, name, shade);
1076
                                                }
1077
                                                if (it.tagName()=="ITEXT")
1078
                                                        GetItemText(&it, m_Doc, Neu, last);
6864 avox 1079
                                                else if (it.tagName()=="para") {
1080
                                                        Neu->itemText.insertChars(Neu->itemText.length(), SpecialChars::PARSEP);
1081
                                                        ParagraphStyle newStyle;
1082
                                                        PrefsManager* prefsManager=PrefsManager::instance();
1083
                                                        readParagraphStyle(newStyle, pg, prefsManager->appPrefs.AvailFonts, m_Doc);
1084
                                                        Neu->itemText.applyStyle(Neu->itemText.length(), newStyle);
1085
                                                }
1086
                                                else if (it.tagName()=="tab") {
1087
                                                        Neu->itemText.insertChars(Neu->itemText.length(), SpecialChars::TAB);
1088
                                                }
1089
                                                else if (it.tagName()=="breakline") {
1090
                                                        Neu->itemText.insertChars(Neu->itemText.length(), SpecialChars::LINEBREAK);
1091
                                                }
1092
                                                else if (it.tagName()=="breakcol") {
1093
                                                        Neu->itemText.insertChars(Neu->itemText.length(), SpecialChars::COLBREAK);
1094
                                                }
1095
                                                else if (it.tagName()=="breakframe") {
1096
                                                        Neu->itemText.insertChars(Neu->itemText.length(), SpecialChars::FRAMEBREAK);
1097
                                                }
1098
                                                else if (it.tagName()=="var" && it.attribute("name")=="pgno")
1099
                                                {
1100
                                                        Neu->itemText.insertChars(Neu->itemText.length(), SpecialChars::PAGENUMBER);
1101
                                                }
5653 cbradney 1102
 
1103
                                                //CB PageItemAttributes
1104
                                                if(it.tagName()=="PageItemAttributes")
1105
                                                {
1106
                                                        QDomNode PIA = it.firstChild();
1107
                                                        ObjAttrVector pageItemAttributes;
1108
                                                        while(!PIA.isNull())
1109
                                                        {
1110
                                                                QDomElement itemAttr = PIA.toElement();
1111
                                                                if(itemAttr.tagName() == "ItemAttribute")
1112
                                                                {
1113
                                                                        ObjectAttribute objattr;
1114
                                                                        objattr.name=itemAttr.attribute("Name");
1115
                                                                        objattr.type=itemAttr.attribute("Type");
1116
                                                                        objattr.value=itemAttr.attribute("Value");
1117
                                                                        objattr.parameter=itemAttr.attribute("Parameter");
1118
                                                                        objattr.relationship=itemAttr.attribute("Relationship");
1119
                                                                        objattr.relationshipto=itemAttr.attribute("RelationshipTo");
1120
                                                                        objattr.autoaddto=itemAttr.attribute("AutoAddTo");
1121
                                                                        pageItemAttributes.append(objattr);
1122
                                                                }
1123
                                                                PIA = PIA.nextSibling();
1124
                                                        }
1125
                                                        Neu->setObjectAttributes(&pageItemAttributes);
1126
                                                }
1127
                                                IT=IT.nextSibling();
1128
                                        }
1129
                                        delete last;
1130
                                        if (Neu->fill_gradient.Stops() == 0)
1131
                                        {
7478 jghali 1132
                                                const ScColor& col1 = m_Doc->PageColors[m_Doc->toolSettings.dBrush];
1133
                                                const ScColor& col2 = m_Doc->PageColors[m_Doc->toolSettings.dPen];
1134
                                                Neu->fill_gradient.addStop(ScColorEngine::getRGBColor(col1, m_Doc), 0.0, 0.5, 1.0, m_Doc->toolSettings.dBrush, 100);
1135
                                                Neu->fill_gradient.addStop(ScColorEngine::getRGBColor(col2, m_Doc), 1.0, 0.5, 1.0, m_Doc->toolSettings.dPen, 100);
5653 cbradney 1136
                                        }
1137
//                                      Neu->Language = ScMW->GetLang(pg.attribute("LANGUAGE", m_Doc->Language));
1138
                                        Neu->isAutoText = static_cast<bool>(pg.attribute("AUTOTEXT").toInt());
1139
                                        Neu->isEmbedded = static_cast<bool>(pg.attribute("isInline", "0").toInt());
1140
                                        Neu->gXpos = pg.attribute("gXpos", "0.0").toDouble();
1141
                                        Neu->gYpos = pg.attribute("gYpos", "0.0").toDouble();
1142
                                        QString defaultVal;
1143
                                        defaultVal.setNum(Neu->width());
1144
                                        Neu->gWidth = pg.attribute("gWidth",defaultVal).toDouble();
1145
                                        defaultVal.setNum(Neu->height());
1146
                                        Neu->gHeight = pg.attribute("gHeight",defaultVal).toDouble();
6733 avox 1147
/*                                      if (Neu->lineSpacingMode() == 3)
5653 cbradney 1148
                                        {
1149
                                                m_Doc->docParagraphStyles[0].setUseBaselineGrid(true);
1150
                                                Neu->setLineSpacing(m_Doc->typographicSettings.valueBaseGrid-1);
1151
                                        }
6733 avox 1152
*/
1153
                                        if (Neu->isAutoText)
5653 cbradney 1154
                                                m_Doc->LastAuto = Neu;
1155
                                        Neu->NextIt = pg.attribute("NEXTITEM").toInt();
7450 fschmid 1156
                                        if (pg.tagName()=="FRAMEOBJECT")
1157
                                        {
1158
                                                m_Doc->FrameItems.append(m_Doc->Items->take(Neu->ItemNr));
1159
                                                Neu->ItemNr = m_Doc->FrameItems.count()-1;
1160
                                        }
5653 cbradney 1161
                                        if (Neu->isTableItem)
1162
                                        {
7450 fschmid 1163
                                                if (pg.tagName()=="PAGEOBJECT")
1164
                                                {
1165
                                                        TableItems.append(Neu);
1166
                                                        TableID.insert(pg.attribute("OwnLINK", "0").toInt(), Neu->ItemNr);
1167
                                                }
1168
                                                else if (pg.tagName()=="FRAMEOBJECT")
1169
                                                {
1170
                                                        TableItemsF.append(Neu);
1171
                                                        TableIDF.insert(pg.attribute("OwnLINK", "0").toInt(), Neu->ItemNr);
1172
                                                }
1173
                                                else
1174
                                                {
1175
                                                        TableItemsM.append(Neu);
1176
                                                        TableIDM.insert(pg.attribute("OwnLINK", "0").toInt(), Neu->ItemNr);
1177
                                                }
5653 cbradney 1178
                                        }
6451 fschmid 1179
                                        Neu->isGroupControl = static_cast<bool>(pg.attribute("isGroupControl", "0").toInt());
1180
                                        if (Neu->isGroupControl)
7444 fschmid 1181
                                        {
7450 fschmid 1182
                                                if (pg.tagName()=="PAGEOBJECT")
7444 fschmid 1183
                                                        groupID.insert(Neu, pg.attribute("groupsLastItem", "0").toInt()+Neu->ItemNr);
7450 fschmid 1184
                                                else if (pg.tagName()=="FRAMEOBJECT")
1185
                                                        groupIDF.insert(Neu, pg.attribute("groupsLastItem", "0").toInt()+Neu->ItemNr);
7444 fschmid 1186
                                                else
1187
                                                        groupIDM.insert(Neu, pg.attribute("groupsLastItem", "0").toInt()+Neu->ItemNr);
1188
                                        }
5653 cbradney 1189
                                        m_Doc->setMasterPageMode(false);
1190
                                        counter++;
1191
                                }
1192
                        PAGE=PAGE.nextSibling();
1193
                }
1194
                PAGE=DOC.firstChild();
1195
                while(!PAGE.isNull())
1196
                {
1197
                        QDomElement pg=PAGE.toElement();
1198
                        if(pg.tagName()=="Bookmark")
1199
                        {
6573 fschmid 1200
                                uint elem = pg.attribute("Element").toInt();
1201
                                if (elem < m_Doc->Items->count())
1202
                                {
1203
                                        bok.Title = pg.attribute("Title");
1204
                                        bok.Text = pg.attribute("Text");
1205
                                        bok.Aktion = pg.attribute("Aktion");
1206
                                        bok.ItemNr = pg.attribute("ItemNr").toInt();
1207
                                        bok.PageObject = m_Doc->Items->at(elem);
1208
                                        bok.First = pg.attribute("First").toInt();
1209
                                        bok.Last = pg.attribute("Last").toInt();
1210
                                        bok.Prev = pg.attribute("Prev").toInt();
1211
                                        bok.Next = pg.attribute("Next").toInt();
1212
                                        bok.Parent = pg.attribute("Parent").toInt();
1213
                                        m_Doc->BookMarks.append(bok);
1214
                                }
5653 cbradney 1215
                        }
6380 fschmid 1216
                        if(pg.tagName()=="Pattern")
1217
                        {
6846 fschmid 1218
                                QMap<PageItem*, int> groupID2;
7450 fschmid 1219
                                QMap<int,int> TableID2;
1220
                                QPtrList<PageItem> TableItems2;
6380 fschmid 1221
                                ScPattern pat;
1222
                                QDomNode pa = PAGE.firstChild();
1223
                                uint ac = m_Doc->Items->count();
6381 fschmid 1224
                                bool savedAlignGrid = m_Doc->useRaster;
1225
                                bool savedAlignGuides = m_Doc->SnapGuides;
1226
                                m_Doc->useRaster = false;
1227
                                m_Doc->SnapGuides = false;
6380 fschmid 1228
                                while(!pa.isNull())
1229
                                {
1230
                                        QDomElement pite = pa.toElement();
1231
                                        m_Doc->setMasterPageMode(false);
1232
                                        if ((pite.attribute("NEXTITEM").toInt() != -1) || (static_cast<bool>(pite.attribute("AUTOTEXT").toInt())))
1233
                                        {
1234
                                                if (pite.attribute("BACKITEM").toInt() == -1)
1235
                                                        LFrames.append(m_Doc->Items->count());
1236
                                        }
1237
                                        int docGc = m_Doc->GroupCounter;
1238
                                        m_Doc->GroupCounter = 0;
1239
                                        Neu = PasteItem(&pite, m_Doc);
1240
                                        Neu->setRedrawBounding();
1241
                                        Neu->OwnPage = pite.attribute("OwnPage").toInt();
1242
                                        Neu->OnMasterPage = "";
1243
                                        m_Doc->GroupCounter = docGc;
1244
                                        tmpf = pite.attribute("IFONT", m_Doc->toolSettings.defFont);
1245
                                        if ((!m_AvailableFonts->contains(tmpf)) || (!(*m_AvailableFonts)[tmpf].usable()))
1246
                                        {
1247
                                                if ((!prefsManager->appPrefs.GFontSub.contains(tmpf)) || (!(*m_AvailableFonts)[prefsManager->appPrefs.GFontSub[tmpf]].usable()))
1248
                                                {
1249
                                                        newReplacement = true;
1250
                                                        ReplacedFonts.insert(tmpf, prefsManager->appPrefs.toolSettings.defFont);
1251
                                                }
1252
                                                else
1253
                                                        ReplacedFonts.insert(tmpf, prefsManager->appPrefs.GFontSub[tmpf]);
1254
                                        }
1255
                                        else
1256
                                        {
1257
                                                if (!m_Doc->UsedFonts.contains(tmpf))
1258
                                                        m_Doc->AddFont(tmpf, qRound(m_Doc->toolSettings.defSize / 10.0));
1259
                                        }
1260
                                        QDomNode IT=pite.firstChild();
1261
                                        LastStyles * last = new LastStyles();
1262
                                        while(!IT.isNull())
1263
                                        {
1264
                                                QDomElement it=IT.toElement();
1265
                                                if (it.tagName()=="CSTOP")
1266
                                                {
1267
                                                        QString name = it.attribute("NAME");
1268
                                                        double ramp = it.attribute("RAMP", "0.0").toDouble();
1269
                                                        int shade = it.attribute("SHADE", "100").toInt();
1270
                                                        double opa = it.attribute("TRANS", "1").toDouble();
1271
                                                        Neu->fill_gradient.addStop(SetColor(m_Doc, name, shade), ramp, 0.5, opa, name, shade);
1272
                                                }
1273
                                                if (it.tagName()=="ITEXT")
1274
                                                        GetItemText(&it, m_Doc, Neu, last);
1275
                                                if(it.tagName()=="PageItemAttributes")
1276
                                                {
1277
                                                        QDomNode PIA = it.firstChild();
1278
                                                        ObjAttrVector pageItemAttributes;
1279
                                                        while(!PIA.isNull())
1280
                                                        {
1281
                                                                QDomElement itemAttr = PIA.toElement();
1282
                                                                if(itemAttr.tagName() == "ItemAttribute")
1283
                                                                {
1284
                                                                        ObjectAttribute objattr;
1285
                                                                        objattr.name=itemAttr.attribute("Name");
1286
                                                                        objattr.type=itemAttr.attribute("Type");
1287
                                                                        objattr.value=itemAttr.attribute("Value");
1288
                                                                        objattr.parameter=itemAttr.attribute("Parameter");
1289
                                                                        objattr.relationship=itemAttr.attribute("Relationship");
1290
                                                                        objattr.relationshipto=itemAttr.attribute("RelationshipTo");
1291
                                                                        objattr.autoaddto=itemAttr.attribute("AutoAddTo");
1292
                                                                        pageItemAttributes.append(objattr);
1293
                                                                }
1294
                                                                PIA = PIA.nextSibling();
1295
                                                        }
1296
                                                        Neu->setObjectAttributes(&pageItemAttributes);
1297
                                                }
1298
                                                IT=IT.nextSibling();
1299
                                        }
1300
                                        delete last;
1301
                                        if (Neu->fill_gradient.Stops() == 0)
1302
                                        {
7478 jghali 1303
                                                const ScColor& col1 = m_Doc->PageColors[m_Doc->toolSettings.dBrush];
1304
                                                const ScColor& col2 = m_Doc->PageColors[m_Doc->toolSettings.dPen];
1305
                                                Neu->fill_gradient.addStop(ScColorEngine::getRGBColor(col1, m_Doc), 0.0, 0.5, 1.0, m_Doc->toolSettings.dBrush, 100);
1306
                                                Neu->fill_gradient.addStop(ScColorEngine::getRGBColor(col2, m_Doc), 1.0, 0.5, 1.0, m_Doc->toolSettings.dPen, 100);
6380 fschmid 1307
                                        }
1308
                                        Neu->isAutoText = static_cast<bool>(pite.attribute("AUTOTEXT").toInt());
1309
                                        Neu->isEmbedded = static_cast<bool>(pite.attribute("isInline", "0").toInt());
1310
                                        Neu->gXpos = pite.attribute("gXpos", "0.0").toDouble();
1311
                                        Neu->gYpos = pite.attribute("gYpos", "0.0").toDouble();
1312
                                        QString defaultVal;
1313
                                        defaultVal.setNum(Neu->width());
1314
                                        Neu->gWidth = pite.attribute("gWidth",defaultVal).toDouble();
1315
                                        defaultVal.setNum(Neu->height());
1316
                                        Neu->gHeight = pite.attribute("gHeight",defaultVal).toDouble();
1317
                                        Neu->NextIt = pite.attribute("NEXTITEM").toInt();
1318
                                        if (Neu->isTableItem)
1319
                                        {
7450 fschmid 1320
                                                TableItems2.append(Neu);
1321
                                                TableID2.insert(pite.attribute("OwnLINK", "0").toInt(), Neu->ItemNr);
6380 fschmid 1322
                                        }
6451 fschmid 1323
                                        Neu->isGroupControl = static_cast<bool>(pite.attribute("isGroupControl", "0").toInt());
1324
                                        if (Neu->isGroupControl)
6846 fschmid 1325
                                                groupID2.insert(Neu, pite.attribute("groupsLastItem", "0").toInt()+Neu->ItemNr);
6380 fschmid 1326
                                        pa = pa.nextSibling();
1327
                                }
6846 fschmid 1328
                                if (groupID2.count() != 0)
1329
                                {
1330
                                        QMap<PageItem*, int>::Iterator it;
1331
                                        for (it = groupID2.begin(); it != groupID2.end(); ++it)
1332
                                        {
1333
                                                it.key()->groupsLastItem = m_Doc->Items->at(it.data());
1334
                                        }
1335
                                }
7450 fschmid 1336
                                if (TableItems2.count() != 0)
1337
                                {
1338
                                        for (uint ttc = 0; ttc < TableItems2.count(); ++ttc)
1339
                                        {
1340
                                                PageItem* ta = TableItems2.at(ttc);
1341
                                                if (ta->TopLinkID != -1)
1342
                                                        ta->TopLink = m_Doc->Items->at(TableID2[ta->TopLinkID]);
1343
                                                else
1344
                                                        ta->TopLink = 0;
1345
                                                if (ta->LeftLinkID != -1)
1346
                                                        ta->LeftLink = m_Doc->Items->at(TableID2[ta->LeftLinkID]);
1347
                                                else
1348
                                                        ta->LeftLink = 0;
1349
                                                if (ta->RightLinkID != -1)
1350
                                                        ta->RightLink = m_Doc->Items->at(TableID2[ta->RightLinkID]);
1351
                                                else
1352
                                                        ta->RightLink = 0;
1353
                                                if (ta->BottomLinkID != -1)
1354
                                                        ta->BottomLink = m_Doc->Items->at(TableID2[ta->BottomLinkID]);
1355
                                                else
1356
                                                        ta->BottomLink = 0;
1357
                                        }
1358
                                }
6381 fschmid 1359
                                m_Doc->useRaster = savedAlignGrid;
1360
                                m_Doc->SnapGuides = savedAlignGuides;
6380 fschmid 1361
                                uint ae = m_Doc->Items->count();
1362
                                pat.setDoc(m_Doc);
1363
                                PageItem* currItem = m_Doc->Items->at(ac);
1364
                                pat.pattern = currItem->DrawObj_toImage();
1365
                                for (uint as = ac; as < ae; ++as)
1366
                                {
1367
                                        Neu = m_Doc->Items->take(ac);
1368
                                        Neu->ItemNr = pat.items.count();
1369
                                        pat.items.append(Neu);
1370
                                }
1371
                                pat.width = pg.attribute("width", "0").toDouble();
1372
                                pat.height = pg.attribute("height", "0").toDouble();
6416 fschmid 1373
                                pat.scaleX = pg.attribute("scaleX", "0").toDouble();
1374
                                pat.scaleY = pg.attribute("scaleY", "0").toDouble();
6380 fschmid 1375
                                m_Doc->docPatterns.insert(pg.attribute("Name"), pat);
1376
                        }
5653 cbradney 1377
                        PAGE=PAGE.nextSibling();
1378
                }
1379
                DOC=DOC.nextSibling();
1380
        }
7450 fschmid 1381
        if (TableItemsF.count() != 0)
1382
        {
1383
                for (uint ttc = 0; ttc < TableItemsF.count(); ++ttc)
1384
                {
1385
                        PageItem* ta = TableItemsF.at(ttc);
1386
                        if (ta->TopLinkID != -1)
1387
                                ta->TopLink = m_Doc->FrameItems.at(TableIDF[ta->TopLinkID]);
1388
                        else
1389
                                ta->TopLink = 0;
1390
                        if (ta->LeftLinkID != -1)
1391
                                ta->LeftLink = m_Doc->FrameItems.at(TableIDF[ta->LeftLinkID]);
1392
                        else
1393
                                ta->LeftLink = 0;
1394
                        if (ta->RightLinkID != -1)
1395
                                ta->RightLink = m_Doc->FrameItems.at(TableIDF[ta->RightLinkID]);
1396
                        else
1397
                                ta->RightLink = 0;
1398
                        if (ta->BottomLinkID != -1)
1399
                                ta->BottomLink = m_Doc->FrameItems.at(TableIDF[ta->BottomLinkID]);
1400
                        else
1401
                                ta->BottomLink = 0;
1402
                }
1403
        }
1404
        if (TableItemsM.count() != 0)
1405
        {
1406
                for (uint ttc = 0; ttc < TableItemsM.count(); ++ttc)
1407
                {
1408
                        PageItem* ta = TableItemsM.at(ttc);
1409
                        if (ta->TopLinkID != -1)
1410
                                ta->TopLink = m_Doc->MasterItems.at(TableIDM[ta->TopLinkID]);
1411
                        else
1412
                                ta->TopLink = 0;
1413
                        if (ta->LeftLinkID != -1)
1414
                                ta->LeftLink = m_Doc->MasterItems.at(TableIDM[ta->LeftLinkID]);
1415
                        else
1416
                                ta->LeftLink = 0;
1417
                        if (ta->RightLinkID != -1)
1418
                                ta->RightLink = m_Doc->MasterItems.at(TableIDM[ta->RightLinkID]);
1419
                        else
1420
                                ta->RightLink = 0;
1421
                        if (ta->BottomLinkID != -1)
1422
                                ta->BottomLink = m_Doc->MasterItems.at(TableIDM[ta->BottomLinkID]);
1423
                        else
1424
                                ta->BottomLink = 0;
1425
                }
1426
        }
5653 cbradney 1427
        if (TableItems.count() != 0)
1428
        {
1429
                for (uint ttc = 0; ttc < TableItems.count(); ++ttc)
1430
                {
1431
                        PageItem* ta = TableItems.at(ttc);
1432
                        if (ta->TopLinkID != -1)
1433
                                ta->TopLink = m_Doc->Items->at(TableID[ta->TopLinkID]);
1434
                        else
1435
                                ta->TopLink = 0;
1436
                        if (ta->LeftLinkID != -1)
1437
                                ta->LeftLink = m_Doc->Items->at(TableID[ta->LeftLinkID]);
1438
                        else
1439
                                ta->LeftLink = 0;
1440
                        if (ta->RightLinkID != -1)
1441
                                ta->RightLink = m_Doc->Items->at(TableID[ta->RightLinkID]);
1442
                        else
1443
                                ta->RightLink = 0;
1444
                        if (ta->BottomLinkID != -1)
1445
                                ta->BottomLink = m_Doc->Items->at(TableID[ta->BottomLinkID]);
1446
                        else
1447
                                ta->BottomLink = 0;
1448
                }
1449
        }
7450 fschmid 1450
        if (groupIDF.count() != 0)
1451
        {
1452
                QMap<PageItem*, int>::Iterator it;
1453
                for (it = groupIDF.begin(); it != groupIDF.end(); ++it)
1454
                {
1455
                        it.key()->groupsLastItem = m_Doc->FrameItems.at(it.data());
1456
                }
1457
        }
6451 fschmid 1458
        if (groupID.count() != 0)
1459
        {
1460
                QMap<PageItem*, int>::Iterator it;
1461
                for (it = groupID.begin(); it != groupID.end(); ++it)
1462
                {
7444 fschmid 1463
                        it.key()->groupsLastItem = m_Doc->DocItems.at(it.data());
6451 fschmid 1464
                }
1465
        }
7444 fschmid 1466
        if (groupIDM.count() != 0)
1467
        {
1468
                QMap<PageItem*, int>::Iterator it;
1469
                for (it = groupIDM.begin(); it != groupIDM.end(); ++it)
1470
                {
1471
                        it.key()->groupsLastItem = m_Doc->MasterItems.at(it.data());
1472
                }
1473
        }
5653 cbradney 1474
        m_Doc->setActiveLayer(layerToSetActive);
1475
        m_Doc->setMasterPageMode(false);
1476
        m_Doc->reformPages();
1477
 
1478
        if (m_Doc->Layers.count() == 0)
1479
        {
1480
                la.LNr = 0;
1481
                la.Level = 0;
1482
                la.Name = QObject::tr("Background");
1483
                la.isViewable = true;
1484
                la.isPrintable = true;
1485
                la.isEditable = true;
1486
                la.flowControl = true;
1487
                la.transparency = 1.0;
1488
                la.blendMode = 0;
1489
                la.markerColor = QColor(0, 0, 0);
1490
                la.outlineMode = false;
1491
                m_Doc->Layers.append(la);
1492
        }
1493
        if (LFrames.count() != 0)
1494
        {
1495
                PageItem *Its;
1496
                PageItem *Itn;
1497
                PageItem *Itr;
1498
                QValueList<int>::Iterator lc;
1499
                for (lc = LFrames.begin(); lc != LFrames.end(); ++lc)
1500
                {
1501
                        Its = m_Doc->Items->at((*lc));
1502
                        Itr = Its;
1503
                        Its->BackBox = 0;
1504
                        if (Its->isAutoText)
1505
                                m_Doc->FirstAuto = Its;
1506
                        while (Its->NextIt != -1)
1507
                        {
1508
                                Itn = m_Doc->Items->at(Its->NextIt);
1509
                                Its->NextBox = Itn;
1510
                                Itn->BackBox = Its;
5732 avox 1511
                                Its->itemText.append(Itn->itemText);
1512
                                Itn->itemText = Its->itemText;
5653 cbradney 1513
                                Its = Itn;
1514
                        }
1515
                        Its->NextBox = 0;
1516
                }
1517
        }
1518
        if (m_mwProgressBar!=0)
1519
                m_mwProgressBar->setProgress(DOC.childNodes().count());
1520
        return true;
1521
//      return false;
1522
}
1523
 
1524
 
1525
// Low level plugin API
1526
int scribus134format_getPluginAPIVersion()
1527
{
1528
        return PLUGIN_API_VERSION;
1529
}
1530
 
1531
ScPlugin* scribus134format_getPlugin()
1532
{
1533
        Scribus134Format* plug = new Scribus134Format();
1534
        Q_CHECK_PTR(plug);
1535
        return plug;
1536
}
1537
 
1538
void scribus134format_freePlugin(ScPlugin* plugin)
1539
{
1540
        Scribus134Format* plug = dynamic_cast<Scribus134Format*>(plugin);
1541
        Q_ASSERT(plug);
1542
        delete plug;
1543
}
1544
 
1545
 
6733 avox 1546
namespace {
7000 avox 1547
        const int NOVALUE = -16000;
6733 avox 1548
 
1549
        void fixLegacyCharStyle(CharStyle& cstyle)
1550
        {
1551
                if (! cstyle.font().usable())
1552
                        cstyle.resetFont();
1553
                if (cstyle.fontSize() <= -16000 / 10)
1554
                        cstyle.resetFontSize();
7000 avox 1555
                if (cstyle.effects() == 65535)
6733 avox 1556
                        cstyle.resetEffects();
1557
                if (cstyle.fillColor().isEmpty())
1558
                        cstyle.resetFillColor();
1559
                if (cstyle.fillShade() <= -16000)
1560
                        cstyle.resetFillShade();
1561
                if (cstyle.strokeColor().isEmpty())
1562
                        cstyle.resetStrokeColor();
1563
                if (cstyle.strokeShade() <= -16000)
1564
                        cstyle.resetStrokeShade();
1565
                if (cstyle.shadowXOffset() <= -16000 / 10)
1566
                        cstyle.resetShadowXOffset();
1567
                if (cstyle.shadowYOffset() <= -16000 / 10)
1568
                        cstyle.resetShadowYOffset();
1569
                if (cstyle.outlineWidth() <= -16000 / 10)
1570
                        cstyle.resetOutlineWidth();
1571
                if (cstyle.underlineOffset() <= -16000 / 10)
1572
                        cstyle.resetUnderlineOffset();
1573
                if (cstyle.underlineWidth() <= -16000 / 10)
1574
                        cstyle.resetUnderlineWidth();
1575
                if (cstyle.strikethruOffset() <= -16000 / 10)
1576
                        cstyle.resetStrikethruOffset();
1577
                if (cstyle.strikethruWidth() <= -16000 / 10)
1578
                        cstyle.resetStrikethruWidth();
1579
                if (cstyle.scaleH() <= -16000 / 10)
1580
                        cstyle.resetScaleH();
1581
                if (cstyle.scaleV() <= -16000 / 10)
1582
                        cstyle.resetScaleV();
1583
                if (cstyle.baselineOffset() <= -16000 / 10)
1584
                        cstyle.resetBaselineOffset();
1585
                if (cstyle.tracking() <= -16000 / 10)
1586
                        cstyle.resetTracking();
1587
        }
1588
 
1589
        void fixLegacyParStyle(ParagraphStyle& pstyle)
1590
        {
7000 avox 1591
                if (pstyle.lineSpacing() <= -16000)
1592
                        pstyle.resetLineSpacing();
6733 avox 1593
                if (pstyle.leftMargin() <= -16000)
1594
                        pstyle.resetLeftMargin();
1595
                if (pstyle.rightMargin() <= -16000)
1596
                        pstyle.resetRightMargin();
1597
                if (pstyle.firstIndent() <= -16000)
1598
                        pstyle.resetFirstIndent();
1599
                if (pstyle.alignment() < 0)
1600
                        pstyle.resetAlignment();
1601
                if (pstyle.gapBefore() <= -16000)
1602
                        pstyle.resetGapBefore();
1603
                if (pstyle.gapAfter() <= -16000)
1604
                        pstyle.resetGapAfter();
1605
                if (pstyle.dropCapLines() < 0)
1606
                        pstyle.resetDropCapLines();
1607
                if (pstyle.dropCapOffset() <= -16000)
1608
                        pstyle.resetDropCapOffset();
1609
                fixLegacyCharStyle(pstyle.charStyle());
1610
        }
1611
 
1612
}// namespace
1613
 
1614
 
7000 avox 1615
void Scribus134Format::GetCStyle(const QDomElement *it, ScribusDoc *doc, CharStyle & newStyle)
6864 avox 1616
{
1617
        if (it->hasAttribute("CNAME"))
1618
                newStyle.setName(it->attribute("CNAME"));
1619
        if (it->hasAttribute("CPARENT"))
1620
                newStyle.setParent(it->attribute("CPARENT"));
1621
 
1622
        QString tmpf = it->attribute("FONT", doc->toolSettings.defFont);
1623
        PrefsManager* prefsManager=PrefsManager::instance();
1624
        if ((!prefsManager->appPrefs.AvailFonts.contains(tmpf)) || (!prefsManager->appPrefs.AvailFonts[tmpf].usable()))
1625
        {
1626
                /*              bool isThere = false;
1627
                for (uint dl = 0; dl < dummyScFaces.count(); ++dl)
1628
        {
1629
                        if ((*dummyScFaces.at(dl)).scName() == tmpf)
1630
                        {
1631
                                isThere = true;
1632
                                dummy = *dummyScFaces.at(dl);
1633
                                break;
1634
                        }
1635
        }
1636
                if (!isThere)
1637
        {
1638
                        //                      dummy = ScFace(tmpf, "", tmpf, "", "", 1, false);
1639
                        dummyScFaces.append(dummy);
1640
        }
1641
                */
1642
                if ((!prefsManager->appPrefs.GFontSub.contains(tmpf)) || (!prefsManager->appPrefs.AvailFonts[prefsManager->appPrefs.GFontSub[tmpf]].usable()))
1643
                {
1644
                        newReplacement = true;
1645
                        ScFace dummy = prefsManager->appPrefs.AvailFonts[ReplacedFonts[tmpf]].mkReplacementFor(tmpf, doc->DocName);
1646
                        prefsManager->appPrefs.AvailFonts.insert(tmpf, dummy);
1647
                        ReplacedFonts.insert(tmpf, prefsManager->appPrefs.toolSettings.defFont);
1648
                }
1649
                else
1650
                        ReplacedFonts.insert(tmpf, prefsManager->appPrefs.GFontSub[tmpf]);
1651
        }
1652
        else
1653
        {
1654
                if (!doc->UsedFonts.contains(tmpf))
1655
                {
1656
                        doc->AddFont(tmpf, qRound(doc->toolSettings.defSize / 10.0));
1657
                }
1658
        }
1659
        if (! tmpf.isEmpty() )
1660
                newStyle.setFont((*doc->AllFonts)[tmpf]);
1661
 
1662
        if (it->hasAttribute("FONTSIZE"))
1663
                newStyle.setFontSize(qRound(it->attribute("FONTSIZE").toDouble() * 10));
1664
 
1665
        if (it->hasAttribute("FCOLOR"))
1666
                newStyle.setFillColor(it->attribute("FCOLOR"));
1667
 
1668
        if (it->hasAttribute("KERN"))
1669
                newStyle.setTracking(it->attribute("KERN").toInt());
1670
 
1671
        if (it->hasAttribute("FSHADE"))
1672
                newStyle.setFillShade(it->attribute("FSHADE").toInt());
1673
 
1674
        if (it->hasAttribute("EFFECTS"))
1675
                newStyle.setEffects(static_cast<StyleFlag>(it->attribute("EFFECTS").toInt()));
1676
 
1677
        if (it->hasAttribute("SCOLOR"))
1678
                newStyle.setStrokeColor(it->attribute("SCOLOR", CommonStrings::None));
1679
 
1680
        if (it->hasAttribute("SSHADE"))
7000 avox 1681
                newStyle.setStrokeShade(it->attribute("SSHADE").toInt());
6864 avox 1682
 
1683
        if (it->hasAttribute("SCALEH"))
7000 avox 1684
                newStyle.setScaleH(qRound(it->attribute("SCALEH").toDouble() * 10));
6864 avox 1685
 
1686
        if (it->hasAttribute("SCALEV"))
7000 avox 1687
                newStyle.setScaleV(qRound(it->attribute("SCALEV").toDouble() * 10));
6864 avox 1688
 
1689
        if (it->hasAttribute("BASEO"))
7000 avox 1690
                newStyle.setBaselineOffset(qRound(it->attribute("BASEO").toDouble() * 10));
6864 avox 1691
 
1692
        if (it->hasAttribute("TXTSHX"))
7000 avox 1693
                newStyle.setShadowXOffset(qRound(it->attribute("TXTSHX").toDouble() * 10));
6864 avox 1694
 
1695
        if (it->hasAttribute("TXTSHY"))
7000 avox 1696
                newStyle.setShadowYOffset(qRound(it->attribute("TXTSHY").toDouble() * 10));
6864 avox 1697
 
1698
        if (it->hasAttribute("TXTOUT"))
7000 avox 1699
                newStyle.setOutlineWidth(qRound(it->attribute("TXTOUT").toDouble() * 10));
6864 avox 1700
 
1701
        if (it->hasAttribute("TXTULP"))
7000 avox 1702
                newStyle.setUnderlineOffset(qRound(it->attribute("TXTULP").toDouble() * 10));
6864 avox 1703
 
1704
        if (it->hasAttribute("TXTULW"))
7000 avox 1705
                newStyle.setUnderlineWidth(qRound(it->attribute("TXTULW").toDouble() * 10));
6864 avox 1706
 
1707
        if (it->hasAttribute("TXTSTP"))
7000 avox 1708
                newStyle.setStrikethruOffset(qRound(it->attribute("TXTSTP").toDouble() * 10));
6864 avox 1709
 
1710
        if (it->hasAttribute("TXTSTW"))
7000 avox 1711
                newStyle.setStrikethruWidth(qRound(it->attribute("TXTSTW").toDouble() * 10));
6733 avox 1712
 
6864 avox 1713
}      
1714
 
5653 cbradney 1715
void Scribus134Format::GetItemText(QDomElement *it, ScribusDoc *doc, PageItem* obj, LastStyles* last, bool impo, bool VorLFound)
1716
{
1717
        QString tmp2, tmpf;
6733 avox 1718
        CharStyle newStyle;
6864 avox 1719
        GetCStyle(it, doc, newStyle);
1720
 
7046 avox 1721
        if (it->hasAttribute("Unicode"))
1722
        {
1723
                tmp2 = QChar(it->attribute("Unicode").toUInt());
1724
        }
1725
        else
1726
        {
1727
                tmp2 = it->attribute("CH");
1728
 
1729
                // legacy stuff:
1730
                tmp2.replace(QRegExp("\r"), QChar(13));
1731
                tmp2.replace(QRegExp("\n"), QChar(13));
1732
                tmp2.replace(QRegExp("\t"), QChar(9));
1733
        }
6864 avox 1734
 
7688 avox 1735
        // more legacy stuff:
1736
 
1737
        if (it->hasAttribute("CFONT"))
5653 cbradney 1738
        {
7688 avox 1739
                tmpf = it->attribute("CFONT", doc->toolSettings.defFont);
1740
                PrefsManager* prefsManager=PrefsManager::instance();
1741
                if ((!prefsManager->appPrefs.AvailFonts.contains(tmpf)) || (!prefsManager->appPrefs.AvailFonts[tmpf].usable()))
5653 cbradney 1742
                {
7688 avox 1743
                        /*              bool isThere = false;
1744
                        for (uint dl = 0; dl < dummyScFaces.count(); ++dl)
5653 cbradney 1745
                {
7688 avox 1746
                                if ((*dummyScFaces.at(dl)).scName() == tmpf)
1747
                                {
1748
                                        isThere = true;
1749
                                        dummy = *dummyScFaces.at(dl);
1750
                                        break;
1751
                                }
5653 cbradney 1752
                }
7688 avox 1753
                        if (!isThere)
5653 cbradney 1754
                {
7688 avox 1755
                                //                      dummy = ScFace(tmpf, "", tmpf, "", "", 1, false);
1756
                                dummyScFaces.append(dummy);
5653 cbradney 1757
                }
7688 avox 1758
                        */
1759
                        if ((!prefsManager->appPrefs.GFontSub.contains(tmpf)) || (!prefsManager->appPrefs.AvailFonts[prefsManager->appPrefs.GFontSub[tmpf]].usable()))
1760
                        {
1761
                                newReplacement = true;
1762
                                ScFace dummy = prefsManager->appPrefs.AvailFonts[ReplacedFonts[tmpf]].mkReplacementFor(tmpf, doc->DocName);
1763
                                prefsManager->appPrefs.AvailFonts.insert(tmpf, dummy);
1764
                                ReplacedFonts.insert(tmpf, prefsManager->appPrefs.toolSettings.defFont);
1765
                        }
1766
                        else
1767
                                ReplacedFonts.insert(tmpf, prefsManager->appPrefs.GFontSub[tmpf]);
1768
                }
5653 cbradney 1769
                else
1770
                {
7688 avox 1771
                        if (!doc->UsedFonts.contains(tmpf))
1772
                        {
1773
                                doc->AddFont(tmpf, qRound(doc->toolSettings.defSize / 10.0));
1774
                        }
5653 cbradney 1775
                }
7688 avox 1776
                if (! tmpf.isEmpty() )
1777
                        newStyle.setFont((*doc->AllFonts)[tmpf]);
5653 cbradney 1778
        }
6733 avox 1779
 
1780
        if (it->hasAttribute("CSIZE"))
1781
                newStyle.setFontSize(qRound(it->attribute("CSIZE").toDouble() * 10));
1782
 
1783
        if (it->hasAttribute("CCOLOR"))
1784
                newStyle.setFillColor(it->attribute("CCOLOR"));
1785
 
5653 cbradney 1786
        if (it->hasAttribute("CEXTRA"))
6733 avox 1787
                newStyle.setTracking(qRound(it->attribute("CEXTRA").toDouble() / it->attribute("CSIZE").toDouble() * 1000.0));
1788
        else if (it->hasAttribute("CKERN"))
1789
                newStyle.setTracking(it->attribute("CKERN").toInt());
1790
 
1791
        if (it->hasAttribute("CSHADE"))
1792
                newStyle.setFillShade(it->attribute("CSHADE").toInt());
1793
 
1794
        if (it->hasAttribute("CSTYLE"))
1795
      &nbs