Subversion Repositories Scribus

Rev

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

Rev Author Line No. Line
13746 jghali 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 "scribus150format.h"
8
#include "scribus150formatimpl.h"
9
 
14170 jghali 10
#include <ctime>
13746 jghali 11
#include <memory>
12
 
13
#include "../../formatidlist.h"
14
#include "commonstrings.h"
15
#include "ui/missing.h"
16
#include "prefsmanager.h"
17
#include "scconfig.h"
18
#include "scpattern.h"
19
#include "scribusdoc.h"
20
#include "scribusview.h"
21
#include "hyphenator.h"
22
#include "pageitem_latexframe.h"
13839 fschmid 23
#ifdef HAVE_OSG
24
        #include "pageitem_osgframe.h"
25
#endif
13746 jghali 26
 
27
#include "units.h"
28
#include "util.h"
29
#include "util_math.h"
30
#include "util_color.h"
31
#include "scgzfile.h"
32
#include <QCursor>
33
#include <QFileInfo>
34
#include <QList>
35
#include <QDataStream>
36
 
37
#include "scxmlstreamwriter.h"
38
 
39
bool Scribus150Format::saveFile(const QString & fileName, const FileFormat & /* fmt */)
40
{
41
        QString text, tf, tf2, tc, tc2;
42
        QString fileDir = QFileInfo(fileName).absolutePath();
43
        m_lastSavedFile = "";
44
 
45
        // Create a random temporary file name
46
        srand(time(NULL)); // initialize random sequence each time
47
        long     randt = 0, randn = 1 + (int) (((double) rand() / ((double) RAND_MAX + 1)) * 10000);
48
        QString  tmpFileName  = QString("%1.%2").arg(fileName).arg(randn);
49
        while (QFile::exists(tmpFileName) && (randt < 100))
50
        {
51
                randn = 1 + (int) (((double) rand() / ((double) RAND_MAX + 1)) * 10000);
52
                tmpFileName = QString("%1.%2").arg(fileName).arg(randn);
53
                ++randt;
54
        }
55
        if (QFile::exists(tmpFileName))
56
                return false;
57
 
58
        /*QDomDocument docu("scribus");
59
        QString st="<SCRIBUSUTF8NEW></SCRIBUSUTF8NEW>";
60
        docu.setContent(st);
61
        QDomElement elem=docu.documentElement();
62
        elem.setAttribute("Version", QString(VERSION));
63
        QDomElement dc=docu.createElement("DOCUMENT");*/
64
 
65
        std::auto_ptr<QIODevice> outputFile;
66
        if (fileName.toLower().right(2) == "gz")
67
                outputFile.reset( new ScGzFile(tmpFileName) );
68
        else
69
                outputFile.reset( new QFile(tmpFileName) );
70
 
71
        if (!outputFile->open(QIODevice::WriteOnly))
72
                return false;
73
 
74
        ScXmlStreamWriter docu;
75
        docu.setAutoFormatting(true);
76
        docu.setDevice(outputFile.get());
77
        docu.writeStartDocument();
78
        docu.writeStartElement("SCRIBUSUTF8NEW");
79
        docu.writeAttribute("Version", QString(VERSION));
80
 
81
        docu.writeStartElement("DOCUMENT");
82
        docu.writeAttribute("ANZPAGES"    , m_Doc->DocPages.count());
83
        docu.writeAttribute("PAGEWIDTH"   , m_Doc->pageWidth);
84
        docu.writeAttribute("PAGEHEIGHT"  , m_Doc->pageHeight);
85
        docu.writeAttribute("BORDERLEFT"  , m_Doc->pageMargins.Left);
86
        docu.writeAttribute("BORDERRIGHT" , m_Doc->pageMargins.Right);
87
        docu.writeAttribute("BORDERTOP"   , m_Doc->pageMargins.Top);
88
        docu.writeAttribute("BORDERBOTTOM", m_Doc->pageMargins.Bottom);
89
        docu.writeAttribute("PRESET"      ,m_Doc->marginPreset);
90
        docu.writeAttribute("BleedTop"    , m_Doc->bleeds.Top);
91
        docu.writeAttribute("BleedLeft"   , m_Doc->bleeds.Left);
92
        docu.writeAttribute("BleedRight"  , m_Doc->bleeds.Right);
93
        docu.writeAttribute("BleedBottom" , m_Doc->bleeds.Bottom);
94
        docu.writeAttribute("ORIENTATION" , m_Doc->PageOri);
95
        docu.writeAttribute("PAGESIZE"    , m_Doc->m_pageSize);
96
        docu.writeAttribute("FIRSTNUM"    , m_Doc->FirstPnum);
97
        docu.writeAttribute("BOOK"        , m_Doc->currentPageLayout);
98
        if(m_Doc->usesAutomaticTextFrames())
99
                docu.writeAttribute("AUTOTEXT", 1);
100
        docu.writeAttribute("AUTOSPALTEN" ,m_Doc->PageSp);
101
        docu.writeAttribute("ABSTSPALTEN" ,m_Doc->PageSpa);
102
        docu.writeAttribute("UNITS"       , m_Doc->unitIndex());
13996 cbradney 103
        docu.writeAttribute("DFONT"       ,m_Doc->itemToolPrefs.textFont);
104
        docu.writeAttribute("DSIZE"       ,m_Doc->itemToolPrefs.textSize / 10.0);
105
        docu.writeAttribute("DCOL"        ,m_Doc->itemToolPrefs.textColumns);
106
        docu.writeAttribute("DGAP"        ,m_Doc->itemToolPrefs.textColumnGap);
107
        docu.writeAttribute("TabFill"     ,m_Doc->itemToolPrefs.textTabFillChar);
108
        docu.writeAttribute("TabWidth"    ,m_Doc->itemToolPrefs.textTabWidth);
13746 jghali 109
        docu.writeAttribute("AUTHOR"      ,m_Doc->documentInfo.getAuthor());
110
        docu.writeAttribute("COMMENTS"    ,m_Doc->documentInfo.getComments());
111
        docu.writeAttribute("KEYWORDS"    ,m_Doc->documentInfo.getKeywords());
112
        docu.writeAttribute("PUBLISHER",m_Doc->documentInfo.getPublisher());
113
        docu.writeAttribute("DOCDATE",m_Doc->documentInfo.getDate());
114
        docu.writeAttribute("DOCTYPE",m_Doc->documentInfo.getType());
115
        docu.writeAttribute("DOCFORMAT",m_Doc->documentInfo.getFormat());
116
        docu.writeAttribute("DOCIDENT",m_Doc->documentInfo.getIdent());
117
        docu.writeAttribute("DOCSOURCE",m_Doc->documentInfo.getSource());
118
        docu.writeAttribute("DOCLANGINFO",m_Doc->documentInfo.getLangInfo());
119
        docu.writeAttribute("DOCRELATION",m_Doc->documentInfo.getRelation());
120
        docu.writeAttribute("DOCCOVER",m_Doc->documentInfo.getCover());
121
        docu.writeAttribute("DOCRIGHTS",m_Doc->documentInfo.getRights());
122
        docu.writeAttribute("DOCCONTRIB",m_Doc->documentInfo.getContrib());
123
        docu.writeAttribute("TITLE",m_Doc->documentInfo.getTitle());
124
        docu.writeAttribute("SUBJECT",m_Doc->documentInfo.getSubject());
125
        docu.writeAttribute("VHOCH"  , m_Doc->typographicSettings.valueSuperScript);
126
        docu.writeAttribute("VHOCHSC", m_Doc->typographicSettings.scalingSuperScript);
127
        docu.writeAttribute("VTIEF"  , m_Doc->typographicSettings.valueSubScript);
128
        docu.writeAttribute("VTIEFSC", m_Doc->typographicSettings.scalingSubScript);
129
        docu.writeAttribute("VKAPIT" , m_Doc->typographicSettings.valueSmallCaps);
13889 cbradney 130
        docu.writeAttribute("BASEGRID",m_Doc->guidesSettings.valueBaselineGrid);
131
        docu.writeAttribute("BASEO"  , m_Doc->guidesSettings.offsetBaselineGrid);
13746 jghali 132
        docu.writeAttribute("AUTOL"  , m_Doc->typographicSettings.autoLineSpacing);
133
        docu.writeAttribute("UnderlinePos"   , m_Doc->typographicSettings.valueUnderlinePos);
134
        docu.writeAttribute("UnderlineWidth" , m_Doc->typographicSettings.valueUnderlineWidth);
135
        docu.writeAttribute("StrikeThruPos"  , m_Doc->typographicSettings.valueStrikeThruPos);
136
        docu.writeAttribute("StrikeThruWidth", m_Doc->typographicSettings.valueStrikeThruWidth);
137
        docu.writeAttribute("GROUPC",m_Doc->GroupCounter);
138
        docu.writeAttribute("HCMS" , static_cast<int>(m_Doc->HasCMS));
139
        docu.writeAttribute("DPSo" , static_cast<int>(m_Doc->CMSSettings.SoftProofOn));
140
        docu.writeAttribute("DPSFo", static_cast<int>(m_Doc->CMSSettings.SoftProofFullOn));
141
        docu.writeAttribute("DPuse", static_cast<int>(m_Doc->CMSSettings.CMSinUse));
142
        docu.writeAttribute("DPgam", static_cast<int>(m_Doc->CMSSettings.GamutCheck));
143
        docu.writeAttribute("DPbla", static_cast<int>(m_Doc->CMSSettings.BlackPoint));
144
        docu.writeAttribute("DPMo",m_Doc->CMSSettings.DefaultMonitorProfile);
145
        docu.writeAttribute("DPPr",m_Doc->CMSSettings.DefaultPrinterProfile);
146
        docu.writeAttribute("DPIn",m_Doc->CMSSettings.DefaultImageRGBProfile);
147
        docu.writeAttribute("DPInCMYK",m_Doc->CMSSettings.DefaultImageCMYKProfile);
148
        docu.writeAttribute("DPIn2",m_Doc->CMSSettings.DefaultSolidColorRGBProfile);
149
        docu.writeAttribute("DPIn3",m_Doc->CMSSettings.DefaultSolidColorCMYKProfile);
150
        docu.writeAttribute("DISc",m_Doc->CMSSettings.DefaultIntentColors);
151
        docu.writeAttribute("DIIm",m_Doc->CMSSettings.DefaultIntentImages);
152
        docu.writeAttribute("ALAYER", m_Doc->activeLayer());
153
        docu.writeAttribute("LANGUAGE", m_Doc->Language);
154
        docu.writeAttribute("MINWORDLEN", m_Doc->MinWordLen);
155
        docu.writeAttribute("HYCOUNT", m_Doc->HyCount);
156
        docu.writeAttribute("AUTOMATIC", static_cast<int>(m_Doc->Automatic));
157
        docu.writeAttribute("AUTOCHECK", static_cast<int>(m_Doc->AutoCheck));
158
        docu.writeAttribute("GUIDELOCK", static_cast<int>(m_Doc->GuideLock));
159
        docu.writeAttribute("SnapToGuides", static_cast<int>(m_Doc->SnapGuides));
160
        docu.writeAttribute("SnapToGrid", static_cast<int>(m_Doc->useRaster));
13889 cbradney 161
        docu.writeAttribute("MINGRID", m_Doc->guidesSettings.minorGridSpacing);
162
        docu.writeAttribute("MAJGRID", m_Doc->guidesSettings.majorGridSpacing);
13746 jghali 163
        docu.writeAttribute("SHOWGRID", static_cast<int>(m_Doc->guidesSettings.gridShown));
164
        docu.writeAttribute("SHOWGUIDES", static_cast<int>(m_Doc->guidesSettings.guidesShown));
165
        docu.writeAttribute("showcolborders", static_cast<int>(m_Doc->guidesSettings.colBordersShown));
166
        docu.writeAttribute("SHOWFRAME", static_cast<int>(m_Doc->guidesSettings.framesShown));
167
        docu.writeAttribute("SHOWLAYERM", static_cast<int>(m_Doc->guidesSettings.layerMarkersShown));
168
        docu.writeAttribute("SHOWMARGIN", static_cast<int>(m_Doc->guidesSettings.marginsShown));
13889 cbradney 169
        docu.writeAttribute("SHOWBASE", static_cast<int>(m_Doc->guidesSettings.baselineGridShown));
13746 jghali 170
        docu.writeAttribute("SHOWPICT", static_cast<int>(m_Doc->guidesSettings.showPic));
171
        docu.writeAttribute("SHOWControl", static_cast<int>(m_Doc->guidesSettings.showControls));
172
        docu.writeAttribute("SHOWLINK", static_cast<int>(m_Doc->guidesSettings.linkShown));
173
        docu.writeAttribute("rulerMode", static_cast<int>(m_Doc->guidesSettings.rulerMode));
174
        docu.writeAttribute("showrulers", static_cast<int>(m_Doc->guidesSettings.rulersShown));
175
        docu.writeAttribute("showBleed", static_cast<int>(m_Doc->guidesSettings.showBleed));
176
        docu.writeAttribute("rulerXoffset", m_Doc->rulerXoffset);
177
        docu.writeAttribute("rulerYoffset", m_Doc->rulerYoffset);
178
        docu.writeAttribute("GuideRad", m_Doc->guidesSettings.guideRad);
13889 cbradney 179
        docu.writeAttribute("GRAB",m_Doc->guidesSettings.grabRadius);
13996 cbradney 180
        docu.writeAttribute("POLYC", m_Doc->itemToolPrefs.polyCorners);
14022 cbradney 181
        docu.writeAttribute("POLYF", m_Doc->itemToolPrefs.polyFactor);
13996 cbradney 182
        docu.writeAttribute("POLYR", m_Doc->itemToolPrefs.polyRotation);
13953 cbradney 183
        docu.writeAttribute("POLYCUR", m_Doc->itemToolPrefs.polyCurvature);
14027 fschmid 184
        docu.writeAttribute("POLYFD", m_Doc->itemToolPrefs.polyFactorGuiVal);
13996 cbradney 185
        docu.writeAttribute("POLYS", static_cast<int>(m_Doc->itemToolPrefs.polyUseFactor));
13746 jghali 186
        docu.writeAttribute("AutoSave", static_cast<int>(m_Doc->AutoSave));
187
        docu.writeAttribute("AutoSaveTime", m_Doc->AutoSaveTime);
188
        docu.writeAttribute("ScratchBottom", m_Doc->scratch.Bottom);
189
        docu.writeAttribute("ScratchLeft", m_Doc->scratch.Left);
190
        docu.writeAttribute("ScratchRight", m_Doc->scratch.Right);
191
        docu.writeAttribute("ScratchTop", m_Doc->scratch.Top);
192
        docu.writeAttribute("GapHorizontal", m_Doc->GapHorizontal);
193
        docu.writeAttribute("GapVertical", m_Doc->GapVertical);
13996 cbradney 194
        docu.writeAttribute("StartArrow", m_Doc->itemToolPrefs.lineStartArrow);
195
        docu.writeAttribute("EndArrow", m_Doc->itemToolPrefs.lineEndArrow);
14014 cbradney 196
        docu.writeAttribute("PEN",m_Doc->itemToolPrefs.shapeLineColor);
197
        docu.writeAttribute("BRUSH",m_Doc->itemToolPrefs.shapeFillColor);
13996 cbradney 198
        docu.writeAttribute("PENLINE",m_Doc->itemToolPrefs.lineColor);
199
        docu.writeAttribute("PENTEXT",m_Doc->itemToolPrefs.textColor);
200
        docu.writeAttribute("StrokeText",m_Doc->itemToolPrefs.textStrokeColor);
14014 cbradney 201
        docu.writeAttribute("TextBackGround", m_Doc->itemToolPrefs.textFillColor);
13996 cbradney 202
        docu.writeAttribute("TextLineColor", m_Doc->itemToolPrefs.textLineColor);
14014 cbradney 203
        docu.writeAttribute("TextBackGroundShade", m_Doc->itemToolPrefs.textFillColorShade);
204
        docu.writeAttribute("TextLineShade", m_Doc->itemToolPrefs.textLineColorShade);
13996 cbradney 205
        docu.writeAttribute("TextPenShade", m_Doc->itemToolPrefs.textShade);
206
        docu.writeAttribute("TextStrokeShade", m_Doc->itemToolPrefs.textStrokeShade);
14014 cbradney 207
        docu.writeAttribute("STIL",m_Doc->itemToolPrefs.shapeLineStyle);
13996 cbradney 208
        docu.writeAttribute("STILLINE",m_Doc->itemToolPrefs.lineStyle);
14014 cbradney 209
        docu.writeAttribute("WIDTH",m_Doc->itemToolPrefs.shapeLineWidth);
13996 cbradney 210
        docu.writeAttribute("WIDTHLINE",m_Doc->itemToolPrefs.lineWidth);
14014 cbradney 211
        docu.writeAttribute("PENSHADE",m_Doc->itemToolPrefs.shapeLineColorShade);
212
        docu.writeAttribute("LINESHADE",m_Doc->itemToolPrefs.lineColorShade);
213
        docu.writeAttribute("BRUSHSHADE",m_Doc->itemToolPrefs.shapeFillColorShade);
13953 cbradney 214
        docu.writeAttribute("MAGMIN",m_Doc->opToolPrefs.magMin);
215
        docu.writeAttribute("MAGMAX",m_Doc->opToolPrefs.magMax);
216
        docu.writeAttribute("MAGSTEP",m_Doc->opToolPrefs.magStep);
13996 cbradney 217
        docu.writeAttribute("CPICT",m_Doc->itemToolPrefs.imageFillColor);
14014 cbradney 218
        docu.writeAttribute("PICTSHADE",m_Doc->itemToolPrefs.imageFillColorShade);
13996 cbradney 219
        docu.writeAttribute("PICTSCX",m_Doc->itemToolPrefs.imageScaleX);
220
        docu.writeAttribute("PICTSCY",m_Doc->itemToolPrefs.imageScaleY);
221
        docu.writeAttribute("PSCALE", static_cast<int>(m_Doc->itemToolPrefs.imageScaleType));
222
        docu.writeAttribute("PASPECT", static_cast<int>(m_Doc->itemToolPrefs.imageAspectRatio));
223
        docu.writeAttribute("EmbeddedPath", static_cast<int>(m_Doc->itemToolPrefs.imageUseEmbeddedPath));
224
        docu.writeAttribute("HalfRes", m_Doc->itemToolPrefs.imageLowResType);
13953 cbradney 225
        docu.writeAttribute("dispX", m_Doc->opToolPrefs.dispX);
226
        docu.writeAttribute("dispY", m_Doc->opToolPrefs.dispY);
227
        docu.writeAttribute("constrain", m_Doc->opToolPrefs.constrain);
13889 cbradney 228
        docu.writeAttribute("MINORC",m_Doc->guidesSettings.minorGridColor.name());
229
        docu.writeAttribute("MAJORC",m_Doc->guidesSettings.majorGridColor.name());
13746 jghali 230
        docu.writeAttribute("GuideC", m_Doc->guidesSettings.guideColor.name());
13889 cbradney 231
        docu.writeAttribute("BaseC", m_Doc->guidesSettings.baselineGridColor.name());
13746 jghali 232
        docu.writeAttribute("GuideZ", m_Doc->guidesSettings.guideRad);
13889 cbradney 233
        docu.writeAttribute("BACKG", static_cast<int>(m_Doc->guidesSettings.guidePlacement));
13746 jghali 234
        docu.writeAttribute("PAGEC",m_Doc->papColor.name());
13889 cbradney 235
        docu.writeAttribute("MARGC",m_Doc->guidesSettings.marginColor.name());
13746 jghali 236
        docu.writeAttribute("RANDF", static_cast<int>(m_Doc->marginColored));
237
        docu.writeAttribute("currentProfile", m_Doc->curCheckProfile);
238
 
239
        writeCheckerProfiles(docu);
240
        writeLinestyles(docu);
241
        writeJavascripts(docu);
242
        writeBookmarks(docu);
243
        writeColors(docu);
14150 fschmid 244
        writeGradients(docu);
13746 jghali 245
        writeHyphenatorLists(docu);
246
        writePStyles(docu);
247
        writeCStyles(docu);
248
        writeLayers(docu);
249
        writePrintOptions(docu);
250
        writePdfOptions(docu);
251
        writeDocItemAttributes(docu);
252
        writeTOC(docu);
253
        writePageSets(docu);
254
        writeSections(docu);
255
        writePatterns(docu, fileDir);
256
        writeContent (docu, fileDir);
257
 
258
        docu.writeEndElement();
259
        docu.writeEndDocument();
260
 
261
        bool  writeSucceed = false;
262
        const QFile* qFile = dynamic_cast<QFile*>(outputFile.get());
263
        const ScGzFile* gzFile = dynamic_cast<ScGzFile*>(outputFile.get());
264
        if (qFile)
265
                writeSucceed = (qFile->error() == QFile::NoError);
266
        else if (gzFile)
267
                writeSucceed = !gzFile->errorOccurred();
268
        outputFile->close();
269
 
270
        if (writeSucceed)
271
        {
272
                if (QFile::exists(fileName))
273
                        writeSucceed = QFile::remove(fileName) ? QFile::rename(tmpFileName, fileName) : false;
274
                else
275
                        writeSucceed = QFile::rename(tmpFileName, fileName);
276
                m_lastSavedFile = writeSucceed ? fileName : tmpFileName;
277
        }
278
        else if (QFile::exists(tmpFileName))
279
                QFile::remove(tmpFileName);
280
        if (writeSucceed)
281
                QFile::remove(tmpFileName);
282
        return writeSucceed;
283
}
284
 
