Subversion Repositories Scribus

Rev

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

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