Subversion Repositories Scribus

Rev

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

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