285
void Scribus150Format::writeCheckerProfiles(ScXmlStreamWriter & docu)
286
{
287
        CheckerPrefsList::Iterator itcp;
288
        CheckerPrefsList::Iterator itcpend=m_Doc->checkerProfiles.end();
289
        for (itcp = m_Doc->checkerProfiles.begin(); itcp != itcpend; ++itcp)
290
        {
291
                docu.writeEmptyElement("CheckProfile");
292
                docu.writeAttribute("Name",itcp.key());
293
                docu.writeAttribute("ignoreErrors", static_cast<int>(itcp.value().ignoreErrors));
294
                docu.writeAttribute("autoCheck", static_cast<int>(itcp.value().autoCheck));
295
                docu.writeAttribute("checkGlyphs", static_cast<int>(itcp.value().checkGlyphs));
296
                docu.writeAttribute("checkOrphans", static_cast<int>(itcp.value().checkOrphans));
297
                docu.writeAttribute("checkOverflow", static_cast<int>(itcp.value().checkOverflow));
298
                docu.writeAttribute("checkPictures", static_cast<int>(itcp.value().checkPictures));
299
                docu.writeAttribute("checkResolution", static_cast<int>(itcp.value().checkResolution));
300
                docu.writeAttribute("checkTransparency", static_cast<int>(itcp.value().checkTransparency));
301
                docu.writeAttribute("minResolution",itcp.value().minResolution);
302
                docu.writeAttribute("maxResolution",itcp.value().maxResolution);
303
                docu.writeAttribute("checkAnnotations", static_cast<int>(itcp.value().checkAnnotations));
304
                docu.writeAttribute("checkRasterPDF", static_cast<int>(itcp.value().checkRasterPDF));
305
                docu.writeAttribute("checkForGIF", static_cast<int>(itcp.value().checkForGIF));
306
                docu.writeAttribute("ignoreOffLayers", static_cast<int>(itcp.value().ignoreOffLayers));
307
                //docu.writeEndElement();
308
        }
309
}
310
 
311
void Scribus150Format::writeLinestyles(ScXmlStreamWriter& docu)
312
{
313
        QMap<QString,multiLine>::Iterator itMU;
314
        for (itMU = m_Doc->MLineStyles.begin(); itMU != m_Doc->MLineStyles.end(); ++itMU)
315
        {
316
                docu.writeStartElement("MultiLine");
317
                docu.writeAttribute("Name",itMU.key());
318
                multiLine ml = itMU.value();
319
                multiLine::iterator itMU2;
320
                for (itMU2 = ml.begin(); itMU2 != ml.end(); ++itMU2)
321
                {
322
                        docu.writeEmptyElement("SubLine");
323
                        docu.writeAttribute("Color", (*itMU2).Color);
324
                        docu.writeAttribute("Shade", (*itMU2).Shade);
325
                        docu.writeAttribute("Dash", (*itMU2).Dash);
326
                        docu.writeAttribute("LineEnd", (*itMU2).LineEnd);
327
                        docu.writeAttribute("LineJoin", (*itMU2).LineJoin);
328
                        docu.writeAttribute("Width", (*itMU2).Width);
329
                        docu.writeAttribute("Shortcut", ml.shortcut);
330
                }
331
                docu.writeEndElement();
332
        }
333
        QList<ArrowDesc>::Iterator itar;
334
        for (itar = m_Doc->arrowStyles.begin(); itar != m_Doc->arrowStyles.end(); ++itar)
335
        {
336
                if ((*itar).userArrow)
337
                {
338
                        docu.writeEmptyElement("Arrows");
339
                        docu.writeAttribute("NumPoints", (*itar).points.size());
340
                        QString arp = "";
341
                        QString tmp, tmpy;
342
                        double xa, ya;
343
                        for (uint nxx = 0; nxx < (*itar).points.size(); ++nxx)
344
                        {
345
                                (*itar).points.point(nxx, &xa, &ya);
346
                                arp += tmp.setNum(xa) + " " + tmpy.setNum(ya) + " ";
347
                        }
348
                        docu.writeAttribute("Points", arp);
349
                        docu.writeAttribute("Name", (*itar).name);
350
                }
351
        }
352
}
353
 
354
 
355
void Scribus150Format::writeJavascripts(ScXmlStreamWriter & docu)
356
{
357
        QMap<QString,QString>::Iterator itja;
358
        for (itja = m_Doc->JavaScripts.begin(); itja != m_Doc->JavaScripts.end(); ++itja)
359
        {
360
                docu.writeEmptyElement("JAVA");
361
                docu.writeAttribute("NAME",itja.key());
362
                docu.writeAttribute("SCRIPT",itja.value());
363
        }
364
 
365
}
366
 
367
 
368
void Scribus150Format::writeBookmarks(ScXmlStreamWriter & docu)
369
{      
370
        QList<ScribusDoc::BookMa>::Iterator itbm;
371
        for (itbm = m_Doc->BookMarks.begin(); itbm != m_Doc->BookMarks.end(); ++itbm)
372
        {
373
                docu.writeEmptyElement("Bookmark");
374
                docu.writeAttribute("Title",(*itbm).Title);
375
                docu.writeAttribute("Text",(*itbm).Text);
376
                docu.writeAttribute("Aktion",(*itbm).Aktion);
377
                docu.writeAttribute("ItemNr", (*itbm).ItemNr);
378
                docu.writeAttribute("Element", (*itbm).PageObject->ItemNr);
379
                docu.writeAttribute("First", (*itbm).First);
380
                docu.writeAttribute("Last", (*itbm).Last);
381
                docu.writeAttribute("Prev", (*itbm).Prev);
382
                docu.writeAttribute("Next", (*itbm).Next);
383
                docu.writeAttribute("Parent", (*itbm).Parent);
384
        }
385
}
386
 
