Subversion Repositories Scribus

Rev

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

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