Subversion Repositories Scribus

Rev

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