387
 
388
void Scribus150Format::writeColors(ScXmlStreamWriter & docu)
389
{      
390
        ColorList::Iterator itc;
391
        for (itc = m_Doc->PageColors.begin(); itc != m_Doc->PageColors.end(); ++itc)
392
        {
393
                docu.writeEmptyElement("COLOR");
394
                docu.writeAttribute("NAME",itc.key());
395
                if (m_Doc->PageColors[itc.key()].getColorModel() == colorModelRGB)
396
                        docu.writeAttribute("RGB",m_Doc->PageColors[itc.key()].nameRGB());
397
                else
398
                        docu.writeAttribute("CMYK",m_Doc->PageColors[itc.key()].nameCMYK());
399
                docu.writeAttribute("Spot",static_cast<int>(m_Doc->PageColors[itc.key()].isSpotColor()));
400
                docu.writeAttribute("Register",static_cast<int>(m_Doc->PageColors[itc.key()].isRegistrationColor()));
401
        }
402
 
403
}
404
 
14150 fschmid 405
void Scribus150Format::writeGradients(ScXmlStreamWriter & docu)
406
{
407
        QMap<QString, VGradient>::Iterator itGrad;
408
        for (itGrad = m_Doc->docGradients.begin(); itGrad != m_Doc->docGradients.end(); ++itGrad)
409
        {
410
                docu.writeStartElement("Gradient");
411
                docu.writeAttribute("Name",itGrad.key());
412
                VGradient gra = itGrad.value();
413
                QList<VColorStop*> cstops = gra.colorStops();
414
                for (uint cst = 0; cst < gra.Stops(); ++cst)
415
                {
416
                        docu.writeEmptyElement("CSTOP");
417
                        docu.writeAttribute("RAMP", cstops.at(cst)->rampPoint);
418
                        docu.writeAttribute("NAME", cstops.at(cst)->name);
419
                        docu.writeAttribute("SHADE", cstops.at(cst)->shade);
420
                        docu.writeAttribute("TRANS", cstops.at(cst)->opacity);
421
                }
422
                docu.writeEndElement();
423
        }
424
}
425
 
13746 jghali 426
void Scribus150Format::writeHyphenatorLists(ScXmlStreamWriter &docu)
427
{
428
        docu.writeStartElement("HYPHEN");
429
        for (QHash<QString, QString>::Iterator hyit = m_Doc->docHyphenator->specialWords.begin(); hyit != m_Doc->docHyphenator->specialWords.end(); ++hyit)
430
        {
431
                docu.writeEmptyElement("EXCEPTION");
432
                docu.writeAttribute("WORD", hyit.key());
433
                docu.writeAttribute("HYPHENATED", hyit.value());
434
        }
435
        for (QSet<QString>::Iterator hyit2 = m_Doc->docHyphenator->ignoredWords.begin(); hyit2 != m_Doc->docHyphenator->ignoredWords.end(); ++hyit2)
436
        {
437
                docu.writeEmptyElement("IGNORE");
438
                docu.writeAttribute("WORD", (*hyit2));
439
        }
440
        docu.writeEndElement();
441
}
442
 
443
void Scribus150Format::writePStyles(ScXmlStreamWriter & docu)
444
{
445
        //      if (m_Doc->docParagraphStyles.count() > 5)
446
        {
447
                for (int ff = 0; ff < m_Doc->paragraphStyles().count(); ++ff)
448
                        putPStyle(docu, m_Doc->paragraphStyles()[ff], "STYLE");
449
        }
450
}
451
 
452
void Scribus150Format::putPStyle(ScXmlStreamWriter & docu, const ParagraphStyle & style, const QString &nodeName)
453
{
454
        bool styleHasTabs = (!style.isInhTabValues() && (style.tabValues().count() > 0));
455
        if (styleHasTabs)
456
                docu.writeStartElement(nodeName);
457
        else
458
                docu.writeEmptyElement(nodeName);
459
        if ( ! style.name().isEmpty() )
460
                docu.writeAttribute("NAME", style.name());
461
        if ( ! style.parent().isEmpty())
462
                docu.writeAttribute("PARENT", style.parent());
463
        if ( style.isDefaultStyle())
464
                docu.writeAttribute("DefaultStyle", style.isDefaultStyle());
465
 
466
        if ( ! style.isInhAlignment())
467
                docu.writeAttribute("ALIGN", style.alignment());
468
        if ( ! style.isInhLineSpacingMode())
469
                docu.writeAttribute("LINESPMode", style.lineSpacingMode());
470
        if ( ! style.isInhLineSpacing())
471
                docu.writeAttribute("LINESP", style.lineSpacing());
472
        if ( ! style.isInhLeftMargin())
473
                docu.writeAttribute("INDENT", style.leftMargin());
474
        if ( ! style.isInhRightMargin())
475
                docu.writeAttribute("RMARGIN", style.rightMargin());
476
        if ( ! style.isInhFirstIndent())
477
                docu.writeAttribute("FIRST", style.firstIndent());
478
        if ( ! style.isInhGapBefore())
479
                docu.writeAttribute("VOR", style.gapBefore());
480
        if ( ! style.isInhGapAfter())
481
                docu.writeAttribute("NACH", style.gapAfter());
482
        if ( ! style.isInhHasDropCap())
483
                docu.writeAttribute("DROP", static_cast<int>(style.hasDropCap()));
484
        if ( ! style.isInhDropCapLines())
485
                docu.writeAttribute("DROPLIN", style.dropCapLines());
486
        if ( ! style.isInhDropCapOffset())
487
                docu.writeAttribute("DROPDIST", style.dropCapOffset());
488
        if ( ! style.isInhOpticalMargins())
489
                docu.writeAttribute("OpticalMargins", style.opticalMargins());
490
        if ( ! style.isInhHyphenationMode())
491
                docu.writeAttribute("HyphenationMode", style.hyphenationMode());
492
        if ( ! style.isInhMinWordTracking())
493
                docu.writeAttribute("MinWordTrack", style.minWordTracking());
494
        if ( ! style.isInhMinGlyphExtension())
495
                docu.writeAttribute("MinGlyphShrink", style.minGlyphExtension());
496
        if ( ! style.isInhMaxGlyphExtension())
497
                docu.writeAttribute("MaxGlyphExtend", style.maxGlyphExtension());
498
 
499
        if ( ! style.shortcut().isEmpty() )
500
                docu.writeAttribute("PSHORTCUT", style.shortcut()); // shortcuts won't be inherited
501
 
502
        putCStyle(docu, style.charStyle());
503
 
504
        if ( ! style.isInhTabValues())
505
        {
506
                for (int a = 0; a < style.tabValues().count(); ++a)
507
                {
508
                        docu.writeEmptyElement("Tabs");
509
                        docu.writeAttribute("Type", (style.tabValues().at(a)).tabType);
510
                        docu.writeAttribute("Pos", (style.tabValues().at(a)).tabPosition);
511
                        QString tabCh = "";
512
                        if (!(style.tabValues().at(a)).tabFillChar.isNull())
513
                                tabCh = QString((style.tabValues().at(a)).tabFillChar);
514
                        docu.writeAttribute("Fill", tabCh);
515
                }
516
        }
517
 
518
        if (styleHasTabs)
519
                docu.writeEndElement();
520
}
521
 
522
 
523
void Scribus150Format::writeCStyles(ScXmlStreamWriter & docu)
524
{
525
        for (int ff = 0; ff < m_Doc->charStyles().count(); ++ff)
526
        {
527
                docu.writeStartElement("CHARSTYLE");
528
                putNamedCStyle(docu, m_Doc->charStyles()[ff]);
529
                docu.writeEndElement();
530
        }
531
}
532
 
533
void Scribus150Format::putCStylePT(ScXmlStreamWriter & docu, const CharStyle & style)
534
{
535
        docu.writeAttribute("CNAME", style.name());
536
        docu.writeAttribute("CPARENT", style.parent());
537
        docu.writeAttribute("FONT", style.font().scName());
538
        docu.writeAttribute("FONTSIZE", style.fontSize() / 10.0);
539
        docu.writeAttribute("FEATURES", style.features().join(" "));
540
        docu.writeAttribute("FCOLOR", style.fillColor());
541
        docu.writeAttribute("FSHADE", style.fillShade());
542
        docu.writeAttribute("SCOLOR", style.strokeColor());
543
        docu.writeAttribute("SSHADE", style.strokeShade());
544
        docu.writeAttribute("TXTSHX", style.shadowXOffset() / 10.0);
545
        docu.writeAttribute("TXTSHY", style.shadowYOffset() / 10.0);
546
        docu.writeAttribute("TXTOUT", style.outlineWidth() / 10.0);
547
        docu.writeAttribute("TXTULP", style.underlineOffset() / 10.0);
548
        docu.writeAttribute("TXTULW", style.underlineWidth() / 10.0);
549
        docu.writeAttribute("TXTSTP", style.strikethruOffset() / 10.0);
550
        docu.writeAttribute("TXTSTW", style.strikethruWidth() / 10.0);
551
        docu.writeAttribute("SCALEH", style.scaleH() / 10.0);
552
        docu.writeAttribute("SCALEV", style.scaleV() / 10.0);
553
        docu.writeAttribute("BASEO", style.baselineOffset() / 10.0);
554
        docu.writeAttribute("KERN", style.tracking() / 10.0);
555
        docu.writeAttribute("wordTrack", style.wordTracking());
556
        docu.writeAttribute("SHORTCUT", style.shortcut()); // shortcuts won't be inherited
557
}
558
 
559
void Scribus150Format::putCStyle(ScXmlStreamWriter & docu, const CharStyle & style)
560
{
561
        if ( ! style.parent().isEmpty() )
562
                docu.writeAttribute("CPARENT", style.parent());
563
        if ( ! style.isInhFont())      
564
                docu.writeAttribute("FONT", style.font().scName());
565
        if ( ! style.isInhFontSize())
566
                docu.writeAttribute("FONTSIZE", style.fontSize() / 10.0);
567
        if ( ! style.isInhFeatures())
568
                docu.writeAttribute("FEATURES", style.features().join(" "));
569
        if ( ! style.isInhFillColor())
570
                docu.writeAttribute("FCOLOR", style.fillColor());
571
        if ( ! style.isInhFillShade())
572
                docu.writeAttribute("FSHADE", style.fillShade());
573
        if ( ! style.isInhStrokeColor())
574
                docu.writeAttribute("SCOLOR", style.strokeColor());
575
        if ( ! style.isInhStrokeShade())
576
                docu.writeAttribute("SSHADE", style.strokeShade());
577
        if ( ! style.isInhShadowXOffset())
578
                docu.writeAttribute("TXTSHX", style.shadowXOffset() / 10.0);
579
        if ( ! style.isInhShadowYOffset())
580
                docu.writeAttribute("TXTSHY", style.shadowYOffset() / 10.0);
581
        if ( ! style.isInhOutlineWidth())
582
                docu.writeAttribute("TXTOUT", style.outlineWidth() / 10.0);
583
        if ( ! style.isInhUnderlineOffset())
584
                docu.writeAttribute("TXTULP", style.underlineOffset() / 10.0);
585
        if ( ! style.isInhUnderlineWidth())
586
                docu.writeAttribute("TXTULW", style.underlineWidth() / 10.0);
587
        if ( ! style.isInhStrikethruOffset())
588
                docu.writeAttribute("TXTSTP", style.strikethruOffset() / 10.0);
589
        if ( ! style.isInhStrikethruWidth())
590
                docu.writeAttribute("TXTSTW", style.strikethruWidth() / 10.0);
591
        if ( ! style.isInhScaleH())
592
                docu.writeAttribute("SCALEH", style.scaleH() / 10.0);
593
        if ( ! style.isInhScaleV())
594
                docu.writeAttribute("SCALEV", style.scaleV() / 10.0);
595
        if ( ! style.isInhBaselineOffset())
596
                docu.writeAttribute("BASEO", style.baselineOffset() / 10.0);
597
        if ( ! style.isInhTracking())
598
                docu.writeAttribute("KERN", style.tracking() / 10.0);
599
        if ( ! style.isInhWordTracking())
600
                docu.writeAttribute("wordTrack", style.wordTracking());
601
        if ( ! style.shortcut().isEmpty() )
602
                docu.writeAttribute("SHORTCUT", style.shortcut()); // shortcuts won't be inherited
603
}
604
 
605
void Scribus150Format::putNamedCStyle(ScXmlStreamWriter& docu, const CharStyle & style)
606
{
607
        if ( ! style.name().isEmpty() )
608
                docu.writeAttribute("CNAME", style.name());
609
        if ( style.hasName() && style.isDefaultStyle())
610
                docu.writeAttribute("DefaultStyle", style.isDefaultStyle());
611
        putCStyle(docu, style);
612
}
613
 
614
void Scribus150Format::writeLayers(ScXmlStreamWriter & docu)
615
{      
616
        uint layerCount=m_Doc->layerCount();
617
        for (uint lay = 0; lay < layerCount; ++lay)
618
        {
619
                docu.writeEmptyElement("LAYERS");
13875 jghali 620
                docu.writeAttribute("NUMMER",m_Doc->Layers[lay].ID);
13746 jghali 621
                docu.writeAttribute("LEVEL",m_Doc->Layers[lay].Level);
622
                docu.writeAttribute("NAME",m_Doc->Layers[lay].Name);
623
                docu.writeAttribute("SICHTBAR", static_cast<int>(m_Doc->Layers[lay].isViewable));
624
                docu.writeAttribute("DRUCKEN", static_cast<int>(m_Doc->Layers[lay].isPrintable));
625
                docu.writeAttribute("EDIT", static_cast<int>(m_Doc->Layers[lay].isEditable));
626
                docu.writeAttribute("FLOW", static_cast<int>(m_Doc->Layers[lay].flowControl));
627
                docu.writeAttribute("TRANS", m_Doc->Layers[lay].transparency);
628
                docu.writeAttribute("BLEND", m_Doc->Layers[lay].blendMode);
629
                docu.writeAttribute("OUTL", static_cast<int>(m_Doc->Layers[lay].outlineMode));
630
                docu.writeAttribute("LAYERC",m_Doc->Layers[lay].markerColor.name());
631
        }
632
}
633
 
634
void Scribus150Format::writePrintOptions(ScXmlStreamWriter & docu)
635
{
636
        docu.writeStartElement("Printer");
637
        docu.writeAttribute("firstUse", static_cast<int>(m_Doc->Print_Options.firstUse));
638
        docu.writeAttribute("toFile", static_cast<int>(m_Doc->Print_Options.toFile));
639
        docu.writeAttribute("useAltPrintCommand", static_cast<int>(m_Doc->Print_Options.useAltPrintCommand));
640
        docu.writeAttribute("outputSeparations", static_cast<int>(m_Doc->Print_Options.outputSeparations));
641
        docu.writeAttribute("useSpotColors", static_cast<int>(m_Doc->Print_Options.useSpotColors));
642
        docu.writeAttribute("useColor", static_cast<int>(m_Doc->Print_Options.useColor));
643
        docu.writeAttribute("mirrorH", static_cast<int>(m_Doc->Print_Options.mirrorH));
644
        docu.writeAttribute("mirrorV", static_cast<int>(m_Doc->Print_Options.mirrorV));
645
        docu.writeAttribute("useICC", static_cast<int>(m_Doc->Print_Options.useICC));
646
        docu.writeAttribute("doGCR", static_cast<int>(m_Doc->Print_Options.doGCR));
647
        docu.writeAttribute("doClip", static_cast<int>(m_Doc->Print_Options.doClip));
648
        docu.writeAttribute("setDevParam", static_cast<int>(m_Doc->Print_Options.setDevParam));
649
        docu.writeAttribute("useDocBleeds", static_cast<int>(m_Doc->Print_Options.useDocBleeds));
650
        docu.writeAttribute("cropMarks", static_cast<int>(m_Doc->Print_Options.cropMarks));
651
        docu.writeAttribute("bleedMarks", static_cast<int>(m_Doc->Print_Options.bleedMarks));
652
        docu.writeAttribute("registrationMarks", static_cast<int>(m_Doc->Print_Options.registrationMarks));
653
        docu.writeAttribute("colorMarks", static_cast<int>(m_Doc->Print_Options.colorMarks));
654
        docu.writeAttribute("includePDFMarks", static_cast<int>(m_Doc->Print_Options.includePDFMarks));
655
        docu.writeAttribute("PSLevel", (m_Doc->Print_Options.prnEngine < WindowsGDI) ? m_Doc->Print_Options.prnEngine : PostScript3);
656
        docu.writeAttribute("PDLanguage" , m_Doc->Print_Options.prnEngine);
657
        docu.writeAttribute("markOffset" , m_Doc->Print_Options.markOffset);
658
        docu.writeAttribute("BleedTop"   , m_Doc->Print_Options.bleeds.Top);
659
        docu.writeAttribute("BleedLeft"  , m_Doc->Print_Options.bleeds.Left);
660
        docu.writeAttribute("BleedRight" , m_Doc->Print_Options.bleeds.Right);
661
        docu.writeAttribute("BleedBottom", m_Doc->Print_Options.bleeds.Bottom);
662
        docu.writeAttribute("printer" , m_Doc->Print_Options.printer);
663
        docu.writeAttribute("filename", m_Doc->Print_Options.filename);
664
        docu.writeAttribute("separationName", m_Doc->Print_Options.separationName);
665
        docu.writeAttribute("printerCommand", m_Doc->Print_Options.printerCommand);
666
        for (int p = 0; p < m_Doc->Print_Options.allSeparations.count(); ++p)
667
        {
668
                docu.writeEmptyElement("Separation");
669
                docu.writeAttribute("Name", m_Doc->Print_Options.allSeparations[p]);
670
        }
671
        docu.writeEndElement();
672
}
673
 
674
void Scribus150Format::writePdfOptions(ScXmlStreamWriter & docu)
675
{
676
        docu.writeStartElement("PDF");
677
        docu.writeAttribute("firstUse", static_cast<int>(m_Doc->PDF_Options.firstUse));
678
        docu.writeAttribute("Thumbnails", static_cast<int>(m_Doc->PDF_Options.Thumbnails));
679
        docu.writeAttribute("Articles", static_cast<int>(m_Doc->PDF_Options.Articles));
680
        docu.writeAttribute("Bookmarks", static_cast<int>(m_Doc->PDF_Options.Bookmarks));
681
        docu.writeAttribute("Compress", static_cast<int>(m_Doc->PDF_Options.Compress));
682
        docu.writeAttribute("CMethod", m_Doc->PDF_Options.CompressMethod);
683
        docu.writeAttribute("Quality", m_Doc->PDF_Options.Quality);
684
        docu.writeAttribute("MirrorH", static_cast<int>(m_Doc->PDF_Options.MirrorH));
685
        docu.writeAttribute("MirrorV", static_cast<int>(m_Doc->PDF_Options.MirrorV));
686
        docu.writeAttribute("Clip", static_cast<int>(m_Doc->PDF_Options.doClip));
687
        docu.writeAttribute("RotateDeg", static_cast<int>(m_Doc->PDF_Options.RotateDeg));
688
        docu.writeAttribute("PresentMode", static_cast<int>(m_Doc->PDF_Options.PresentMode));
689
        docu.writeAttribute("RecalcPic", static_cast<int>(m_Doc->PDF_Options.RecalcPic));
690
        docu.writeAttribute("Grayscale", static_cast<int>(m_Doc->PDF_Options.isGrayscale));
691
        docu.writeAttribute("RGBMode", static_cast<int>(m_Doc->PDF_Options.UseRGB));
692
        docu.writeAttribute("UseProfiles", static_cast<int>(m_Doc->PDF_Options.UseProfiles));
693
        docu.writeAttribute("UseProfiles2", static_cast<int>(m_Doc->PDF_Options.UseProfiles2));
694
        docu.writeAttribute("Binding", m_Doc->PDF_Options.Binding);
695
        docu.writeAttribute("PicRes", m_Doc->PDF_Options.PicRes);
696
        docu.writeAttribute("Resolution", m_Doc->PDF_Options.Resolution);
697
        docu.writeAttribute("Version", m_Doc->PDF_Options.Version);
698
        docu.writeAttribute("Intent", m_Doc->PDF_Options.Intent);
699
        docu.writeAttribute("Intent2", m_Doc->PDF_Options.Intent2);
700
        docu.writeAttribute("SolidP", m_Doc->PDF_Options.SolidProf);
701
        docu.writeAttribute("ImageP", m_Doc->PDF_Options.ImageProf);
702
        docu.writeAttribute("PrintP", m_Doc->PDF_Options.PrintProf);
703
        docu.writeAttribute("InfoString", m_Doc->PDF_Options.Info);
704
        docu.writeAttribute("BTop", m_Doc->PDF_Options.bleeds.Top);
705
        docu.writeAttribute("BLeft", m_Doc->PDF_Options.bleeds.Left);
706
        docu.writeAttribute("BRight", m_Doc->PDF_Options.bleeds.Right);
707
        docu.writeAttribute("BBottom", m_Doc->PDF_Options.bleeds.Bottom);
708
        docu.writeAttribute("useDocBleeds", static_cast<int>(m_Doc->PDF_Options.useDocBleeds));
709
        docu.writeAttribute("cropMarks", static_cast<int>(m_Doc->PDF_Options.cropMarks));
710
        docu.writeAttribute("bleedMarks", static_cast<int>(m_Doc->PDF_Options.bleedMarks));
711
        docu.writeAttribute("registrationMarks", static_cast<int>(m_Doc->PDF_Options.registrationMarks));
712
        docu.writeAttribute("colorMarks", static_cast<int>(m_Doc->PDF_Options.colorMarks));
713
        docu.writeAttribute("docInfoMarks", static_cast<int>(m_Doc->PDF_Options.docInfoMarks));
714
        docu.writeAttribute("markOffset", m_Doc->PDF_Options.markOffset);
715
        docu.writeAttribute("ImagePr", static_cast<int>(m_Doc->PDF_Options.EmbeddedI));
716
        docu.writeAttribute("PassOwner", m_Doc->PDF_Options.PassOwner);
717
        docu.writeAttribute("PassUser", m_Doc->PDF_Options.PassUser);
718
        docu.writeAttribute("Permissions", m_Doc->PDF_Options.Permissions);
719
        docu.writeAttribute("Encrypt", static_cast<int>(m_Doc->PDF_Options.Encrypt));
720
        docu.writeAttribute("UseLayers", static_cast<int>(m_Doc->PDF_Options.useLayers));
721
        docu.writeAttribute("UseLpi", static_cast<int>(m_Doc->PDF_Options.UseLPI));
722
        docu.writeAttribute("UseSpotColors", static_cast<int>(m_Doc->PDF_Options.UseSpotColors));
723
        docu.writeAttribute("doMultiFile", static_cast<int>(m_Doc->PDF_Options.doMultiFile));
724
        docu.writeAttribute("displayBookmarks", static_cast<int>(m_Doc->PDF_Options.displayBookmarks));
725
        docu.writeAttribute("displayFullscreen", static_cast<int>(m_Doc->PDF_Options.displayFullscreen));
726
        docu.writeAttribute("displayLayers", static_cast<int>(m_Doc->PDF_Options.displayLayers));
727
        docu.writeAttribute("displayThumbs", static_cast<int>(m_Doc->PDF_Options.displayThumbs));
728
        docu.writeAttribute("hideMenuBar", static_cast<int>(m_Doc->PDF_Options.hideMenuBar));
729
        docu.writeAttribute("hideToolBar", static_cast<int>(m_Doc->PDF_Options.hideToolBar));
730
        docu.writeAttribute("fitWindow", static_cast<int>(m_Doc->PDF_Options.fitWindow));
731
        docu.writeAttribute("PageLayout", m_Doc->PDF_Options.PageLayout);
732
        docu.writeAttribute("openAction", m_Doc->PDF_Options.openAction);
733
        for (int pdoF = 0; pdoF < m_Doc->PDF_Options.EmbedList.count(); ++pdoF)
734
        {
735
                docu.writeEmptyElement("Fonts");
736
                docu.writeAttribute("Name", m_Doc->PDF_Options.EmbedList[pdoF]);
737
        }
738
        for (int pdoS = 0; pdoS < m_Doc->PDF_Options.SubsetList.count(); ++pdoS)
739
        {
740
                docu.writeEmptyElement("Subset");
741
                docu.writeAttribute("Name", m_Doc->PDF_Options.SubsetList[pdoS]);
742
        }
743
        for (int pdoE = 0; pdoE < m_Doc->PDF_Options.PresentVals.count(); ++pdoE)
744
        {
745
                docu.writeEmptyElement("Effekte");
746
                docu.writeAttribute("pageEffectDuration", m_Doc->PDF_Options.PresentVals[pdoE].pageEffectDuration);
747
                docu.writeAttribute("pageViewDuration", m_Doc->PDF_Options.PresentVals[pdoE].pageViewDuration);
748
                docu.writeAttribute("effectType", m_Doc->PDF_Options.PresentVals[pdoE].effectType);
749
                docu.writeAttribute("Dm", m_Doc->PDF_Options.PresentVals[pdoE].Dm);
750
                docu.writeAttribute("M", m_Doc->PDF_Options.PresentVals[pdoE].M);
751
                docu.writeAttribute("Di", m_Doc->PDF_Options.PresentVals[pdoE].Di);
752
        }
753
        QMap<QString,LPIData>::Iterator itlp;
754
        for (itlp = m_Doc->PDF_Options.LPISettings.begin(); itlp != m_Doc->PDF_Options.LPISettings.end(); ++itlp)
755
        {
756
                docu.writeEmptyElement("LPI");
757
                docu.writeAttribute("Color", itlp.key());
758
                docu.writeAttribute("Frequency", itlp.value().Frequency);
759
                docu.writeAttribute("Angle", itlp.value().Angle);
760
                docu.writeAttribute("SpotFunction", itlp.value().SpotFunc);
761
        }
762
        docu.writeEndElement();
763
}
764
 
765
void Scribus150Format::writeDocItemAttributes(ScXmlStreamWriter & docu)
766
{
767
        docu.writeStartElement("DocItemAttributes");
768
        for(ObjAttrVector::Iterator objAttrIt = m_Doc->docItemAttributes.begin() ; objAttrIt != m_Doc->docItemAttributes.end(); ++objAttrIt )
769
        {
770
                docu.writeEmptyElement("ItemAttribute");
771
                docu.writeAttribute("Name", (*objAttrIt).name);
772
                docu.writeAttribute("Type", (*objAttrIt).type);
773
                docu.writeAttribute("Value", (*objAttrIt).value);
774
                docu.writeAttribute("Parameter", (*objAttrIt).parameter);
775
                docu.writeAttribute("Relationship", (*objAttrIt).relationship);
776
                docu.writeAttribute("RelationshipTo", (*objAttrIt).relationshipto);
777
                docu.writeAttribute("AutoAddTo", (*objAttrIt).autoaddto);
778
        }
779
        docu.writeEndElement();
780
}
781
 
782
 
783
void Scribus150Format::writeTOC(ScXmlStreamWriter & docu)
784
{
785
        docu.writeStartElement("TablesOfContents");
786
        for(ToCSetupVector::Iterator tocSetupIt = m_Doc->docToCSetups.begin() ; tocSetupIt != m_Doc->docToCSetups.end(); ++tocSetupIt )
787
        {
788
                docu.writeEmptyElement("TableOfContents");
789
                docu.writeAttribute("Name", (*tocSetupIt).name);
790
                docu.writeAttribute("ItemAttributeName", (*tocSetupIt).itemAttrName);
791
                docu.writeAttribute("FrameName", (*tocSetupIt).frameName);
792
                docu.writeAttribute("ListNonPrinting", (*tocSetupIt).listNonPrintingFrames);
793
                docu.writeAttribute("Style", (*tocSetupIt).textStyle);
794
                switch ((*tocSetupIt).pageLocation)
795
                {
796
                        case Beginning:
797
                                docu.writeAttribute("NumberPlacement", "Beginning");
798
                                break;
799
                        case End:
800
                                docu.writeAttribute("NumberPlacement", "End");
801
                                break;
802
                        case NotShown:
803
                                docu.writeAttribute("NumberPlacement", "NotShown");
804
                                break;
805
                }
806
        }
807
        docu.writeEndElement();
808
}
809
 
810
 
811
void Scribus150Format::writeSections(ScXmlStreamWriter & docu)
812
{
813
        docu.writeStartElement("Sections");
814
        for(DocumentSectionMap::Iterator it = m_Doc->sections.begin() ; it != m_Doc->sections.end(); ++it )
815
        {
816
                docu.writeEmptyElement("Section");
817
                docu.writeAttribute("Number", (*it).number);
818
                docu.writeAttribute("Name", (*it).name);
819
                docu.writeAttribute("From", (*it).fromindex);
820
                docu.writeAttribute("To", (*it).toindex);
821
                switch ((*it).type)
822
                {
823
                        case Type_1_2_3:
824
                                docu.writeAttribute("Type", "Type_1_2_3");
825
                                break;
826
                        case Type_i_ii_iii:
827
                                docu.writeAttribute("Type", "Type_i_ii_iii");
828
                                break;
829
                        case Type_I_II_III:
830
                                docu.writeAttribute("Type", "Type_I_II_III");
831
                                break;
832
                        case Type_a_b_c:
833
                                docu.writeAttribute("Type", "Type_a_b_c");
834
                                break;
835
                        case Type_A_B_C:
836
                                docu.writeAttribute("Type", "Type_A_B_C");
837
                                break;
838
                        case Type_None:
839
                                docu.writeAttribute("Type", "Type_None");
840
                                break;
841
                }
842
                docu.writeAttribute("Start", (*it).sectionstartindex);
843
                docu.writeAttribute("Reversed", (*it).reversed);
844
                docu.writeAttribute("Active", (*it).active);
845
        }
846
        docu.writeEndElement();
847
}
848
 
849
 
850
void Scribus150Format::writePageSets(ScXmlStreamWriter & docu)
851
{      
852
        docu.writeStartElement("PageSets");
853
        QList<PageSet>::Iterator itpgset;
854
        for(itpgset = m_Doc->pageSets.begin(); itpgset != m_Doc->pageSets.end(); ++itpgset )
855
        {
856
                docu.writeStartElement("Set");
857
                docu.writeAttribute("Name", (*itpgset).Name);
858
                docu.writeAttribute("FirstPage", (*itpgset).FirstPage);
859
                docu.writeAttribute("Rows", (*itpgset).Rows);
860
                docu.writeAttribute("Columns", (*itpgset).Columns);
861
//              docu.writeAttribute("GapHorizontal", (*itpgset).GapHorizontal);
862
//              docu.writeAttribute("GapVertical", (*itpgset).GapVertical);
863
//              docu.writeAttribute("GapBelow", (*itpgset).GapBelow);
864
                QStringList pNames = (*itpgset).pageNames;
865
                QStringList::Iterator itpgsetN;
866
                for(itpgsetN = pNames.begin(); itpgsetN != pNames.end(); ++itpgsetN )
867
                {
868
                        docu.writeEmptyElement("PageNames");
869
                        docu.writeAttribute("Name", (*itpgsetN));
870
                }
871
                docu.writeEndElement();
872
        }
873
        docu.writeEndElement();
874
}
875
 
876
void Scribus150Format::writePatterns(ScXmlStreamWriter & docu, const QString& baseDir)
877
{
878
        QMap<QString, ScPattern>::Iterator itPat;
879
        for (itPat = m_Doc->docPatterns.begin(); itPat != m_Doc->docPatterns.end(); ++itPat)
880
        {
881
                docu.writeStartElement("Pattern");
882
                docu.writeAttribute("Name",itPat.key());
883
                ScPattern pa = itPat.value();
884
                docu.writeAttribute("width", pa.width);
885
                docu.writeAttribute("height", pa.height);
886
                docu.writeAttribute("scaleX", pa.scaleX);
887
                docu.writeAttribute("scaleY", pa.scaleY);
888
                docu.writeAttribute("xoffset", pa.xoffset);
889
                docu.writeAttribute("yoffset", pa.yoffset);
890
                WriteObjects(m_Doc, docu, baseDir, 0, 0, ItemSelectionPattern, &pa.items);
891
                docu.writeEndElement();
892
        }      
893
}
894
 
895
void Scribus150Format::writeContent(ScXmlStreamWriter & docu, const QString& baseDir)
896
{
897
        if (m_mwProgressBar != 0)
898
        {
899
                m_mwProgressBar->setMaximum(m_Doc->DocPages.count()+m_Doc->MasterPages.count()+m_Doc->DocItems.count()+m_Doc->MasterItems.count()+m_Doc->FrameItems.count());
900
                m_mwProgressBar->setValue(0);
901
        }
902
        WritePages(m_Doc, docu, m_mwProgressBar, 0, true);
903
        WritePages(m_Doc, docu, m_mwProgressBar, m_Doc->MasterPages.count(), false);
904
        WriteObjects(m_Doc, docu, baseDir, m_mwProgressBar, m_Doc->MasterPages.count()+m_Doc->DocPages.count(), ItemSelectionFrame);
905
        WriteObjects(m_Doc, docu, baseDir, m_mwProgressBar, m_Doc->MasterPages.count()+m_Doc->DocPages.count()+m_Doc->FrameItems.count(), ItemSelectionMaster);
906
        WriteObjects(m_Doc, docu, baseDir, m_mwProgressBar, m_Doc->MasterPages.count()+m_Doc->DocPages.count()+m_Doc->MasterItems.count()+m_Doc->FrameItems.count(), ItemSelectionPage);
907
}
908
 
909
void Scribus150Format::WritePages(ScribusDoc *doc, ScXmlStreamWriter& docu, QProgressBar *dia2, uint maxC, bool master)
910
{
911
        uint ObCount = maxC;
912
        Page *page;
913
        uint pages;
914
        QString tmp;
915
        if (master)
916
                pages = doc->MasterPages.count();
917
        else
918
                pages = doc->DocPages.count();
919
        for(uint i = 0; i < pages; ++i)
920
        {
921
                ObCount++;
922
                if (dia2 != 0)
923
                        dia2->setValue(ObCount);
924
                if (master)
925
                {
926
                        docu.writeStartElement("MASTERPAGE");
927
                        page = doc->MasterPages.at(i);
928
                }
929
                else
930
                {
931
                        docu.writeStartElement("PAGE");
932
                        page = doc->DocPages.at(i);
933
                }
934
                docu.writeAttribute("PAGEXPOS",page->xOffset());
935
                docu.writeAttribute("PAGEYPOS",page->yOffset());
936
                docu.writeAttribute("PAGEWIDTH",page->width());
937
                docu.writeAttribute("PAGEHEIGHT",page->height());
938
                docu.writeAttribute("BORDERLEFT",page->initialMargins.Left);
939
                docu.writeAttribute("BORDERRIGHT",page->initialMargins.Right);
940
                docu.writeAttribute("BORDERTOP",page->initialMargins.Top);
941
                docu.writeAttribute("BORDERBOTTOM",page->initialMargins.Bottom);
942
                docu.writeAttribute("NUM",page->pageNr());
943
                docu.writeAttribute("NAM",page->pageName());
944
                docu.writeAttribute("MNAM",page->MPageNam);
945
                docu.writeAttribute("Size", page->m_pageSize);
946
                docu.writeAttribute("Orientation", page->orientation());
947
                docu.writeAttribute("LEFT", page->LeftPg);
948
                docu.writeAttribute("PRESET", page->marginPreset);
949
                docu.writeAttribute("VerticalGuides", GuideManagerIO::writeVerticalGuides(
950
                                                                                                        page, GuideManagerCore::Standard));
951
                docu.writeAttribute("HorizontalGuides", GuideManagerIO::writeHorizontalGuides(
952
                                                                                                        page, GuideManagerCore::Standard));
953
                docu.writeAttribute("AGhorizontalAutoGap", page->guides.horizontalAutoGap());
954
                docu.writeAttribute("AGverticalAutoGap", page->guides.verticalAutoGap());
955
                docu.writeAttribute("AGhorizontalAutoCount", page->guides.horizontalAutoCount());
956
                docu.writeAttribute("AGverticalAutoCount", page->guides.verticalAutoCount());
957
                docu.writeAttribute("AGhorizontalAutoRefer", page->guides.horizontalAutoRefer());
958
                docu.writeAttribute("AGverticalAutoRefer", page->guides.verticalAutoRefer());
959
                docu.writeAttribute("AGSelection", GuideManagerIO::writeSelection(page));
960
                docu.writeEndElement();
961
        }
962
}
963
 
964
 
965
namespace { // anon
966
        QString textWithSmartHyphens(StoryText& itemText, int from, int to)
967
        {
968
                QString result("");
969
                int lastPos = from;
970
                for (int i = from; i < to; ++i)
971
                {
972
                        if (itemText.charStyle(i).effects() & ScStyle_HyphenationPossible
973
                                // duplicate SHYPHEN if already present to indicate a user provided SHYPHEN:
974
                                || itemText.text(i) == SpecialChars::SHYPHEN)
975
                        {
976
                                result += itemText.text(lastPos, i + 1 - lastPos);
977
                                result += SpecialChars::SHYPHEN;
978
                                lastPos = i+1;
979
                        }
980
                }
981
                if (lastPos < to)
982
                        result += itemText.text(lastPos, to - lastPos);
983
                return result;
984
        }
985
} // namespace anon
986
 
987
 
988
void Scribus150Format::writeITEXTs(ScribusDoc *doc, ScXmlStreamWriter &docu, PageItem* item)
989
{
990
        CharStyle lastStyle;
991
        int lastPos = 0;
992
        QString tmpnum;
993
        for(int k = 0; k < item->itemText.length(); ++k)
994
        {
995
                const CharStyle& style1(item->itemText.charStyle(k));
996
                const QChar ch = item->itemText.text(k);
997
 
998
                if (ch == SpecialChars::OBJECT ||
999
                        ch == SpecialChars::TAB ||
1000
                        ch == SpecialChars::PARSEP ||
1001
                        ch == SpecialChars::LINEBREAK ||
1002
                        ch == SpecialChars::COLBREAK ||
1003
                        ch == SpecialChars::FRAMEBREAK ||
1004
                        ch == SpecialChars::PAGENUMBER ||
1005
                        ch == SpecialChars::PAGECOUNT ||
1006
                        ch == SpecialChars::NBHYPHEN ||
1007
                        ch == SpecialChars::NBSPACE ||
1008
                        ch == SpecialChars::ZWNBSPACE ||
1009
                        ch == SpecialChars::ZWSPACE ||
1010
                        ch.unicode() < 32 ||
1011
                        (0xd800 <= ch.unicode() && ch.unicode() < 0xe000) ||
1012
                        ch.unicode() == 0xfffe || ch.unicode() == 0xffff ||
1013
                        style1 != lastStyle)
1014
                {
1015
                        // something new, write pending chars
1016
                        if  (k - lastPos > 0)
1017
                        {
1018
                                docu.writeEmptyElement("ITEXT");
1019
                                /*if (item->asPathText()) // seems to cause problems when loading pathtext elements
1020
                                        putCStylePT(docu, lastStyle);
1021
                                else*/
1022
                                        putCStyle(docu, lastStyle);
1023
                                docu.writeAttribute("CH", textWithSmartHyphens(item->itemText, lastPos, k));
1024
                        }
1025
                        lastStyle = style1;
1026
                        lastPos = k;
1027
                }
1028
 
1029
                if (ch == SpecialChars::OBJECT && item->itemText.object(k) != NULL)
1030
                {
1031
                        // each obj in its own ITEXT for now
1032
                        docu.writeEmptyElement("ITEXT");
1033
                        /*if (item->asPathText()) // seems to cause problems when loading pathtext elements
1034
                                putCStylePT(docu, lastStyle);
1035
                        else*/
1036
                                putCStyle(docu, lastStyle);
13900 jghali 1037
                        tmpnum.setNum(ch.unicode());
1038
                        docu.writeAttribute("Unicode", tmpnum);
13746 jghali 1039
                        docu.writeAttribute("COBJ", item->itemText.object(k)->ItemNr);         
1040
                }
1041
                else if (ch == SpecialChars::PARSEP)    // stores also the paragraphstyle for preceding chars
1042
                        putPStyle(docu, item->itemText.paragraphStyle(k), "para");
1043
                else if (ch == SpecialChars::TAB)
13971 jghali 1044
                {
13746 jghali 1045
                        docu.writeEmptyElement("tab");
13971 jghali 1046
                        putCStyle(docu, lastStyle);
1047
                }
13746 jghali 1048
                else if (ch == SpecialChars::LINEBREAK)
1049
                        docu.writeEmptyElement("breakline");
1050
                else if (ch == SpecialChars::COLBREAK)
1051
                        docu.writeEmptyElement("breakcol");
1052
                else if (ch == SpecialChars::FRAMEBREAK)
1053
                        docu.writeEmptyElement("breakframe");
1054
                else if (ch == SpecialChars::NBHYPHEN)
1055
                        docu.writeEmptyElement("nbhyphen");
1056
                else if (ch == SpecialChars::NBSPACE)
1057
                        docu.writeEmptyElement("nbspace");
1058
                else if (ch == SpecialChars::ZWNBSPACE)
1059
                        docu.writeEmptyElement("zwnbspace");
1060
                else if (ch == SpecialChars::ZWSPACE)
1061
                        docu.writeEmptyElement("zwspace");
1062
                else if (ch == SpecialChars::PAGENUMBER)
1063
                {
1064
                        docu.writeEmptyElement("var");
1065
                        docu.writeAttribute("name", "pgno");
1066
                        putCStyle(docu, lastStyle);
1067
                }
1068
                else if (ch == SpecialChars::PAGECOUNT)
1069
                {
1070
                        docu.writeEmptyElement("var");
1071
                        docu.writeAttribute("name", "pgco");
1072
                        putCStyle(docu, lastStyle);
1073
                }
1074
                else if (ch.unicode() < 32 ||
1075
                                 (0xd800 <= ch.unicode() && ch.unicode() < 0xe000) ||
1076
                                 ch.unicode() == 0xfffe || ch.unicode() == 0xffff)
1077
                {
1078
                        docu.writeEmptyElement("ITEXT");
1079
                        putCStyle(docu, lastStyle);
1080
                        tmpnum.setNum(ch.unicode());
1081
                        docu.writeAttribute("Unicode", tmpnum);        
1082
                }
1083
                else
1084
                {
1085
                        continue;
1086
                }
1087
                // otherwise we just wrote something special and are done with position 'k'
1088
                lastPos = k + 1;
1089
        }
1090
        // write pending chars
1091
        if ( item->itemText.length() - lastPos > 0)
1092
        {
1093
                docu.writeEmptyElement("ITEXT");
1094
                /*if (item->asPathText())
1095
                        putCStylePT(docu, lastStyle);
1096
                else*/
1097
                        putCStyle(docu, lastStyle);
1098
                docu.writeAttribute("CH", textWithSmartHyphens(item->itemText, lastPos, item->itemText.length()));
1099
        }
1100
        // paragraphstyle for trailing chars
1101
        if (item->itemText.length() == 0 || item->itemText.text(item->itemText.length()-1) != SpecialChars::PARSEP)
1102
        {
1103
                putPStyle(docu, item->itemText.paragraphStyle(item->itemText.length()), "trail");
1104
        }
1105
}
1106
 
1107
void Scribus150Format::WriteObjects(ScribusDoc *doc, ScXmlStreamWriter& docu, const QString& baseDir, QProgressBar *dia2, uint maxC, ItemSelection master, QList<PageItem*> *some_items)
1108
{
1109
        uint ObCount = maxC;
1110
        QList<PageItem*> *items = NULL;
1111
        PageItem *item = NULL;
1112
        uint objects = 0;
1113
        switch (master)
1114
        {
1115
                case ItemSelectionMaster:
1116
                        items = &doc->MasterItems;
1117
                        break;
1118
                case ItemSelectionPage:
1119
                        items = &doc->DocItems;
1120
                        break;
1121
                case ItemSelectionFrame:
1122
                        items = &doc->FrameItems;
1123
                        break;
1124
                case ItemSelectionPattern:
1125
                        items = some_items;
1126
                        break;
1127
                default:
1128
                        assert(false);
1129
        }
1130
        objects = items->count();
1131
        for(uint j = 0; j < objects;++j)
1132
        {
1133
                ObCount++;
1134
                if (dia2 != 0)
1135
                        dia2->setValue(ObCount);
1136
                item = items->at(j);
1137
                switch (master)
1138
                {
1139
                        case ItemSelectionMaster:
1140
//                              item = doc->MasterItems.at(j);
1141
                                docu.writeStartElement("MASTEROBJECT");
1142
                                break;
1143
                        case ItemSelectionPage:
1144
//                              item = doc->DocItems.at(j);
1145
                                docu.writeStartElement("PAGEOBJECT");
1146
                                break;
1147
                        case ItemSelectionFrame:
1148
//                              item = doc->FrameItems.at(j);
1149
                                docu.writeStartElement("FRAMEOBJECT");
1150
                                break;
1151
                        case ItemSelectionPattern:
1152
                                docu.writeStartElement("PatternItem");
1153
                                break;
1154
                }
1155
                SetItemProps(docu, item, baseDir, true);
1156
                docu.writeAttribute("OnMasterPage", item->OnMasterPage);
1157
                docu.writeAttribute("ImageClip", item->pixm.imgInfo.usedPath);
1158
                docu.writeAttribute("ImageRes", item->pixm.imgInfo.lowResType);
1159
                docu.writeAttribute("Pagenumber", item->pixm.imgInfo.actualPageNumber);
1160
                docu.writeAttribute("isInline", static_cast<int>(item->isEmbedded));
1161
                docu.writeAttribute("fillRule", static_cast<int>(item->fillRule));
1162
                docu.writeAttribute("doOverprint", static_cast<int>(item->doOverprint));
1163
                docu.writeAttribute("gXpos", item->gXpos);
1164
                docu.writeAttribute("gYpos", item->gYpos);
1165
                docu.writeAttribute("gWidth", item->gWidth);
1166
                docu.writeAttribute("gHeight", item->gHeight);
1167
                if (item->GrType != 0)
1168
                {
1169
                        if (item->GrType == 8)
1170
                        {
1171
                                docu.writeAttribute("pattern", item->pattern());
1172
                                double patternScaleX, patternScaleY, patternOffsetX, patternOffsetY, patternRotation;
1173
                                item->patternTransform(patternScaleX, patternScaleY, patternOffsetX, patternOffsetY, patternRotation);
1174
                                docu.writeAttribute("pScaleX", patternScaleX);
1175
                                docu.writeAttribute("pScaleY", patternScaleY);
1176
                                docu.writeAttribute("pOffsetX", patternOffsetX);
1177
                                docu.writeAttribute("pOffsetY", patternOffsetY);
1178
                                docu.writeAttribute("pRotation", patternRotation);
1179
                        }
1180
                        else
1181
                        {
1182
                                docu.writeAttribute("GRSTARTX", item->GrStartX);
1183
                                docu.writeAttribute("GRSTARTY", item->GrStartY);
1184
                                docu.writeAttribute("GRENDX", item->GrEndX);
1185
                                docu.writeAttribute("GRENDY", item->GrEndY);
1186
                        }
1187
                }
14168 fschmid 1188
                if (!item->gradient().isEmpty())
1189
                        docu.writeAttribute("GRNAME", item->gradient());
14231 fschmid 1190
                if (!item->strokeGradient().isEmpty())
1191
                        docu.writeAttribute("GRNAMES", item->strokeGradient());
1192
                if (item->GrTypeStroke > 0)
1193
                {
1194
                        docu.writeAttribute("GRSTARTXS", item->GrStrokeStartX);
1195
                        docu.writeAttribute("GRSTARTYS", item->GrStrokeStartY);
1196
                        docu.writeAttribute("GRENDXS", item->GrStrokeEndX);
1197
                        docu.writeAttribute("GRENDYS", item->GrStrokeEndY);
1198
                }
14168 fschmid 1199
                if (!item->strokePattern().isEmpty())
1200
                {
1201
                        docu.writeAttribute("patternS", item->strokePattern());
1202
                        double patternScaleX, patternScaleY, patternOffsetX, patternOffsetY, patternRotation;
1203
                        item->strokePatternTransform(patternScaleX, patternScaleY, patternOffsetX, patternOffsetY, patternRotation);
1204
                        docu.writeAttribute("pScaleXS", patternScaleX);
1205
                        docu.writeAttribute("pScaleYS", patternScaleY);
1206
                        docu.writeAttribute("pOffsetXS", patternOffsetX);
1207
                        docu.writeAttribute("pOffsetYS", patternOffsetY);
1208
                        docu.writeAttribute("pRotationS", patternRotation);
1209
                }
13746 jghali 1210
                if (item->itemText.defaultStyle().hasParent())
1211
                        docu.writeAttribute("PSTYLE", item->itemText.defaultStyle().parent());
1212
                if (! item->itemText.defaultStyle().isInhAlignment())
1213
                        docu.writeAttribute("ALIGN", item->itemText.defaultStyle().alignment());
1214
 
13875 jghali 1215
                docu.writeAttribute("LAYER", item->LayerID);
13746 jghali 1216
                docu.writeAttribute("BOOKMARK", item->isBookmark ? 1 : 0);
1217
 
1218
                if (item->nextInChain() != 0)
1219
                        docu.writeAttribute("NEXTITEM", item->nextInChain()->ItemNr);
1220
                else
1221
                        docu.writeAttribute("NEXTITEM", -1);
1222
 
1223
                if (item->prevInChain() != 0 && items->contains(item->prevInChain()))
1224
                        docu.writeAttribute("BACKITEM", item->prevInChain()->ItemNr);
1225
                else
1226
                {
1227
                        docu.writeAttribute("BACKITEM", -1);
1228
                        writeITEXTs(doc, docu, item);  
1229
                }
1230
 
1231
                if (item->effectsInUse.count() != 0)
1232
                {
1233
                        for (int a = 0; a < item->effectsInUse.count(); ++a)
1234
                        {
1235
                                docu.writeEmptyElement("ImageEffect");
1236
                                docu.writeAttribute("Code", item->effectsInUse.at(a).effectCode);
1237
                                docu.writeAttribute("Param", item->effectsInUse.at(a).effectParameters);
1238
                        }
1239
                }
1240
                if (((item->asImageFrame()) || (item->asTextFrame())) && (!item->Pfile.isEmpty()) && (item->pixm.imgInfo.layerInfo.count() != 0) && (item->pixm.imgInfo.isRequest))
1241
                {
1242
                        QMap<int, ImageLoadRequest>::iterator it2;
1243
                        for (it2 = item->pixm.imgInfo.RequestProps.begin(); it2 != item->pixm.imgInfo.RequestProps.end(); ++it2)
1244
                        {
1245
                                docu.writeEmptyElement("PSDLayer");
1246
                                docu.writeAttribute("Layer",it2.key());
1247
                                docu.writeAttribute("Visible", static_cast<int>(it2.value().visible));
1248
                                docu.writeAttribute("useMask", static_cast<int>(it2.value().useMask));
1249
                                docu.writeAttribute("Opacity", it2.value().opacity);
1250
                                docu.writeAttribute("Blend", it2.value().blend);
1251
                        }
1252
                }
1253
                if (item->itemText.defaultStyle().tabValues().count() != 0)
1254
                {
1255
                        for (int a = 0; a < item->itemText.defaultStyle().tabValues().count(); ++a)
1256
                        {
1257
                                docu.writeEmptyElement("Tabs");
1258
                                docu.writeAttribute("Type", (item->itemText.defaultStyle().tabValues().at(a)).tabType);
1259
                                docu.writeAttribute("Pos", (item->itemText.defaultStyle().tabValues().at(a)).tabPosition);
1260
                                QString tabCh = "";
1261
                                if (!(item->itemText.defaultStyle().tabValues().at(a)).tabFillChar.isNull())
1262
                                        tabCh = QString((item->itemText.defaultStyle().tabValues().at(a)).tabFillChar);
1263
                                docu.writeAttribute("Fill", tabCh);
1264
                        }
1265
                }
14168 fschmid 1266
                if (((item->GrType > 0) && (item->GrType != 8)) && (item->gradient().isEmpty()))
13746 jghali 1267
                {
1268
                        QList<VColorStop*> cstops = item->fill_gradient.colorStops();
1269
                        for (uint cst = 0; cst < item->fill_gradient.Stops(); ++cst)
1270
                        {
1271
                                docu.writeEmptyElement("CSTOP");
1272
                                docu.writeAttribute("RAMP", cstops.at(cst)->rampPoint);
1273
                                docu.writeAttribute("NAME", cstops.at(cst)->name);
1274
                                docu.writeAttribute("SHADE", cstops.at(cst)->shade);
1275
                                docu.writeAttribute("TRANS", cstops.at(cst)->opacity);
1276
                        }
1277
                }
14231 fschmid 1278
                if ((item->GrTypeStroke > 0) && (item->strokeGradient().isEmpty()))
1279
                {
1280
                        QList<VColorStop*> cstops = item->stroke_gradient.colorStops();
1281
                        for (uint cst = 0; cst < item->stroke_gradient.Stops(); ++cst)
1282
                        {
1283
                                docu.writeEmptyElement("S_CSTOP");
1284
                                docu.writeAttribute("RAMP", cstops.at(cst)->rampPoint);
1285
                                docu.writeAttribute("NAME", cstops.at(cst)->name);
1286
                                docu.writeAttribute("SHADE", cstops.at(cst)->shade);
1287
                                docu.writeAttribute("TRANS", cstops.at(cst)->opacity);
1288
                        }
1289
                }
13746 jghali 1290
 
1291
                if (item->asLatexFrame())
1292
                {
1293
                        docu.writeStartElement("LATEX");
1294
                        PageItem_LatexFrame *latexitem = item->asLatexFrame();
1295
                        QFileInfo fi(latexitem->configFile());
1296
                        docu.writeAttribute("ConfigFile", fi.fileName());
1297
                        docu.writeAttribute("DPI", latexitem->dpi());
1298
                        docu.writeAttribute("USE_PREAMBLE", latexitem->usePreamble());
1299
                        QMapIterator<QString, QString> i(latexitem->editorProperties);
1300
                        while (i.hasNext())
1301
                        {
1302
                                i.next();
1303
                                docu.writeStartElement("PROPERTY");
1304
                                docu.writeAttribute("name", i.key());
1305
                                docu.writeAttribute("value", i.value());
1306
                                docu.writeEndElement();
1307
                        }
1308
                        docu.writeCharacters(latexitem->formula());
1309
                        docu.writeEndElement();
1310
                        /*QDomText latextext = docu->createTextNode(latexitem->formula());
1311
                        latexinfo.appendChild(latextext);
1312
                        ob.appendChild(latexinfo);*/
1313
                }
13839 fschmid 1314
#ifdef HAVE_OSG
1315
                if (item->asOSGFrame())
1316
                {
1317
                        PageItem_OSGFrame *osgitem = item->asOSGFrame();
1318
                        if (!item->Pfile.isEmpty())
1319
                        {
1320
                                QHash<QString, PageItem_OSGFrame::viewDefinition>::iterator itv;
1321
                                for (itv = osgitem->viewMap.begin(); itv != osgitem->viewMap.end(); ++itv)
1322
                                {
1323
                                        QString tmp;
1324
                                        docu.writeStartElement("OSGViews");
1325
                                        docu.writeAttribute("viewName", itv.key());
1326
                                        docu.writeAttribute("angleFOV", itv.value().angleFOV);
1327
                                        QString trackM = "";
1328
                                        for (uint matx = 0; matx < 4; ++matx)
1329
                                        {
1330
                                                for (uint maty = 0; maty < 4; ++maty)
1331
                                                {
1332
                                                        trackM += tmp.setNum(itv.value().trackerMatrix(matx, maty))+" ";
1333
                                                }
1334
                                        }
1335
                                        docu.writeAttribute("trackM", trackM);
1336
                                        QString trackC = "";
1337
                                        trackC += tmp.setNum(itv.value().trackerCenter[0])+" ";
1338
                                        trackC += tmp.setNum(itv.value().trackerCenter[1])+" ";
1339
                                        trackC += tmp.setNum(itv.value().trackerCenter[2]);
1340
                                        docu.writeAttribute("trackC", trackC);
1341
                                        QString cameraP = "";
1342
                                        cameraP += tmp.setNum(itv.value().cameraPosition[0])+" ";
1343
                                        cameraP += tmp.setNum(itv.value().cameraPosition[1])+" ";
1344
                                        cameraP += tmp.setNum(itv.value().cameraPosition[2]);
1345
                                        docu.writeAttribute("cameraP", cameraP);
1346
                                        QString cameraU = "";
1347
                                        cameraU += tmp.setNum(itv.value().cameraUp[0])+" ";
1348
                                        cameraU += tmp.setNum(itv.value().cameraUp[1])+" ";
1349
                                        cameraU += tmp.setNum(itv.value().cameraUp[2]);
1350
                                        docu.writeAttribute("cameraU", cameraU);
1351
                                        docu.writeAttribute("trackerDist", itv.value().trackerDist);
1352
                                        docu.writeAttribute("trackerSize", itv.value().trackerSize);
1353
                                        docu.writeAttribute("illumination", itv.value().illumination);
1354
                                        docu.writeAttribute("rendermode", itv.value().rendermode);
13874 fschmid 1355
                                        docu.writeAttribute("trans", itv.value().addedTransparency);
1356
                                        docu.writeAttribute("colorAC", itv.value().colorAC.name());
1357
                                        docu.writeAttribute("colorFC", itv.value().colorFC.name());
13839 fschmid 1358
                                        docu.writeEndElement();
1359
                                }
1360
                        }
1361
                }
1362
#endif
13746 jghali 1363
 
1364
                //CB PageItemAttributes
1365
                docu.writeStartElement("PageItemAttributes");
1366
                ObjAttrVector *attributes=item->getObjectAttributes();
1367
                for(ObjAttrVector::Iterator objAttrIt = attributes->begin() ; objAttrIt != attributes->end(); ++objAttrIt )
1368
                {
1369
                        docu.writeEmptyElement("ItemAttribute");
1370
                        docu.writeAttribute("Name", (*objAttrIt).name);
1371
                        docu.writeAttribute("Type", (*objAttrIt).type);
1372
                        docu.writeAttribute("Value", (*objAttrIt).value);
1373
                        docu.writeAttribute("Parameter", (*objAttrIt).parameter);
1374
                        docu.writeAttribute("Relationship", (*objAttrIt).relationship);
1375
                        docu.writeAttribute("RelationshipTo", (*objAttrIt).relationshipto);
1376
                        docu.writeAttribute("AutoAddTo", (*objAttrIt).autoaddto);
1377
                }
1378
                docu.writeEndElement();
1379
 
1380
                docu.writeEndElement();
1381
        }
1382
}
1383
 
1384
void Scribus150Format::SetItemProps(ScXmlStreamWriter& docu, PageItem* item, const QString& baseDir, bool newFormat)
1385
{
1386
        double xf, yf;
1387
        QString tmp, tmpy;
1388
        if (newFormat)
1389
                docu.writeAttribute("OwnPage", item->OwnPage);
1390
        docu.writeAttribute("PTYPE",item->realItemType());
1391
        docu.writeAttribute("XPOS",item->xPos());
1392
        docu.writeAttribute("YPOS",item->yPos());
1393
        docu.writeAttribute("WIDTH",item->width());
1394
        docu.writeAttribute("HEIGHT",item->height());
1395
        docu.writeAttribute("RADRECT",item->cornerRadius());
1396
        docu.writeAttribute("FRTYPE", item->FrameType);
1397
        docu.writeAttribute("CLIPEDIT", item->ClipEdited ? 1 : 0);
1398
        docu.writeAttribute("PWIDTH",item->lineWidth());
1399
        docu.writeAttribute("PCOLOR",item->fillColor());
1400
        docu.writeAttribute("PCOLOR2",item->lineColor());
1401
        if ( ! item->itemText.defaultStyle().charStyle().isInhFillColor())
1402
                docu.writeAttribute("TXTFILL",item->itemText.defaultStyle().charStyle().fillColor());
1403
        if ( ! item->itemText.defaultStyle().charStyle().isInhStrokeColor())
1404
                docu.writeAttribute("TXTSTROKE",item->itemText.defaultStyle().charStyle().strokeColor());
1405
        if ( ! item->itemText.defaultStyle().charStyle().isInhStrokeShade())
1406
                docu.writeAttribute("TXTSTRSH",item->itemText.defaultStyle().charStyle().strokeShade());
1407
        if ( ! item->itemText.defaultStyle().charStyle().isInhFillShade())
1408
                docu.writeAttribute("TXTFILLSH",item->itemText.defaultStyle().charStyle().fillShade());
1409
        if ( ! item->itemText.defaultStyle().charStyle().isInhScaleH())
1410
                docu.writeAttribute("TXTSCALE",item->itemText.defaultStyle().charStyle().scaleH() / 10.0);
1411
        if ( ! item->itemText.defaultStyle().charStyle().isInhScaleV())
1412
                docu.writeAttribute("TXTSCALEV",item->itemText.defaultStyle().charStyle().scaleV() / 10.0);
1413
        if ( ! item->itemText.defaultStyle().charStyle().isInhBaselineOffset())
1414
                docu.writeAttribute("TXTBASE",item->itemText.defaultStyle().charStyle().baselineOffset() / 10.0);
1415
        if ( ! item->itemText.defaultStyle().charStyle().isInhShadowXOffset())
1416
                docu.writeAttribute("TXTSHX",item->itemText.defaultStyle().charStyle().shadowXOffset() / 10.0);
1417
        if ( ! item->itemText.defaultStyle().charStyle().isInhShadowYOffset())
1418
                docu.writeAttribute("TXTSHY",item->itemText.defaultStyle().charStyle().shadowYOffset() / 10.0);
1419
        if ( ! item->itemText.defaultStyle().charStyle().isInhOutlineWidth())
1420
                docu.writeAttribute("TXTOUT",item->itemText.defaultStyle().charStyle().outlineWidth() / 10.0);
1421
        if ( ! item->itemText.defaultStyle().charStyle().isInhUnderlineOffset())
1422
                docu.writeAttribute("TXTULP",item->itemText.defaultStyle().charStyle().underlineOffset() / 10.0);
1423
        if ( ! item->itemText.defaultStyle().charStyle().isInhUnderlineWidth())
1424
                docu.writeAttribute("TXTULW",item->itemText.defaultStyle().charStyle().underlineWidth() / 10.0);
1425
        if ( ! item->itemText.defaultStyle().charStyle().isInhStrikethruOffset())
1426
                docu.writeAttribute("TXTSTP",item->itemText.defaultStyle().charStyle().strikethruOffset() / 10.0);
1427
        if ( ! item->itemText.defaultStyle().charStyle().isInhStrikethruWidth())
1428
                docu.writeAttribute("TXTSTW",item->itemText.defaultStyle().charStyle().strikethruWidth() / 10.0);
1429
        if ( ! item->itemText.defaultStyle().charStyle().isInhTracking())
1430
                docu.writeAttribute("TXTKERN",item->itemText.defaultStyle().charStyle().tracking() / 10.0);
1431
        if ( ! item->itemText.defaultStyle().charStyle().isInhWordTracking())
1432
                docu.writeAttribute("wordTrack",item->itemText.defaultStyle().charStyle().wordTracking());
1433
        if ( ! item->itemText.defaultStyle().isInhMinWordTracking())
1434
                docu.writeAttribute("MinWordTrack", item->itemText.defaultStyle().minWordTracking());
1435
        if ( ! item->itemText.defaultStyle().isInhMinGlyphExtension())
1436
                docu.writeAttribute("MinGlyphShrink", item->itemText.defaultStyle().minGlyphExtension());
1437
        if ( ! item->itemText.defaultStyle().isInhMaxGlyphExtension())
1438
                docu.writeAttribute("MaxGlyphExtend", item->itemText.defaultStyle().maxGlyphExtension());
1439
        if ( ! item->itemText.defaultStyle().isInhOpticalMargins())
1440
                docu.writeAttribute("OpticalMargins", item->itemText.defaultStyle().opticalMargins());
1441
        if ( ! item->itemText.defaultStyle().isInhHyphenationMode())
1442
                docu.writeAttribute("HyphenationMode", item->itemText.defaultStyle().hyphenationMode());
1443
        if ( ! item->itemText.defaultStyle().isInhLeftMargin() )
1444
                docu.writeAttribute("leftMargin", item->itemText.defaultStyle().leftMargin());
1445
        if ( ! item->itemText.defaultStyle().isInhRightMargin())
1446
                docu.writeAttribute("rightMargin", item->itemText.defaultStyle().rightMargin());
1447
        if ( ! item->itemText.defaultStyle().isInhFirstIndent())
1448
                docu.writeAttribute("firstIndent", item->itemText.defaultStyle().firstIndent());
1449
        docu.writeAttribute("COLUMNS", item->columns());
1450
        docu.writeAttribute("COLGAP", item->columnGap());
1451
        docu.writeAttribute("NAMEDLST",item->NamedLStyle);
1452
        docu.writeAttribute("SHADE",item->fillShade());
1453
        docu.writeAttribute("SHADE2",item->lineShade());
1454
        docu.writeAttribute("GRTYP",item->GrType);
14231 fschmid 1455
        docu.writeAttribute("GRTYPS",item->GrTypeStroke);
13746 jghali 1456
        docu.writeAttribute("ROT",item->rotation());
1457
        docu.writeAttribute("PLINEART",item->PLineArt);
1458
        docu.writeAttribute("PLINEEND", item->PLineEnd);
1459
        docu.writeAttribute("PLINEJOIN", item->PLineJoin);
1460
        if ( ! item->itemText.defaultStyle().isInhLineSpacing())
1461
                docu.writeAttribute("LINESP",item->itemText.defaultStyle().lineSpacing());
1462
        if ( ! item->itemText.defaultStyle().isInhLineSpacingMode())
1463
                docu.writeAttribute("LINESPMode", item->itemText.defaultStyle().lineSpacingMode());
1464
        docu.writeAttribute("LOCALSCX",item->imageXScale());
1465
        docu.writeAttribute("LOCALSCY",item->imageYScale());
1466
        docu.writeAttribute("LOCALX",item->imageXOffset());
1467
        docu.writeAttribute("LOCALY",item->imageYOffset());
1468
        docu.writeAttribute("PICART", item->imageShown() ? 1 : 0);
1469
        docu.writeAttribute("PLTSHOW", item->PoShow ? 1 : 0);
1470
        docu.writeAttribute("BASEOF", item->BaseOffs);
1471
        docu.writeAttribute("textPathType", item->textPathType);
1472
        docu.writeAttribute("textPathFlipped", static_cast<int>(item->textPathFlipped));
1473
        docu.writeAttribute("FLIPPEDH", item->imageFlippedH());
1474
        docu.writeAttribute("FLIPPEDV", item->imageFlippedV());
1475
/*      docu.writeAttribute("BBOXX",item->BBoxX);
1476
        docu.writeAttribute("BBOXH",item->BBoxH); */
1477
        if ( ! item->itemText.defaultStyle().charStyle().isInhFont())
1478
                docu.writeAttribute("IFONT",item->itemText.defaultStyle().charStyle().font().scName());
1479
        if ( ! item->itemText.defaultStyle().charStyle().isInhFontSize())
1480
                docu.writeAttribute("ISIZE",item->itemText.defaultStyle().charStyle().fontSize() / 10.0 );
1481
        docu.writeAttribute("SCALETYPE", item->ScaleType ? 1 : 0);
1482
        docu.writeAttribute("RATIO", item->AspectRatio ? 1 : 0);
1483
        docu.writeAttribute("PRINTABLE", item->printEnabled() ? 1 : 0);
1484
        if(item->isAnnotation())
1485
        {
1486
                docu.writeAttribute("ANNOTATION",1);
1487
                docu.writeAttribute("ANTYPE", item->annotation().Type());
1488
                docu.writeAttribute("ANACTION", item->annotation().Action());
1489
                docu.writeAttribute("ANEACT", item->annotation().E_act());
1490
                docu.writeAttribute("ANXACT", item->annotation().X_act());
1491
                docu.writeAttribute("ANDACT", item->annotation().D_act());
1492
                docu.writeAttribute("ANFOACT", item->annotation().Fo_act());
1493
                docu.writeAttribute("ANBLACT", item->annotation().Bl_act());
1494
                docu.writeAttribute("ANKACT", item->annotation().K_act());
1495
                docu.writeAttribute("ANFACT", item->annotation().F_act());
1496
                docu.writeAttribute("ANVACT", item->annotation().V_act());
1497
                docu.writeAttribute("ANCACT", item->annotation().C_act());
1498
                if (item->annotation().ActionType() == 8)
1499
                        docu.writeAttribute("ANEXTERN", item->annotation().Extern());
1500
                else
1501
                        docu.writeAttribute("ANEXTERN", Path2Relative(item->annotation().Extern(), baseDir));
1502
                docu.writeAttribute("ANZIEL", item->annotation().Ziel());
1503
                docu.writeAttribute("ANACTYP", item->annotation().ActionType());
1504
                docu.writeAttribute("ANTOOLTIP", item->annotation().ToolTip());
1505
                docu.writeAttribute("ANBWID", item->annotation().Bwid());
1506
                docu.writeAttribute("ANBSTY", item->annotation().Bsty());
1507
                docu.writeAttribute("ANFEED", item->annotation().Feed());
1508
                docu.writeAttribute("ANFLAG", item->annotation().Flag());
1509
                docu.writeAttribute("ANFONT", item->annotation().Font());
1510
                docu.writeAttribute("ANFORMAT", item->annotation().Format());
1511
                docu.writeAttribute("ANROLL", item->annotation().RollOver());
1512
                docu.writeAttribute("ANDOWN", item->annotation().Down());
1513
                docu.writeAttribute("ANVIS", item->annotation().Vis());
1514
                docu.writeAttribute("ANMC", item->annotation().MaxChar());
1515
                docu.writeAttribute("ANCHK", item->annotation().IsChk());
1516
                docu.writeAttribute("ANAA", item->annotation().AAact());
1517
                docu.writeAttribute("ANCHKS", item->annotation().ChkStil());
1518
                docu.writeAttribute("ANBCOL", item->annotation().borderColor());
1519
                docu.writeAttribute("ANHTML", item->annotation().HTML());
1520
                docu.writeAttribute("ANICON", item->annotation().UseIcons());
1521
                docu.writeAttribute("ANPLACE", item->annotation().IPlace());
1522
                docu.writeAttribute("ANSCALE", item->annotation().ScaleW());
1523
        }
1524
        else
1525
                docu.writeAttribute("ANNOTATION",0);
1526
        docu.writeAttribute("ANNAME", !item->AutoName ? item->itemName() : QString(""));
1527
        // "TEXTFLOWMODE" succeed to "TEXTFLOW" "TEXTFLOW2" and "TEXTFLOW3" attributes
1528
        docu.writeAttribute("TEXTFLOWMODE", (int) item->textFlowMode() );
1529
        // Set "TEXTFLOW" "TEXTFLOW2" and "TEXTFLOW3" attributes for compatibility
1530
        // with versions prior to 1.3.4
1531
        docu.writeAttribute("TEXTFLOW" , item->textFlowAroundObject() ? 1 : 0);
1532
        docu.writeAttribute("TEXTFLOW2", item->textFlowUsesBoundingBox() ? 1 : 0);
1533
        docu.writeAttribute("TEXTFLOW3", item->textFlowUsesContourLine() ? 1 : 0);
1534
        docu.writeAttribute("AUTOTEXT", item->isAutoText ? 1 : 0);
1535
        docu.writeAttribute("EXTRA",item->textToFrameDistLeft());
1536
        docu.writeAttribute("TEXTRA",item->textToFrameDistTop());
1537
        docu.writeAttribute("BEXTRA",item->textToFrameDistBottom());
1538
        docu.writeAttribute("REXTRA",item->textToFrameDistRight());
1539
        docu.writeAttribute("FLOP",item->firstLineOffset()); // here I think this FLOP "cher à mon cœur" is legitimate!
13839 fschmid 1540
#ifdef HAVE_OSG
1541
        if (((item->asImageFrame() && !(item->asLatexFrame() || item->asOSGFrame())) || (item->asTextFrame())) && (!item->Pfile.isEmpty()))
1542
#else
1543
        if (((item->asImageFrame() && !(item->asLatexFrame())) || (item->asTextFrame())) && (!item->Pfile.isEmpty()))
1544
#endif
13746 jghali 1545
        {
1546
                if (item->isInlineImage)
1547
                {
1548
                        docu.writeAttribute("PFILE", "");
1549
                        docu.writeAttribute("isInlineImage", static_cast<int>(item->isInlineImage));
1550
                        QFileInfo inlFi(item->Pfile);
1551
                        docu.writeAttribute("inlineImageExt", inlFi.suffix());
1552
                        QFile inFil(item->Pfile);
1553
                        if (inFil.open(QIODevice::ReadOnly))
1554
                        {
1555
                                QByteArray ba = qCompress(inFil.readAll()).toBase64();
1556
                                docu.writeAttribute("ImageData", QString(ba));
1557
                                inFil.close();
1558
                        }
1559
                }
1560
                else
1561
                        docu.writeAttribute("PFILE",Path2Relative(item->Pfile, baseDir));
1562
        }
13839 fschmid 1563
#ifdef HAVE_OSG
1564
        else if (item->asOSGFrame())
1565
        {
1566
                if (!item->Pfile.isEmpty())
1567
                {
1568
                        docu.writeAttribute("PFILE", "");
1569
                        docu.writeAttribute("isInlineImage", static_cast<int>(item->isInlineImage));
1570
                        QFileInfo inlFi(item->Pfile);
1571
                        docu.writeAttribute("inlineImageExt", inlFi.suffix());
1572
                        QFile inFil(item->Pfile);
1573
                        if (inFil.open(QIODevice::ReadOnly))
1574
                        {
1575
                                QByteArray ba = qCompress(inFil.readAll()).toBase64();
1576
                                docu.writeAttribute("ImageData", QString(ba));
1577
                                inFil.close();
1578
                        }
1579
                        PageItem_OSGFrame *osgframe = item->asOSGFrame();
1580
                        docu.writeAttribute("modelFile", Path2Relative(osgframe->modelFile, baseDir));
1581
                        docu.writeAttribute("currentViewName", osgframe->currentView);
1582
                }
1583
        }
1584
#endif
13746 jghali 1585
        else
1586
                docu.writeAttribute("PFILE","");
1587
        if (!item->Pfile2.isEmpty())
1588
                docu.writeAttribute("PFILE2",Path2Relative(item->Pfile2, baseDir));
1589
        else
1590
                docu.writeAttribute("PFILE2","");
1591
        if (!item->Pfile3.isEmpty())
1592
                docu.writeAttribute("PFILE3",Path2Relative(item->Pfile3, baseDir));
1593
        else
1594
                docu.writeAttribute("PFILE3","");
1595
        docu.writeAttribute("PRFILE",item->IProfile);
1596
        docu.writeAttribute("EPROF", item->EmProfile);
1597
        docu.writeAttribute("IRENDER",item->IRender);
1598
        docu.writeAttribute("EMBEDDED", item->UseEmbedded ? 1 : 0);
1599
        docu.writeAttribute("LOCK", item->locked() ? 1 : 0);
1600
        docu.writeAttribute("LOCKR", item->sizeLocked() ? 1 : 0);
1601
        docu.writeAttribute("REVERS", item->reversed() ? 1 : 0);
1602
        docu.writeAttribute("TransValue", item->fillTransparency());
1603
        docu.writeAttribute("TransValueS", item->lineTransparency());
1604
        docu.writeAttribute("TransBlend", item->fillBlendmode());
1605
        docu.writeAttribute("TransBlendS", item->lineBlendmode());
1606
        docu.writeAttribute("isTableItem", static_cast<int>(item->isTableItem));
1607
        docu.writeAttribute("TopLine", static_cast<int>(item->TopLine));
1608
        docu.writeAttribute("LeftLine", static_cast<int>(item->LeftLine));
1609
        docu.writeAttribute("RightLine", static_cast<int>(item->RightLine));
1610
        docu.writeAttribute("BottomLine", static_cast<int>(item->BottomLine));
1611
        if (item->isTableItem)
1612
        {
1613
                if (item->TopLink != 0)
1614
                        docu.writeAttribute("TopLINK", item->TopLink->ItemNr);
1615
                else
1616
                        docu.writeAttribute("TopLINK", -1);
1617
                if (item->LeftLink != 0)
1618
                        docu.writeAttribute("LeftLINK", item->LeftLink->ItemNr);
1619
                else
1620
                        docu.writeAttribute("LeftLINK", -1);
1621
                if (item->RightLink != 0)
1622
                        docu.writeAttribute("RightLINK", item->RightLink->ItemNr);
1623
                else
1624
                        docu.writeAttribute("RightLINK", -1);
1625
                if (item->BottomLink != 0)
1626
                        docu.writeAttribute("BottomLINK", item->BottomLink->ItemNr);
1627
                else
1628
                        docu.writeAttribute("BottomLINK", -1);
1629
                docu.writeAttribute("OwnLINK", item->ItemNr);
1630
        }
1631
        docu.writeAttribute("isGroupControl", static_cast<int>(item->isGroupControl));
1632
        if (item->isGroupControl)
1633
        {
1634
                if (item->groupsLastItem != 0)
1635
                        docu.writeAttribute("groupsLastItem", item->groupsLastItem->ItemNr - item->ItemNr);
1636
        }
1637
        docu.writeAttribute("NUMDASH", static_cast<int>(item->DashValues.count()));
1638
        QString dlp = "";
1639
        QVector<double>::Iterator dax;
1640
        for (dax = item->DashValues.begin(); dax != item->DashValues.end(); ++dax)
1641
                dlp += tmp.setNum((*dax)) + " ";
1642
        docu.writeAttribute("DASHS", dlp);
1643
        docu.writeAttribute("DASHOFF", item->DashOffset);
1644
        docu.writeAttribute("NUMPO",item->PoLine.size());
1645
        QString polp = "";
1646
        for (uint nxx=0; nxx<item->PoLine.size(); ++nxx)
1647
        {
1648
                item->PoLine.point(nxx, &xf, &yf);
1649
                polp += tmp.setNum(xf) + " " + tmpy.setNum(yf) + " ";
1650
        }
1651
        docu.writeAttribute("POCOOR", polp);
1652
        docu.writeAttribute("NUMCO",item->ContourLine.size());
1653
        QString colp = "";
1654
        for (uint nxx=0; nxx<item->ContourLine.size(); ++nxx)
1655
        {
1656
                item->ContourLine.point(nxx, &xf, &yf);
1657
                colp += tmp.setNum(xf) + " " + tmpy.setNum(yf) + " ";
1658
        }
1659
        docu.writeAttribute("COCOOR", colp);
1660
        docu.writeAttribute("NUMGROUP", static_cast<int>(item->Groups.count()));
1661
        QString glp = "";
1662
        QStack<int>::Iterator nx;
1663
        for (nx = item->Groups.begin(); nx != item->Groups.end(); ++nx)
1664
                glp += tmp.setNum((*nx)) + " ";
1665
        docu.writeAttribute("GROUPS", glp);
1666
        if ( ! item->itemText.defaultStyle().charStyle().isInhLanguage())
1667
                docu.writeAttribute("LANGUAGE", item->itemText.defaultStyle().charStyle().language());
1668
        docu.writeAttribute("startArrowIndex", item->startArrowIndex());
1669
        docu.writeAttribute("endArrowIndex", item->endArrowIndex());
1670
}