Subversion Repositories Scribus

Rev

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

Rev Author Line No. Line
1525 cbradney 1
#include <qdom.h>
2
#include <qprogressbar.h>
506 fschmid 3
#include <qfile.h>
4
#include <qfileinfo.h>
517 fschmid 5
#include <qtl.h>
6
#include <qcursor.h>
7
#include <qregexp.h>
8
#include <qdir.h>
9
#include <qtextcodec.h>
1525 cbradney 10
#include <qcheckbox.h>
517 fschmid 11
#include <cstdlib>
12
#include <cmath>
13
#include <qtextstream.h>
838 cbradney 14
#include "fileloader.h"
506 fschmid 15
#include "scribus.h"
16
#include "scribusXml.h"
517 fschmid 17
#include "missing.h"
1428 fschmid 18
#include "fontreplacedialog.h"
1525 cbradney 19
#include "units.h"
1549 subik 20
#include "pluginmanager.h"
617 cbradney 21
#ifdef _MSC_VER
22
 #if (_MSC_VER >= 1200)
23
  #include "win-config.h"
24
 #endif
506 fschmid 25
#else
617 cbradney 26
 #include "config.h"
506 fschmid 27
#endif
28
#ifdef HAVE_LIBZ
29
        #include <zlib.h>
30
#endif
31
extern bool loadText(QString nam, QString *Buffer);
517 fschmid 32
extern double QStodouble(QString in);
33
extern int QStoInt(QString in);
690 cbradney 34
extern QColor SetColor(ScribusDoc *currentDoc, QString color, int shad);
1779 fschmid 35
extern QPointArray FlattenPath(FPointArray ina, QValueList<uint> &Segs);
506 fschmid 36
 
37
/*!
1227 cbradney 38
 \fn FileLoader::FileLoader(QString fileName, ScribusApp* app)
506 fschmid 39
 \author Franz Schmid
40
 \date
41
 \brief Constructor, sets the variable "FileName" to the input parameter fileName
42
 \param QString fileName
43
 \retval None
44
 */
516 fschmid 45
FileLoader::FileLoader(QString fileName, ScribusApp* app)
506 fschmid 46
{
47
        FileName = fileName;
48
        FileType = -1;
1549 subik 49
        havePS = app->pluginManager->DLLexists(6);
50
        haveSVG = app->pluginManager->DLLexists(10);
51
        haveSXD = app->pluginManager->DLLexists(12);
506 fschmid 52
}
53
 
54
/*!
55
 \fn int FileLoader::TestFile()
56
 \author Franz Schmid
57
 \date
58
 \brief Tests if the file "FileName" exists and determines the type of the file.
59
 \param None
60
 \retval int -1 if the file doesn't exist or any other error has occured, 0 for the old Format, 1 for the new Format, 2 for EPS and PS files, 3 for SVG files and 4 for PDF files
61
 */
62
int FileLoader::TestFile()
63
{
64
        QFileInfo fi = QFileInfo(FileName);
65
        int ret = -1;
66
        if (!fi.exists())
67
                ret = -1;
68
        QString ext = fi.extension(true).lower();
550 fschmid 69
        if ((ext.endsWith("sla.gz")) || (ext.endsWith("sla")) || (ext.endsWith("scd.gz")) || (ext.endsWith("scd")))
506 fschmid 70
                ret = CheckScribus();
550 fschmid 71
        else if (((ext.endsWith("ps")) || (ext.endsWith("eps"))) && (havePS))
506 fschmid 72
                ret = 2;
550 fschmid 73
        else if (((ext.endsWith("svg")) || (ext.endsWith("svgz"))) && (haveSVG))
506 fschmid 74
                ret = 3;
550 fschmid 75
        else if ((ext.endsWith("sxd")) && (haveSXD))
541 fschmid 76
                ret = 5;
506 fschmid 77
/*      if (ext == "pdf")
78
                ret = 4; */
79
        FileType = ret;
80
        return ret;
81
}
82
 
83
/*!
84
 \fn int FileLoader::CheckScribus()
85
 \author Franz Schmid
86
 \date
87
 \brief Checks which Scribus fileformat the File in FileName has.
88
 \param None
89
 \retval 0 for old Scribus files, 1 for Scribus files created by Scribus 1.3 and above
90
 */
91
int FileLoader::CheckScribus()
92
{
93
        int ret = -1;
94
        QString fText = ReadDatei(FileName);
95
        if (fText == "")
96
                return ret;
517 fschmid 97
        if ((fText.startsWith("<SCRIBUSUTF8NEW")) && (fText.contains("<PAGE ", TRUE) != 0))
98
                return 1;
506 fschmid 99
        if ((fText.startsWith("<SCRIBUS")) && (fText.contains("<PAGE ", TRUE) != 0))
100
                return 0;
101
        return ret;
102
}
103
 
104
/*!
105
 \fn QString FileLoader::ReadDatei(QString fileName)
106
 \author Franz Schmid
107
 \date
108
 \brief Auxiliary function loads the file "fileName" into a QString and does conversion from UTF8 if required
109
 \param QString fileName
110
 \retval QString Contents of the file, converted from UTF8
111
 */
112
QString FileLoader::ReadDatei(QString fileName)
113
{
114
/**
115
  * added to support gz docs
116
  * 2.7.2002 C.Toepp
117
  * <c.toepp@gmx.de>
118
  */
119
        QString f = "";
120
#ifdef HAVE_LIBZ
121
        if(fileName.right(2) == "gz")
122
        {
123
                gzFile gzDoc;
124
                char buff[4097];
125
                int i;
126
                gzDoc = gzopen(fileName.latin1(),"rb");
127
                if(gzDoc == NULL)
128
                        return "";
129
                while((i = gzread(gzDoc,&buff,4096)) > 0)
130
                {
131
                        buff[i] = '\0';
132
                        f.append(buff);
133
                }
134
                gzclose(gzDoc);
135
        }
136
        else
137
                loadText(fileName, &f);
138
#else
139
        loadText(fileName, &f);
140
#endif
141
        QString ff = "";
142
        if (f.startsWith("<SCRIBUSUTF8"))
143
                ff = QString::fromUtf8(f);
144
        else if (f.startsWith("<SCRIBUS"))
145
                ff = f;
1874 fschmid 146
        if (ff.endsWith(QChar(10)) || ff.endsWith(QChar(13)))
147
                ff.truncate(ff.length()-1);
506 fschmid 148
        return ff;
149
/** end changes */
150
}
151
 
152
/*!
153
 \fn bool FileLoader::LoadFile(ScribusApp* app)
154
 \author Franz Schmid
155
 \date
156
 \brief Loads the file "FileName" as a Scribus document
157
 \param ScribusApp* app, pointer to the main application class
158
 \retval bool true when loading is succsessful, false otherwise
159
 */
160
bool FileLoader::LoadFile(ScribusApp* app)
161
{
162
        bool ret = false;
1468 fschmid 163
        newReplacement = false;
879 fschmid 164
        app->doc->guidesSettings.marginsShown = app->Prefs.guidesSettings.marginsShown;
165
        app->doc->guidesSettings.framesShown = app->Prefs.guidesSettings.framesShown;
166
        app->doc->guidesSettings.gridShown = app->Prefs.guidesSettings.gridShown;
167
        app->doc->guidesSettings.guidesShown = app->Prefs.guidesSettings.guidesShown;
168
        app->doc->guidesSettings.baseShown = app->Prefs.guidesSettings.baseShown;
169
        app->doc->guidesSettings.linkShown = app->Prefs.guidesSettings.linkShown;
1194 fschmid 170
        app->doc->toolSettings.polyC = app->Prefs.toolSettings.polyC;
171
        app->doc->toolSettings.polyF = app->Prefs.toolSettings.polyF;
172
        app->doc->toolSettings.polyR = app->Prefs.toolSettings.polyR;
173
        app->doc->toolSettings.polyFd = app->Prefs.toolSettings.polyFd;
174
        app->doc->toolSettings.polyS = app->Prefs.toolSettings.polyS;
734 fschmid 175
        app->doc->AutoSave = app->Prefs.AutoSave;
176
        app->doc->AutoSaveTime = app->Prefs.AutoSaveTime;
1428 fschmid 177
        ReplacedFonts.clear();
1789 fschmid 178
        dummyFois.clear();
179
        dummyFois.setAutoDelete(true);
506 fschmid 180
        switch (FileType)
181
        {
182
                case 0:
183
                        {
184
                                ScriXmlDoc *ss = new ScriXmlDoc();
185
                                QObject::connect(ss, SIGNAL(NewPage(int)), app, SLOT(slotNewPage(int)));
1166 fschmid 186
                                ss->ReplacedFonts.clear();
1468 fschmid 187
                                ss->newReplacement = false;
1789 fschmid 188
                                ss->dummyFois.clear();
506 fschmid 189
                                ret = ss->ReadDoc(FileName, app->Prefs.AvailFonts, app->doc, app->view, app->FProg);
190
                                QObject::disconnect(ss, SIGNAL(NewPage(int)), app, SLOT(slotNewPage(int)));
1166 fschmid 191
                                ReplacedFonts = ss->ReplacedFonts;
1468 fschmid 192
                                newReplacement = ss->newReplacement;
1789 fschmid 193
                                dummyFois = ss->dummyFois;
506 fschmid 194
                                delete ss;
195
                        }
196
                        break;
517 fschmid 197
                case 1:
198
                        ret = ReadDoc(app, FileName, app->Prefs.AvailFonts, app->doc, app->view, app->FProg);
199
                        break;
506 fschmid 200
                case 2:
1549 subik 201
                        app->pluginManager->dllInput = FileName;
202
                        app->pluginManager->callDLL( 6 );
506 fschmid 203
                        ret = true;
204
                        break;
205
                case 3:
1549 subik 206
                        app->pluginManager->dllInput = FileName;
207
                        app->pluginManager->callDLL( 10 );
506 fschmid 208
                        ret = true;
209
                        break;
541 fschmid 210
                case 5:
1549 subik 211
                        app->pluginManager->dllInput = FileName;
212
                        app->pluginManager->callDLL( 12 );
541 fschmid 213
                        ret = true;
214
                        break;
506 fschmid 215
                default:
216
                        ret = false;
217
                        break;
218
        }
1789 fschmid 219
        if (ReplacedFonts.count() != 0)
1428 fschmid 220
        {
1789 fschmid 221
                if ((app->Prefs.askBeforeSubstituite) || (newReplacement))
222
                {
223
                        qApp->setOverrideCursor(QCursor(Qt::arrowCursor), true);
224
                        FontReplaceDialog *dia = new FontReplaceDialog(0, &app->Prefs, &ReplacedFonts);
225
                        dia->exec();
226
                        QMap<QString,QString>::Iterator itfsu;
227
                        for (itfsu = ReplacedFonts.begin(); itfsu != ReplacedFonts.end(); ++itfsu)
228
                        {
229
                                if (dia->stickyReplacements->isChecked())
230
                                        app->Prefs.GFontSub[itfsu.key()] = itfsu.data();
231
                        }
232
                        delete dia;
233
                }
1428 fschmid 234
                for (uint d = 0; d < app->doc->MasterItems.count(); ++d)
235
                {
236
                        PageItem *it = app->doc->MasterItems.at(d);
237
                        if ((!app->doc->UsedFonts.contains(it->IFont)) && (it->IFont != ""))
238
                                it->IFont = ReplacedFonts[it->IFont];
1460 cbradney 239
                        if ((it->itemType() == PageItem::TextFrame) || (it->itemType() == PageItem::PathText))
1428 fschmid 240
                        {
241
                                for (uint e = 0; e < it->itemText.count(); ++e)
242
                                {
1789 fschmid 243
                                if (!app->doc->UsedFonts.contains(it->itemText.at(e)->cfont->SCName))
244
                                        it->itemText.at(e)->cfont = (*app->doc->AllFonts)[ReplacedFonts[it->itemText.at(e)->cfont->SCName]];
1428 fschmid 245
                                }
246
                        }
247
                }
248
                for (uint d = 0; d < app->doc->DocItems.count(); ++d)
249
                {
250
                        PageItem *it = app->doc->DocItems.at(d);
251
                        if ((!app->doc->UsedFonts.contains(it->IFont)) && (it->IFont != ""))
252
                                it->IFont = ReplacedFonts[it->IFont];
1460 cbradney 253
                        if ((it->itemType() == PageItem::TextFrame) || (it->itemType() == PageItem::PathText))
1428 fschmid 254
                        {
255
                                for (uint e = 0; e < it->itemText.count(); ++e)
256
                                {
1789 fschmid 257
                                if (!app->doc->UsedFonts.contains(it->itemText.at(e)->cfont->SCName))
258
                                        it->itemText.at(e)->cfont = (*app->doc->AllFonts)[ReplacedFonts[it->itemText.at(e)->cfont->SCName]];
1428 fschmid 259
                                }
260
                        }
261
                }
262
                for (uint a = 0; a < app->doc->docParagraphStyles.count(); ++a)
263
                {
264
                        if ((!app->doc->UsedFonts.contains(app->doc->docParagraphStyles[a].Font)) && (app->doc->docParagraphStyles[a].Font != ""))
265
                                app->doc->docParagraphStyles[a].Font = ReplacedFonts[app->doc->docParagraphStyles[a].Font];
266
                }
267
                QValueList<QString> tmpList;
268
                tmpList.clear();
1545 cbradney 269
                for (uint fe = 0; fe <  app->doc->PDF_Options.EmbedList.count(); ++fe)
1428 fschmid 270
                {
1545 cbradney 271
                        if (ReplacedFonts.contains(app->doc->PDF_Options.EmbedList[fe]))
272
                                tmpList.append(ReplacedFonts[app->doc->PDF_Options.EmbedList[fe]]);
1428 fschmid 273
                        else
1545 cbradney 274
                                tmpList.append(app->doc->PDF_Options.EmbedList[fe]);
1428 fschmid 275
                }
1545 cbradney 276
                app->doc->PDF_Options.EmbedList = tmpList;
1428 fschmid 277
                tmpList.clear();
1545 cbradney 278
                for (uint fe = 0; fe <  app->doc->PDF_Options.SubsetList.count(); ++fe)
1428 fschmid 279
                {
1545 cbradney 280
                        if (ReplacedFonts.contains(app->doc->PDF_Options.SubsetList[fe]))
281
                                tmpList.append(ReplacedFonts[app->doc->PDF_Options.SubsetList[fe]]);
1428 fschmid 282
                        else
1545 cbradney 283
                                tmpList.append(app->doc->PDF_Options.SubsetList[fe]);
1428 fschmid 284
                }
1545 cbradney 285
                app->doc->PDF_Options.SubsetList = tmpList;
1428 fschmid 286
                QMap<QString,QString>::Iterator itfsu;
287
                for (itfsu = ReplacedFonts.begin(); itfsu != ReplacedFonts.end(); ++itfsu)
288
                {
1786 fschmid 289
                        if (!app->doc->UsedFonts.contains(itfsu.data()))
290
                        {
291
                                QFont fo = app->Prefs.AvailFonts[itfsu.data()]->Font;
292
                                fo.setPointSize(qRound(app->doc->toolSettings.defSize / 10.0));
293
                                app->doc->AddFont(itfsu.data(), fo);
294
                        }
1428 fschmid 295
                }
1789 fschmid 296
                if (app->Prefs.askBeforeSubstituite)
297
                        ReplacedFonts.clear();
298
                dummyFois.clear();
1428 fschmid 299
        }
1549 subik 300
        app->pluginManager->dllInput = "";
506 fschmid 301
        return ret;
302
}
517 fschmid 303
 
304
bool FileLoader::ReadDoc(ScribusApp* app, QString fileName, SCFonts &avail, ScribusDoc *doc, ScribusView *view, QProgressBar *dia2)
305
{
1065 cbradney 306
        struct ParagraphStyle vg;
517 fschmid 307
        struct Layer la;
308
        struct ScribusDoc::BookMa bok;
309
        int counter, Pgc;
310
        bool AtFl;
311
        bool newVersion = false;
312
        QString tmp, tmpf, tmp2, tmp3, tmp4, PgNam, Defont, tmf;
313
        QFont fo;
314
        QMap<int,int> TableID;
315
        QPtrList<PageItem> TableItems;
1779 fschmid 316
        int a;
517 fschmid 317
        double xf;
318
        PageItem *Neu;
319
        Page* Apage;
320
        LFrames.clear();
321
        QDomDocument docu("scridoc");
322
        QString f = "";
323
        f = ReadDatei(fileName);
324
        /* 2004/10/02 - petr vanek - bug #1092 - missing <PAGE> crash Scribus. The check constraint moved into IsScribus()
325
        FIXME: I've add test on containig tag PAGE but returning FALSE freezes S. in scribus.cpp need some hack too...  */
326
        if (!docu.setContent(f))
327
                return false;
1549 subik 328
        doc->PageColors.clear();
517 fschmid 329
        doc->Layers.clear();
330
        CMYKColor lf = CMYKColor();
331
        QDomElement elem=docu.documentElement();
332
        if (elem.tagName() != "SCRIBUSUTF8NEW")
333
                return false;
334
        if (elem.hasAttribute("Version"))
335
                newVersion = true;
336
        QDomNode DOC=elem.firstChild();
337
        dia2->setTotalSteps(DOC.childNodes().count());
338
        dia2->setProgress(0);
339
        int ObCount = 0;
340
        TableItems.clear();
341
        TableID.clear();
342
        while(!DOC.isNull())
343
        {
344
                QDomElement dc=DOC.toElement();
345
        /*
346
        * Attribute von DOCUMENT auslesen
347
        */
1542 cbradney 348
                //CB Add this in to set this in the file in memory. Its saved, why not load it. 
349
                //Will of course be replaced by per page settings although we still probably need a document default
350
                doc->PageSize = dc.attribute("PAGESIZE");
517 fschmid 351
                doc->PageOri = QStoInt(dc.attribute("ORIENTATION","0"));
352
                doc->FirstPnum = QStoInt(dc.attribute("FIRSTNUM","1"));
353
                doc->PageFP=QStoInt(dc.attribute("BOOK", "0"));
354
                doc->FirstPageLeft=QStoInt(dc.attribute("FIRSTLEFT","0"));
355
                doc->PageAT=QStoInt(dc.attribute("AUTOTEXT"));
356
                doc->PageSp=QStoInt(dc.attribute("AUTOSPALTEN"));
357
                doc->PageSpa=QStodouble(dc.attribute("ABSTSPALTEN"));
1065 cbradney 358
                doc->docUnitIndex = QStoInt(dc.attribute("UNITS","0"));
1194 fschmid 359
                doc->toolSettings.defSize=qRound(QStodouble(dc.attribute("DSIZE")) * 10);
517 fschmid 360
                Defont=dc.attribute("DFONT");
1428 fschmid 361
                if ((!avail.find(Defont)) || (!avail[Defont]->UseFont))
517 fschmid 362
                {
1428 fschmid 363
                        ReplacedFonts.insert(Defont, view->Prefs->toolSettings.defFont);
364
                        Defont = view->Prefs->toolSettings.defFont;
517 fschmid 365
                }
366
                else
1428 fschmid 367
                {
368
                        QFont fo = avail[Defont]->Font;
369
                        fo.setPointSize(qRound(doc->toolSettings.defSize / 10.0));
370
                        doc->AddFont(Defont, fo);
371
                }
1194 fschmid 372
                doc->toolSettings.defFont = Defont;
373
                doc->toolSettings.dCols=QStoInt(dc.attribute("DCOL", "1"));
374
                doc->toolSettings.dGap=QStodouble(dc.attribute("DGAP", "0.0"));
2024 cbradney 375
                doc->documentInfo.setAuthor(dc.attribute("AUTHOR"));
376
                doc->documentInfo.setComments(dc.attribute("COMMENTS"));
377
                doc->documentInfo.setKeywords(dc.attribute("KEYWORDS",""));
378
                doc->documentInfo.setTitle(dc.attribute("TITLE"));
379
                doc->documentInfo.setPublisher(dc.attribute("PUBLISHER", ""));
380
                doc->documentInfo.setDate(dc.attribute("DOCDATE", ""));
381
                doc->documentInfo.setType(dc.attribute("DOCTYPE", ""));
382
                doc->documentInfo.setFormat(dc.attribute("DOCFORMAT", ""));
383
                doc->documentInfo.setIdent(dc.attribute("DOCIDENT", ""));
384
                doc->documentInfo.setSource(dc.attribute("DOCSOURCE", ""));
385
                doc->documentInfo.setLangInfo(dc.attribute("DOCLANGINFO", ""));
386
                doc->documentInfo.setRelation(dc.attribute("DOCRELATION", ""));
387
                doc->documentInfo.setCover(dc.attribute("DOCCOVER", ""));
388
                doc->documentInfo.setRights(dc.attribute("DOCRIGHTS", ""));
389
                doc->documentInfo.setContrib(dc.attribute("DOCCONTRIB", ""));
823 fschmid 390
                doc->typographicSetttings.valueSuperScript = QStoInt(dc.attribute("VHOCH"));
391
                doc->typographicSetttings.scalingSuperScript = QStoInt(dc.attribute("VHOCHSC"));
392
                doc->typographicSetttings.valueSubScript = QStoInt(dc.attribute("VTIEF"));
393
                doc->typographicSetttings.scalingSubScript = QStoInt(dc.attribute("VTIEFSC"));
394
                doc->typographicSetttings.valueSmallCaps = QStoInt(dc.attribute("VKAPIT"));
395
                doc->typographicSetttings.valueBaseGrid = QStodouble(dc.attribute("BASEGRID", "12"));
396
                doc->typographicSetttings.offsetBaseGrid = QStodouble(dc.attribute("BASEO", "0"));
397
                doc->typographicSetttings.autoLineSpacing = QStoInt(dc.attribute("AUTOL","20"));
517 fschmid 398
                doc->GroupCounter=QStoInt(dc.attribute("GROUPC","1"));
399
                doc->HasCMS = static_cast<bool>(QStoInt(dc.attribute("HCMS","0")));
400
                doc->CMSSettings.SoftProofOn = static_cast<bool>(QStoInt(dc.attribute("DPSo","0")));
401
                doc->CMSSettings.CMSinUse = static_cast<bool>(QStoInt(dc.attribute("DPuse","0")));
402
                doc->CMSSettings.GamutCheck = static_cast<bool>(QStoInt(dc.attribute("DPgam","0")));
403
                doc->CMSSettings.BlackPoint = static_cast<bool>(QStoInt(dc.attribute("DPbla","1")));
404
                doc->CMSSettings.DefaultMonitorProfile = dc.attribute("DPMo","");
405
                doc->CMSSettings.DefaultPrinterProfile = dc.attribute("DPPr","");
406
                doc->CMSSettings.DefaultInputProfile = dc.attribute("DPIn","");
407
                doc->CMSSettings.DefaultInputProfile2 = dc.attribute("DPIn2","");
408
                doc->CMSSettings.DefaultIntentPrinter = QStoInt(dc.attribute("DIPr","0"));
409
                doc->CMSSettings.DefaultIntentMonitor = QStoInt(dc.attribute("DIMo","1"));
410
                doc->CMSSettings.DefaultIntentMonitor2 = QStoInt(dc.attribute("DIMo2","1"));
411
                doc->ActiveLayer = QStoInt(dc.attribute("ALAYER","0"));
412
                doc->Language = dc.attribute("LANGUAGE", "");
413
                doc->MinWordLen = QStoInt(dc.attribute("MINWORDLEN", "3"));
414
                doc->HyCount = QStoInt(dc.attribute("HYCOUNT", "2"));
537 fschmid 415
                doc->PageB=QStodouble(dc.attribute("PAGEWITH"));
416
                doc->PageH=QStodouble(dc.attribute("PAGEHEIGHT"));
417
                doc->PageM.Left=QStodouble(dc.attribute("BORDERLEFT"));
418
                doc->PageM.Right=QStodouble(dc.attribute("BORDERRIGHT"));
419
                doc->PageM.Top=QStodouble(dc.attribute("BORDERTOP"));
420
                doc->PageM.Bottom=QStodouble(dc.attribute("BORDERBOTTOM"));
517 fschmid 421
                doc->Automatic = static_cast<bool>(QStoInt(dc.attribute("AUTOMATIC", "1")));
422
                doc->AutoCheck = static_cast<bool>(QStoInt(dc.attribute("AUTOCHECK", "0")));
423
                doc->GuideLock = static_cast<bool>(QStoInt(dc.attribute("GUIDELOCK", "0")));
879 fschmid 424
                doc->guidesSettings.minorGrid = QStodouble(dc.attribute("MINGRID", tmp.setNum(view->Prefs->guidesSettings.minorGrid)));
425
                doc->guidesSettings.majorGrid = QStodouble(dc.attribute("MAJGRID", tmp.setNum(view->Prefs->guidesSettings.majorGrid)));
426
                doc->guidesSettings.gridShown = static_cast<bool>(QStoInt(dc.attribute("SHOWGRID", "0")));
427
                doc->guidesSettings.guidesShown = static_cast<bool>(QStoInt(dc.attribute("SHOWGUIDES", "1")));
428
                doc->guidesSettings.framesShown = static_cast<bool>(QStoInt(dc.attribute("SHOWFRAME", "1")));
429
                doc->guidesSettings.marginsShown = static_cast<bool>(QStoInt(dc.attribute("SHOWMARGIN", "1")));
430
                doc->guidesSettings.baseShown = static_cast<bool>(QStoInt(dc.attribute("SHOWBASE", "0")));
431
                doc->guidesSettings.showPic = static_cast<bool>(QStoInt(dc.attribute("SHOWPICT", "1")));
432
                doc->guidesSettings.linkShown = static_cast<bool>(QStoInt(dc.attribute("SHOWLINK", "0")));
1194 fschmid 433
                doc->toolSettings.polyC = QStoInt(dc.attribute("POLYC", "4"));
434
                doc->toolSettings.polyF = QStodouble(dc.attribute("POLYF", "0.5"));
435
                doc->toolSettings.polyR = QStodouble(dc.attribute("POLYR", "0"));
436
                doc->toolSettings.polyFd = QStoInt(dc.attribute("POLYFD", "0"));
437
                doc->toolSettings.polyS = static_cast<bool>(QStoInt(dc.attribute("POLYS", "0")));
734 fschmid 438
                doc->AutoSave = static_cast<bool>(QStoInt(dc.attribute("AutoSave","0")));
439
                doc->AutoSaveTime = QStoInt(dc.attribute("AutoSaveTime","600000"));
745 fschmid 440
                doc->ScratchBottom = QStodouble(dc.attribute("ScratchBottom", "20"));
1719 craig 441
                // FIXME A typo in early 1.3cvs (MAR 05) means we must support loading of
442
                // FIXME 'ScatchLeft' for a while too. This can be removed in a few months.
443
                if (dc.hasAttribute("ScatchLeft"))
444
                        doc->ScratchLeft = QStodouble(dc.attribute("ScatchLeft", "100"));
445
                else
446
                        doc->ScratchLeft = QStodouble(dc.attribute("ScratchLeft", "100"));
745 fschmid 447
                doc->ScratchRight = QStodouble(dc.attribute("ScratchRight", "100"));
448
                doc->ScratchTop = QStodouble(dc.attribute("ScratchTop", "20"));
1194 fschmid 449
                doc->toolSettings.dStartArrow = QStoInt(dc.attribute("StartArrow", "0"));
450
                doc->toolSettings.dEndArrow = QStoInt(dc.attribute("EndArrow", "0"));
451
                doc->toolSettings.scaleX = QStodouble(dc.attribute("PICTSCX","1"));
452
                doc->toolSettings.scaleY = QStodouble(dc.attribute("PICTSCY","1"));
453
                doc->toolSettings.scaleType = static_cast<bool>(QStoInt(dc.attribute("PSCALE", "1")));
454
                doc->toolSettings.aspectRatio = static_cast<bool>(QStoInt(dc.attribute("PASPECT", "0")));
2025 fschmid 455
                doc->toolSettings.lowResType = QStoInt(dc.attribute("HalfRes", "1"));
745 fschmid 456
                if (dc.hasAttribute("PEN"))
1194 fschmid 457
                        doc->toolSettings.dPen = dc.attribute("PEN");
745 fschmid 458
                if (dc.hasAttribute("BRUSH"))
1194 fschmid 459
                        doc->toolSettings.dBrush = dc.attribute("BRUSH");
745 fschmid 460
                if (dc.hasAttribute("PENLINE"))
1194 fschmid 461
                        doc->toolSettings.dPenLine = dc.attribute("PENLINE");
745 fschmid 462
                if (dc.hasAttribute("PENTEXT"))
1194 fschmid 463
                        doc->toolSettings.dPenText = dc.attribute("PENTEXT");
745 fschmid 464
                if (dc.hasAttribute("StrokeText"))
1194 fschmid 465
                        doc->toolSettings.dStrokeText = dc.attribute("StrokeText");
466
                doc->toolSettings.dLineArt = static_cast<Qt::PenStyle>(QStoInt(dc.attribute("STIL")));
467
                doc->toolSettings.dLstyleLine = static_cast<Qt::PenStyle>(QStoInt(dc.attribute("STILLINE")));
468
                doc->toolSettings.dWidth = QStodouble(dc.attribute("WIDTH", "1"));
469
                doc->toolSettings.dWidthLine = QStodouble(dc.attribute("WIDTHLINE", "1"));
470
                doc->toolSettings.dShade2 = QStoInt(dc.attribute("PENSHADE", "100"));
471
                doc->toolSettings.dShadeLine = QStoInt(dc.attribute("LINESHADE", "100"));
472
                doc->toolSettings.dShade = QStoInt(dc.attribute("BRUSHSHADE", "100"));
473
                doc->toolSettings.magMin = QStoInt(dc.attribute("MAGMIN","10"));
474
                doc->toolSettings.magMax = QStoInt(dc.attribute("MAGMAX","3200"));
475
                doc->toolSettings.magStep = QStoInt(dc.attribute("MAGSTEP","25"));
745 fschmid 476
                if (dc.hasAttribute("CPICT"))
1194 fschmid 477
                        doc->toolSettings.dBrushPict = dc.attribute("CPICT");
478
                doc->toolSettings.shadePict = QStoInt(dc.attribute("PICTSHADE","100"));
745 fschmid 479
                if (dc.hasAttribute("PAGEC"))
480
                        doc->papColor = QColor(dc.attribute("PAGEC"));
481
                if (dc.hasAttribute("MARGC"))
879 fschmid 482
                        doc->guidesSettings.margColor = QColor(dc.attribute("MARGC"));
745 fschmid 483
                if (dc.hasAttribute("MINORC"))
879 fschmid 484
                        doc->guidesSettings.minorColor = QColor(dc.attribute("MINORC"));
745 fschmid 485
                if (dc.hasAttribute("MAJORC"))
879 fschmid 486
                        doc->guidesSettings.majorColor = QColor(dc.attribute("MAJORC"));
745 fschmid 487
                if (dc.hasAttribute("GuideC"))
879 fschmid 488
                        doc->guidesSettings.guideColor = QColor(dc.attribute("GuideC"));
745 fschmid 489
                if (dc.hasAttribute("BaseC"))
879 fschmid 490
                        doc->guidesSettings.baseColor = QColor(dc.attribute("BaseC"));
1065 cbradney 491
                doc->marginColored = static_cast<bool>(QStoInt(dc.attribute("RANDF","0")));
1187 fschmid 492
                doc->guidesSettings.before = static_cast<bool>(QStoInt(dc.attribute("BACKG","1")));
879 fschmid 493
                doc->guidesSettings.guideRad = QStoInt(dc.attribute("GuideRad","10"));
494
                doc->guidesSettings.grabRad = QStoInt(dc.attribute("GRAB","4"));
1261 fschmid 495
                if (dc.hasAttribute("currentProfile"))
1284 fschmid 496
                {
497
                        doc->checkerProfiles.clear();
1261 fschmid 498
                        doc->curCheckProfile = dc.attribute("currentProfile");
1284 fschmid 499
                }
1016 fschmid 500
                doc->LastAuto = 0;
517 fschmid 501
                QDomNode PAGE=DOC.firstChild();
502
                counter = 0;
503
                while(!PAGE.isNull())
504
                {
505
                        ObCount++;
506
                        dia2->setProgress(ObCount);
507
                        QDomElement pg=PAGE.toElement();
1261 fschmid 508
                        if (pg.tagName()=="CheckProfile")
509
                        {
510
                                struct checkerPrefs checkerSettings;
511
                                checkerSettings.ignoreErrors = static_cast<bool>(QStoInt(pg.attribute("ignoreErrors", "0")));
512
                                checkerSettings.autoCheck = static_cast<bool>(QStoInt(pg.attribute("autoCheck", "1")));
513
                                checkerSettings.checkGlyphs = static_cast<bool>(QStoInt(pg.attribute("checkGlyphs", "1")));
514
                                checkerSettings.checkOrphans = static_cast<bool>(QStoInt(pg.attribute("checkOrphans", "1")));
515
                                checkerSettings.checkOverflow = static_cast<bool>(QStoInt(pg.attribute("checkOverflow", "1")));
516
                                checkerSettings.checkPictures = static_cast<bool>(QStoInt(pg.attribute("checkPictures", "1")));
517
                                checkerSettings.checkResolution = static_cast<bool>(QStoInt(pg.attribute("checkResolution", "1")));
518
                                checkerSettings.checkTransparency = static_cast<bool>(QStoInt(pg.attribute("checkTransparency", "1")));
519
                                checkerSettings.minResolution = QStodouble(pg.attribute("minResolution","72"));
1284 fschmid 520
                                checkerSettings.checkAnnotations = static_cast<bool>(QStoInt(pg.attribute("checkAnnotations", "0")));
521
                                checkerSettings.checkRasterPDF = static_cast<bool>(QStoInt(pg.attribute("checkRasterPDF", "1")));
1261 fschmid 522
                                doc->checkerProfiles[pg.attribute("Name")] = checkerSettings;
523
                        }
517 fschmid 524
                        // 10/25/2004 pv - None is "reserved" color. cannot be defined in any file...
525
                        if(pg.tagName()=="COLOR" && pg.attribute("NAME")!="None")
526
                        {
527
                                if (pg.hasAttribute("CMYK"))
528
                                        lf.setNamedColor(pg.attribute("CMYK"));
529
                                else
530
                                        lf.fromQColor(QColor(pg.attribute("RGB")));
531
                          doc->PageColors[pg.attribute("NAME")] = lf;
532
                        }
533
                        if(pg.tagName()=="STYLE")
534
                        {
535
                                vg.Vname = pg.attribute("NAME");
536
                                vg.LineSpa = QStodouble(pg.attribute("LINESP"));
537
                                vg.Indent = QStodouble(pg.attribute("INDENT","0"));
538
                                vg.First = QStodouble(pg.attribute("FIRST","0"));
1065 cbradney 539
                                vg.textAlignment = QStoInt(pg.attribute("ALIGN"));
540
                                vg.gapBefore = QStodouble(pg.attribute("VOR","0"));
541
                                vg.gapAfter = QStodouble(pg.attribute("NACH","0"));
1194 fschmid 542
                                tmpf = pg.attribute("FONT", doc->toolSettings.defFont);
1428 fschmid 543
                                if ((!avail.find(tmpf)) || (!avail[tmpf]->UseFont))
544
                                {
545
                                        if ((!view->Prefs->GFontSub.contains(tmpf)) || (!avail[view->Prefs->GFontSub[tmpf]]->UseFont))
1468 fschmid 546
                                        {
547
                                                newReplacement = true;
1428 fschmid 548
                                                ReplacedFonts.insert(tmpf, view->Prefs->toolSettings.defFont);
1468 fschmid 549
                                        }
1428 fschmid 550
                                        else
551
                                                ReplacedFonts.insert(tmpf, view->Prefs->GFontSub[tmpf]);
552
                                }
517 fschmid 553
                                else
1428 fschmid 554
                                {
1786 fschmid 555
                                        if (!doc->UsedFonts.contains(tmpf))
556
                                        {
557
                                                QFont fo = avail[tmpf]->Font;
558
                                                fo.setPointSize(qRound(doc->toolSettings.defSize / 10.0));
559
                                                doc->AddFont(tmpf, fo);
560
                                        }
1428 fschmid 561
                                }
517 fschmid 562
                                vg.Font = tmpf;
563
                                vg.FontSize = qRound(QStodouble(pg.attribute("FONTSIZE","12")) * 10.0);
564
                                vg.Drop = static_cast<bool>(QStoInt(pg.attribute("DROP","0")));
565
                                vg.DropLin = QStoInt(pg.attribute("DROPLIN","2"));
566
                                vg.FontEffect = QStoInt(pg.attribute("EFFECT","0"));
1194 fschmid 567
                                vg.FColor = pg.attribute("FCOLOR", doc->toolSettings.dBrush);
517 fschmid 568
                                vg.FShade = QStoInt(pg.attribute("FSHADE","100"));
1194 fschmid 569
                                vg.SColor = pg.attribute("SCOLOR", doc->toolSettings.dPen);
517 fschmid 570
                                vg.SShade = QStoInt(pg.attribute("SSHADE","100"));
571
                                vg.BaseAdj = static_cast<bool>(QStoInt(pg.attribute("BASE","0")));
572
                                if ((pg.hasAttribute("NUMTAB")) && (QStoInt(pg.attribute("NUMTAB","0")) != 0))
573
                                {
574
                                        tmp = pg.attribute("TABS");
575
                                        QTextStream tgv(&tmp, IO_ReadOnly);
576
                                        vg.TabValues.clear();
577
                                        for (int cxv = 0; cxv < QStoInt(pg.attribute("NUMTAB","0")); ++cxv)
578
                                        {
579
                                                tgv >> xf;
580
                                                vg.TabValues.append(xf);
581
                                        }
582
                                        tmp = "";
583
                                }
584
                                else
585
                                        vg.TabValues.clear();
1065 cbradney 586
                                doc->docParagraphStyles.append(vg);
517 fschmid 587
                        }
588
                        if(pg.tagName()=="JAVA")
589
                                doc->JavaScripts[pg.attribute("NAME")] = pg.attribute("SCRIPT");
590
                        if(pg.tagName()=="LAYERS")
591
                        {
592
                                la.LNr = QStoInt(pg.attribute("NUMMER"));
593
                                la.Level = QStoInt(pg.attribute("LEVEL"));
594
                                la.Name = pg.attribute("NAME");
1065 cbradney 595
                                la.isViewable = QStoInt(pg.attribute("SICHTBAR"));
596
                                la.isPrintable = QStoInt(pg.attribute("DRUCKEN"));
517 fschmid 597
                                doc->Layers.append(la);
598
                        }
599
                        if(pg.tagName()=="Bookmark")
600
                        {
601
                                bok.Title = pg.attribute("Title");
602
                                bok.Text = pg.attribute("Text");
603
                                bok.Aktion = pg.attribute("Aktion");
604
                                bok.ItemNr = QStoInt(pg.attribute("ItemNr"));
605
                                bok.Seite = QStoInt(pg.attribute("Seite"));
606
                                bok.Element = QStoInt(pg.attribute("Element"));
607
                                bok.First = QStoInt(pg.attribute("First"));
608
                                bok.Last = QStoInt(pg.attribute("Last"));
609
                                bok.Prev = QStoInt(pg.attribute("Prev"));
610
                                bok.Next = QStoInt(pg.attribute("Next"));
611
                                bok.Parent = QStoInt(pg.attribute("Parent"));
612
                                doc->BookMarks.append(bok);
613
                        }
614
                        if(pg.tagName()=="MultiLine")
615
                        {
616
                                multiLine ml;
617
                                QDomNode MuLn = PAGE.firstChild();
618
                                while(!MuLn.isNull())
619
                                {
620
                                        QDomElement MuL = MuLn.toElement();
1065 cbradney 621
                                        struct SingleLine sl;
517 fschmid 622
                                        sl.Color = MuL.attribute("Color");
623
                                        sl.Dash = QStoInt(MuL.attribute("Dash"));
624
                                        sl.LineEnd = QStoInt(MuL.attribute("LineEnd"));
625
                                        sl.LineJoin = QStoInt(MuL.attribute("LineJoin"));
626
                                        sl.Shade = QStoInt(MuL.attribute("Shade"));
627
                                        sl.Width = QStodouble(MuL.attribute("Width"));
628
                                        ml.push_back(sl);
629
                                        MuLn = MuLn.nextSibling();
630
                                }
631
                                doc->MLineStyles.insert(pg.attribute("Name"), ml);
632
                        }
741 fschmid 633
                        if(pg.tagName()=="Arrows")
634
                        {
1065 cbradney 635
                                struct ArrowDesc arrow;
760 fschmid 636
                                arrow.name = pg.attribute("Name");
776 fschmid 637
                                arrow.userArrow = true;
741 fschmid 638
                                double xa, ya;
639
                                QString tmp = pg.attribute("Points");
640
                                QTextStream fp(&tmp, IO_ReadOnly);
641
                                for (uint cx = 0; cx < pg.attribute("NumPoints").toUInt(); ++cx)
642
                                {
643
                                        fp >> xa;
644
                                        fp >> ya;
760 fschmid 645
                                        arrow.points.addPoint(xa, ya);
741 fschmid 646
                                }
647
                                doc->arrowStyles.append(arrow);
648
                        }
1642 cbradney 649
                        if(pg.tagName()=="PDF")
650
                        {
651
                                doc->PDF_Options.Articles = static_cast<bool>(QStoInt(pg.attribute("Articles")));
652
                                doc->PDF_Options.Thumbnails = static_cast<bool>(QStoInt(pg.attribute("Thumbnails")));
653
                                doc->PDF_Options.Compress = static_cast<bool>(QStoInt(pg.attribute("Compress")));
654
                                doc->PDF_Options.CompressMethod = QStoInt(pg.attribute("CMethod","0"));
655
                                doc->PDF_Options.Quality = QStoInt(pg.attribute("Quality","0"));
656
                                doc->PDF_Options.RecalcPic = static_cast<bool>(QStoInt(pg.attribute("RecalcPic")));
657
                                doc->PDF_Options.Bookmarks = static_cast<bool>(QStoInt(pg.attribute("Bookmarks")));
658
                                if (pg.hasAttribute("MirrorH"))
659
                                        doc->PDF_Options.MirrorH = static_cast<bool>(QStoInt(pg.attribute("MirrorH")));
660
                                else
661
                                        doc->PDF_Options.MirrorH = false;
662
                                if (pg.hasAttribute("MirrorV"))
663
                                        doc->PDF_Options.MirrorV = static_cast<bool>(QStoInt(pg.attribute("MirrorV")));
664
                                else
665
                                        doc->PDF_Options.MirrorV = false;
666
                                if (pg.hasAttribute("RotateDeg"))
667
                                        doc->PDF_Options.RotateDeg = QStoInt(pg.attribute("RotateDeg","0"));
668
                                else
669
                                        doc->PDF_Options.RotateDeg = 0;
670
                                doc->PDF_Options.PresentMode = static_cast<bool>(QStoInt(pg.attribute("PresentMode")));
671
                                doc->PDF_Options.PicRes = QStoInt(pg.attribute("PicRes"));
1973 craig 672
                                // Fixme: check input pdf version
673
                                doc->PDF_Options.Version = (PDFOptions::PDFVersion)QStoInt(pg.attribute("Version"));
1642 cbradney 674
                                doc->PDF_Options.Resolution = QStoInt(pg.attribute("Resolution"));
675
                                doc->PDF_Options.Binding = QStoInt(pg.attribute("Binding"));
676
                                doc->PDF_Options.Datei = "";
677
                                doc->PDF_Options.isGrayscale = static_cast<bool>(QStoInt(pg.attribute("Grayscale","0")));
678
                                doc->PDF_Options.UseRGB = static_cast<bool>(QStoInt(pg.attribute("RGBMode","0")));
679
                                doc->PDF_Options.UseProfiles = static_cast<bool>(QStoInt(pg.attribute("UseProfiles","0")));
680
                                doc->PDF_Options.UseProfiles2 = static_cast<bool>(QStoInt(pg.attribute("UseProfiles2","0")));
681
                                doc->PDF_Options.Intent = QStoInt(pg.attribute("Intent","1"));
682
                                doc->PDF_Options.Intent2 = QStoInt(pg.attribute("Intent2","1"));
683
                                doc->PDF_Options.SolidProf = pg.attribute("SolidP", "");
684
                                doc->PDF_Options.ImageProf = pg.attribute("ImageP", "");
685
                                doc->PDF_Options.PrintProf = pg.attribute("PrintP", "");
686
                                doc->PDF_Options.Info = pg.attribute("InfoString", "");
687
                                doc->PDF_Options.BleedTop = QStodouble(pg.attribute("BTop","0"));
688
                                doc->PDF_Options.BleedLeft = QStodouble(pg.attribute("BLeft","0"));
689
                                doc->PDF_Options.BleedRight = QStodouble(pg.attribute("BRight","0"));
690
                                doc->PDF_Options.BleedBottom = QStodouble(pg.attribute("BBottom","0"));
691
                                doc->PDF_Options.EmbeddedI = static_cast<bool>(QStoInt(pg.attribute("ImagePr","0")));
692
                                doc->PDF_Options.PassOwner = pg.attribute("PassOwner", "");
693
                                doc->PDF_Options.PassUser = pg.attribute("PassUser", "");
694
                                doc->PDF_Options.Permissions = QStoInt(pg.attribute("Permissions","-4"));
695
                                doc->PDF_Options.Encrypt = static_cast<bool>(QStoInt(pg.attribute("Encrypt","0")));
1738 fschmid 696
                                doc->PDF_Options.useLayers = static_cast<bool>(QStoInt(pg.attribute("UseLayers","0")));
1642 cbradney 697
                                doc->PDF_Options.UseLPI = static_cast<bool>(QStoInt(pg.attribute("UseLpi","0")));
698
                                QDomNode PFO = PAGE.firstChild();
699
                                while(!PFO.isNull())
700
                                {
701
                                        QDomElement pdfF = PFO.toElement();
702
                                        if(pdfF.tagName() == "LPI")
703
                                        {
704
                                                struct LPIData lpo;
705
                                                lpo.Angle = QStoInt(pdfF.attribute("Angle"));
706
                                                lpo.Frequency = QStoInt(pdfF.attribute("Frequency"));
707
                                                lpo.SpotFunc = QStoInt(pdfF.attribute("SpotFunction"));
708
                                                doc->PDF_Options.LPISettings[pdfF.attribute("Color")] = lpo;
709
                                        }
710
                                        if(pdfF.tagName() == "Fonts")
711
                                        {
712
                                                if (!doc->PDF_Options.EmbedList.contains(pdfF.attribute("Name")))
713
                                                        doc->PDF_Options.EmbedList.append(pdfF.attribute("Name"));
714
                                        }
715
                                        if(pdfF.tagName() == "Subset")
716
                                        {
717
                                                if (!doc->PDF_Options.SubsetList.contains(pdfF.attribute("Name")))
718
                                                        doc->PDF_Options.SubsetList.append(pdfF.attribute("Name"));
719
                                        }
720
                                        if(pdfF.tagName() == "Effekte")
721
                                        {
722
                                                struct PDFPresentationData ef;
723
                                                ef.pageEffectDuration = QStoInt(pdfF.attribute("pageEffectDuration"));
724
                                                ef.pageViewDuration = QStoInt(pdfF.attribute("pageViewDuration"));
725
                                                ef.effectType = QStoInt(pdfF.attribute("effectType"));
726
                                                ef.Dm = QStoInt(pdfF.attribute("Dm"));
727
                                                ef.M = QStoInt(pdfF.attribute("M"));
728
                                                ef.Di = QStoInt(pdfF.attribute("Di"));
729
                                                doc->PDF_Options.PresentVals.append(ef);
730
                                        }
731
                                        PFO = PFO.nextSibling();
732
                                }
733
                        }
734
                        if(pg.tagName()=="DocItemAttributes")
735
                        {
736
                                QDomNode DIA = PAGE.firstChild();
737
                                doc->docItemAttributes.clear();
738
                                while(!DIA.isNull())
739
                                {
740
                                        QDomElement itemAttr = DIA.toElement();
741
                                        if(itemAttr.tagName() == "ItemAttribute")
742
                                        {
743
                                                ObjectAttribute objattr;
744
                                                objattr.name=itemAttr.attribute("Name");
745
                                                objattr.type=itemAttr.attribute("Type");
746
                                                objattr.value=itemAttr.attribute("Value");
747
                                                objattr.parameter=itemAttr.attribute("Parameter");
1654 cbradney 748
                                                objattr.relationship=itemAttr.attribute("Relationship");
749
                                                objattr.relationshipto=itemAttr.attribute("RelationshipTo");
750
                                                objattr.autoaddto=itemAttr.attribute("AutoAddTo");
1649 cbradney 751
                                                doc->docItemAttributes.append(objattr);
1642 cbradney 752
                                        }
753
                                        DIA = DIA.nextSibling();
754
                                }
755
                        }
1694 cbradney 756
                        if(pg.tagName()=="TablesOfContents")
757
                        {
758
                                QDomNode TOC = PAGE.firstChild();
759
                                doc->docToCSetups.clear();
760
                                while(!TOC.isNull())
761
                                {
762
                                        QDomElement tocElem = TOC.toElement();
763
                                        if(tocElem.tagName() == "TableOfContents")
764
                                        {
765
                                                ToCSetup tocsetup;
766
                                                tocsetup.name=tocElem.attribute("Name");
767
                                                tocsetup.itemAttrName=tocElem.attribute("ItemAttributeName");
768
                                                tocsetup.frameName=tocElem.attribute("FrameName");
769
                                                tocsetup.style=tocElem.attribute("Style");
770
                                                doc->docToCSetups.append(tocsetup);
771
                                        }
772
                                        TOC = TOC.nextSibling();
773
                                }
774
                        }
517 fschmid 775
                        if ((pg.tagName()=="PAGE") || (pg.tagName()=="MASTERPAGE"))
776
                        {
777
                                a = QStoInt(pg.attribute("NUM"));
778
                                PgNam = "";
779
                                PgNam = pg.attribute("NAM", "");
780
                                Pgc = doc->PageC;
781
                                AtFl = doc->PageAT;
782
                                if (PgNam == "")
783
                                {
784
                                        doc->PageC = Pgc;
785
                                        doc->Pages = doc->DocPages;
786
                                        doc->PageAT = AtFl;
787
                                        doc->MasterP = false;
788
                                }
789
                                else
790
                                {
791
                                        doc->PageC = 0;
792
                                        doc->PageAT = false;
793
                                        doc->Pages = doc->MasterPages;
794
                                        doc->MasterP = true;
795
                                }
796
                                app->slotNewPage(a);
797
                                Apage = doc->Pages.at(a);
798
                                if (PgNam == "")
799
                                        doc->DocPages = doc->Pages;
800
                                else
801
                                {
1794 fschmid 802
                                        Apage->setPageName(PgNam);
517 fschmid 803
                                        doc->MasterNames[PgNam] = a;
804
                                        doc->MasterPages = doc->Pages;
805
                                }
806
                                doc->PageC = Pgc+1;
807
                                doc->PageAT = AtFl;
808
                                Apage->LeftPg=QStoInt(pg.attribute("LEFT","0"));
809
                                QString Mus = "";
810
                                Mus = pg.attribute("MNAM","Normal");
811
                                if (!doc->MasterP)
812
                                        Apage->MPageNam = Mus;
813
                                else
814
                                        Apage->MPageNam = "";
537 fschmid 815
                                Apage->Xoffset = QStodouble(pg.attribute("PAGEXPOS"));
816
                                Apage->Yoffset = QStodouble(pg.attribute("PAGEYPOS"));
517 fschmid 817
                                Apage->Width = QStodouble(pg.attribute("PAGEWITH"));
818
                                Apage->Height = QStodouble(pg.attribute("PAGEHEIGHT"));
1794 fschmid 819
                                if (doc->PageFP)
820
                                {
821
                                        if (doc->MasterP)
822
                                        {
823
                                                if (Apage->LeftPg)
824
                                                {
825
                                                        Apage->Margins.Right = QStodouble(pg.attribute("BORDERLEFT"));
826
                                                        Apage->Margins.Left = QStodouble(pg.attribute("BORDERRIGHT"));
827
                                                }
828
                                                else
829
                                                {
830
                                                        Apage->Margins.Left = QStodouble(pg.attribute("BORDERLEFT"));
831
                                                        Apage->Margins.Right = QStodouble(pg.attribute("BORDERRIGHT"));
832
                                                }
833
                                        }
834
                                        else
835
                                        {
836
                                                if (a % 2 == 0)
837
                                                {
838
                                                        if (doc->FirstPageLeft)
839
                                                        {
840
                                                                Apage->Margins.Right = QStodouble(pg.attribute("BORDERLEFT"));
841
                                                                Apage->Margins.Left = QStodouble(pg.attribute("BORDERRIGHT"));
842
                                                        }
843
                                                        else
844
                                                        {
845
                                                                Apage->Margins.Left = QStodouble(pg.attribute("BORDERLEFT"));
846
                                                                Apage->Margins.Right = QStodouble(pg.attribute("BORDERRIGHT"));
847
                                                        }
848
                                                }
849
                                                else
850
                                                {
851
                                                        if (doc->FirstPageLeft)
852
                                                        {
853
                                                                Apage->Margins.Left = QStodouble(pg.attribute("BORDERLEFT"));
854
                                                                Apage->Margins.Right = QStodouble(pg.attribute("BORDERRIGHT"));
855
                                                        }
856
                                                        else
857
                                                        {
858
                                                                Apage->Margins.Right = QStodouble(pg.attribute("BORDERLEFT"));
859
                                                                Apage->Margins.Left = QStodouble(pg.attribute("BORDERRIGHT"));
860
                                                        }
861
                                                }
862
                                        }
863
                                }
864
                                else
865
                                {
866
                                        Apage->Margins.Left = QStodouble(pg.attribute("BORDERLEFT"));
867
                                        Apage->Margins.Right = QStodouble(pg.attribute("BORDERRIGHT"));
868
                                }
869
                                doc->MasterP = false;
517 fschmid 870
                                Apage->Margins.Top = QStodouble(pg.attribute("BORDERTOP"));
871
                                Apage->Margins.Bottom = QStodouble(pg.attribute("BORDERBOTTOM"));
872
                                doc->PageB = Apage->Width;
873
                                doc->PageH = Apage->Height;
874
                                doc->PageM.Left = Apage->Margins.Left;
875
                                doc->PageM.Right = Apage->Margins.Right;
876
                                doc->PageM.Top = Apage->Margins.Top;
877
                                doc->PageM.Bottom = Apage->Margins.Bottom;
878
                                if ((pg.hasAttribute("NumVGuides")) && (QStoInt(pg.attribute("NumVGuides","0")) != 0))
879
                                {
880
                                        tmp = pg.attribute("VerticalGuides");
881
                                        QTextStream fgv(&tmp, IO_ReadOnly);
882
                                        Apage->YGuides.clear();
883
                                        for (int cxv = 0; cxv < QStoInt(pg.attribute("NumVGuides","0")); ++cxv)
884
                                        {
885
                                                fgv >> xf;
886
                                                Apage->YGuides.append(xf);
887
                                        }
888
                                        qHeapSort(Apage->YGuides);
889
                                        tmp = "";
890
                                }
891
                                else
892
                                        Apage->YGuides.clear();
893
                                if ((pg.hasAttribute("NumHGuides")) && (QStoInt(pg.attribute("NumHGuides","0")) != 0))
894
                                {
895
                                        tmp = pg.attribute("HorizontalGuides");
896
                                        QTextStream fgh(&tmp, IO_ReadOnly);
897
                                        Apage->XGuides.clear();
898
                                        for (int cxh = 0; cxh < QStoInt(pg.attribute("NumHGuides","0")); ++cxh)
899
                                        {
900
                                                fgh >> xf;
901
                                                Apage->XGuides.append(xf);
902
                                        }
903
                                        qHeapSort(Apage->XGuides);
904
                                        tmp = "";
905
                                }
906
                                else
907
                                        Apage->XGuides.clear();
1800 cbradney 908
                        }
517 fschmid 909
                        if ((pg.tagName()=="PAGEOBJECT") || (pg.tagName()=="MASTEROBJECT"))
910
                        {
911
                                        if (pg.tagName()=="PAGEOBJECT")
522 fschmid 912
                                        {
517 fschmid 913
                                                doc->Items = doc->DocItems;
522 fschmid 914
                                                doc->Pages = doc->DocPages;
915
                                                doc->MasterP = false;
916
                                        }
517 fschmid 917
                                        else
522 fschmid 918
                                        {
517 fschmid 919
                                                doc->Items = doc->MasterItems;
522 fschmid 920
                                                doc->Pages = doc->MasterPages;
921
                                                doc->MasterP = true;
922
                                        }
1786 fschmid 923
                                        if ((pg.attribute("OnMasterPage") != "") && (pg.tagName()=="MASTEROBJECT"))
1065 cbradney 924
                                                doc->currentPage = doc->MasterPages.at(doc->MasterNames[pg.attribute("OnMasterPage")]);
517 fschmid 925
                                        if ((QStoInt(pg.attribute("NEXTITEM")) != -1) || (static_cast<bool>(QStoInt(pg.attribute("AUTOTEXT")))))
926
                                        {
927
                                                if (QStoInt(pg.attribute("BACKITEM")) == -1)
537 fschmid 928
                                                        LFrames.append(doc->Items.count());
517 fschmid 929
                                        }
1779 fschmid 930
                                        int docGc = doc->GroupCounter;
931
                                        doc->GroupCounter = 0;
932
                                        Neu = PasteItem(&pg, doc, view);
1786 fschmid 933
                                        if (pg.tagName()=="PAGEOBJECT")
934
                                                Neu->OnMasterPage = "";
1779 fschmid 935
                                        doc->GroupCounter = docGc;
1194 fschmid 936
                                        tmpf = pg.attribute("IFONT", doc->toolSettings.defFont);
1428 fschmid 937
                                        if ((!avail.find(tmpf)) || (!avail[tmpf]->UseFont))
938
                                        {
939
                                                if ((!view->Prefs->GFontSub.contains(tmpf)) || (!avail[view->Prefs->GFontSub[tmpf]]->UseFont))
1468 fschmid 940
                                                {
941
                                                        newReplacement = true;
1428 fschmid 942
                                                        ReplacedFonts.insert(tmpf, view->Prefs->toolSettings.defFont);
1468 fschmid 943
                                                }
1428 fschmid 944
                                                else
945
                                                        ReplacedFonts.insert(tmpf, view->Prefs->GFontSub[tmpf]);
946
                                        }
517 fschmid 947
                                        else
1428 fschmid 948
                                        {
1786 fschmid 949
                                                if (!doc->UsedFonts.contains(tmpf))
950
                                                {
951
                                                        QFont fo = avail[tmpf]->Font;
952
                                                        fo.setPointSize(qRound(doc->toolSettings.defSize / 10.0));
953
                                                        doc->AddFont(tmpf, fo);
954
                                                }
1428 fschmid 955
                                        }
1779 fschmid 956
                                        Neu->IFont = tmpf;
517 fschmid 957
                                        QDomNode IT=pg.firstChild();
958
                                        while(!IT.isNull())
959
                                        {
960
                                                QDomElement it=IT.toElement();
961
                                                if (it.tagName()=="CSTOP")
962
                                                {
963
                                                        QString name = it.attribute("NAME");
964
                                                        double ramp = QStodouble(it.attribute("RAMP","0.0"));
965
                                                        int shade = QStoInt(it.attribute("SHADE","100"));
966
                                                        double opa = QStodouble(it.attribute("TRANS","1"));
1779 fschmid 967
                                                        Neu->fill_gradient.addStop(SetColor(doc, name, shade), ramp, 0.5, opa, name, shade);
517 fschmid 968
                                                }
969
                                                if (it.tagName()=="ITEXT")
1779 fschmid 970
                                                        GetItemText(&it, doc, view->Prefs, Neu);
1655 cbradney 971
 
972
                                                //CB PageItemAttributes
973
                                                if(it.tagName()=="PageItemAttributes")
974
                                                {
975
                                                        QDomNode PIA = it.firstChild();
976
                                                        ObjAttrVector pageItemAttributes;
977
                                                        while(!PIA.isNull())
978
                                                        {
979
                                                                QDomElement itemAttr = PIA.toElement();
980
                                                                if(itemAttr.tagName() == "ItemAttribute")
981
                                                                {
982
                                                                        ObjectAttribute objattr;
983
                                                                        objattr.name=itemAttr.attribute("Name");
984
                                                                        objattr.type=itemAttr.attribute("Type");
985
                                                                        objattr.value=itemAttr.attribute("Value");
986
                                                                        objattr.parameter=itemAttr.attribute("Parameter");
987
                                                                        objattr.relationship=itemAttr.attribute("Relationship");
988
                                                                        objattr.relationshipto=itemAttr.attribute("RelationshipTo");
989
                                                                        objattr.autoaddto=itemAttr.attribute("AutoAddTo");
990
                                                                        pageItemAttributes.append(objattr);
991
                                                                }
992
                                                                PIA = PIA.nextSibling();
993
                                                        }
1779 fschmid 994
                                                        Neu->setObjectAttributes(&pageItemAttributes);
1655 cbradney 995
                                                }
517 fschmid 996
                                                IT=IT.nextSibling();
997
                                        }
1800 cbradney 998
                                        /* CB #1817 Remove this as its only a fix for old docs that will be loaded via the scribusXml.cpp loaded anyway
999
                                        //Leaving in here for the moment
1779 fschmid 1000
                                        if ((Neu->itemType() == 5) && (Neu->Height != 0))
517 fschmid 1001
                                        {
1795 cbradney 1002
                                                Neu->Rot += atan2(Neu->Height,Neu->Width)*(180.0/M_PI);
1779 fschmid 1003
                                                Neu->Width = sqrt(pow(Neu->Width,2)+pow(Neu->Height,2));
1004
                                                Neu->Height = 0;
1005
                                                Neu->Clip.setPoints(4, -1,-1, static_cast<int>(Neu->Width+1),-1, static_cast<int>(Neu->Width+1),
1006
                                                                                         static_cast<int>(Neu->Height+1), -1, static_cast<int>(Neu->Height+1));
517 fschmid 1007
                                        }
1800 cbradney 1008
                                        */
1779 fschmid 1009
                                        Neu->Language = app->GetLang(pg.attribute("LANGUAGE", doc->Language));
517 fschmid 1010
                                        Neu->isAutoText=static_cast<bool>(QStoInt(pg.attribute("AUTOTEXT")));
1011
                                        if (Neu->isAutoText)
1012
                                                doc->LastAuto = Neu;
1013
                                        Neu->NextIt = QStoInt(pg.attribute("NEXTITEM"));
1014
                                        if (Neu->isTableItem)
1015
                                        {
1016
                                                TableItems.append(Neu);
1017
                                                TableID.insert(QStoInt(pg.attribute("OwnLINK","0")), Neu->ItemNr);
1018
                                        }
1019
                                        if (pg.tagName()=="PAGEOBJECT")
522 fschmid 1020
                                        {
517 fschmid 1021
                                                doc->DocItems = doc->Items;
522 fschmid 1022
                                                doc->DocPages = doc->Pages;
1023
                                        }
517 fschmid 1024
                                        else
522 fschmid 1025
                                        {
517 fschmid 1026
                                                doc->MasterItems = doc->Items;
522 fschmid 1027
                                                doc->MasterPages = doc->Pages;
1028
                                        }
1029
                                        doc->MasterP = false;
517 fschmid 1030
                                        counter++;
1031
                                }
1032
                        PAGE=PAGE.nextSibling();
1033
                }
1034
                DOC=DOC.nextSibling();
1035
        }
1036
        if (TableItems.count() != 0)
1037
        {
1038
                for (uint ttc = 0; ttc < TableItems.count(); ++ttc)
1039
                {
1040
                        PageItem* ta = TableItems.at(ttc);
1041
                        if (ta->TopLinkID != -1)
1042
                                ta->TopLink = doc->Items.at(TableID[ta->TopLinkID]);
1043
                        else
1044
                                ta->TopLink = 0;
1045
                        if (ta->LeftLinkID != -1)
1046
                                ta->LeftLink = doc->Items.at(TableID[ta->LeftLinkID]);
1047
                        else
1048
                                ta->LeftLink = 0;
1049
                        if (ta->RightLinkID != -1)
1050
                                ta->RightLink = doc->Items.at(TableID[ta->RightLinkID]);
1051
                        else
1052
                                ta->RightLink = 0;
1053
                        if (ta->BottomLinkID != -1)
1054
                                ta->BottomLink = doc->Items.at(TableID[ta->BottomLinkID]);
1055
                        else
1056
                                ta->BottomLink = 0;
1057
                }
1058
        }
1059
        doc->Pages = doc->DocPages;
1060
        doc->PageC = doc->Pages.count();
1061
        doc->Items = doc->DocItems;
1062
        doc->MasterP = false;
1828 fschmid 1063
//      view->reformPages();
517 fschmid 1064
        if (doc->Layers.count() == 0)
1065
        {
1066
                la.LNr = 0;
1067
                la.Level = 0;
1068
                la.Name = QObject::tr("Background");
1065 cbradney 1069
                la.isViewable = true;
1070
                la.isPrintable = true;
517 fschmid 1071
                doc->Layers.append(la);
1072
        }
1073
        if (LFrames.count() != 0)
1074
        {
1075
                PageItem *Its;
1076
                PageItem *Itn;
1077
                PageItem *Itr;
537 fschmid 1078
                QValueList<int>::Iterator lc;
517 fschmid 1079
                for (lc = LFrames.begin(); lc != LFrames.end(); ++lc)
1080
                {
537 fschmid 1081
                        Its = doc->Items.at((*lc));
517 fschmid 1082
                        Itr = Its;
1083
                        Its->BackBox = 0;
1084
                        if (Its->isAutoText)
1085
                                doc->FirstAuto = Its;
1086
                        while (Its->NextIt != -1)
1087
                        {
537 fschmid 1088
                                Itn = doc->Items.at(Its->NextIt);
517 fschmid 1089
                                Its->NextBox = Itn;
1090
                                Itn->BackBox = Its;
1091
                                Its = Itn;
1092
                        }
1093
                        Its->NextBox = 0;
1094
                }
1095
        }
1525 cbradney 1096
        view->UN->setText(unitGetStrFromIndex(doc->docUnitIndex));
517 fschmid 1097
        dia2->setProgress(DOC.childNodes().count());
1098
        return true;
1099
}
1100
 
1779 fschmid 1101
void FileLoader::GetItemText(QDomElement *it, ScribusDoc *doc, ApplicationPrefs *Prefs, PageItem* obj)
517 fschmid 1102
{
1779 fschmid 1103
        struct ScText *hg;
1789 fschmid 1104
        Foi* dummy;
1105
        bool unknown = false;
1779 fschmid 1106
        QString tmp2, tmpf;
517 fschmid 1107
        tmp2 = it->attribute("CH");
1779 fschmid 1108
        tmp2.replace(QRegExp("\r"), QChar(13));
1109
        tmp2.replace(QRegExp("\n"), QChar(13));
1110
        tmp2.replace(QRegExp("\t"), QChar(9));
1194 fschmid 1111
        tmpf = it->attribute("CFONT", doc->toolSettings.defFont);
1428 fschmid 1112
        if ((!Prefs->AvailFonts.find(tmpf)) || (!Prefs->AvailFonts[tmpf]->UseFont))
1113
        {
1789 fschmid 1114
                bool isThere = false;
1115
                for (uint dl = 0; dl < dummyFois.count(); ++dl)
1116
                {
1117
                        if (dummyFois.at(dl)->SCName == tmpf)
1118
                        {
1119
                                isThere = true;
1120
                                dummy = dummyFois.at(dl);
1121
                                break;
1122
                        }
1123
                }
1124
                if (!isThere)
1125
                {
1126
                        dummy = new Foi(tmpf, "", false);
1127
                        dummyFois.append(dummy);
1128
                }
1129
                unknown = true;
1428 fschmid 1130
                if ((!Prefs->GFontSub.contains(tmpf)) || (!Prefs->AvailFonts[Prefs->GFontSub[tmpf]]->UseFont))
1468 fschmid 1131
                {
1132
                        newReplacement = true;
1428 fschmid 1133
                        ReplacedFonts.insert(tmpf, Prefs->toolSettings.defFont);
1468 fschmid 1134
                }
1428 fschmid 1135
                else
1136
                        ReplacedFonts.insert(tmpf, Prefs->GFontSub[tmpf]);
1137
        }
517 fschmid 1138
        else
1428 fschmid 1139
        {
1786 fschmid 1140
                if (!doc->UsedFonts.contains(tmpf))
1141
                {
1142
                        QFont fo = Prefs->AvailFonts[tmpf]->Font;
1143
                        fo.setPointSize(qRound(doc->toolSettings.defSize / 10.0));
1144
                        doc->AddFont(tmpf, fo);
1145
                }
1428 fschmid 1146
        }
1779 fschmid 1147
        int size = qRound(QStodouble(it->attribute("CSIZE")) * 10);
1148
        QString fcolor = it->attribute("CCOLOR");
1149
        double extra = QStodouble(it->attribute("CEXTRA"));
1150
        int shade = QStoInt(it->attribute("CSHADE"));
1151
        int style = QStoInt(it->attribute("CSTYLE"));
1152
        int ab = QStoInt(it->attribute("CAB","0"));
1153
        QString stroke = it->attribute("CSTROKE","None");
1154
        int shade2 = QStoInt(it->attribute("CSHADE2","100"));
1155
        int scale = QStoInt(it->attribute("CSCALE","100"));
517 fschmid 1156
        for (uint cxx=0; cxx<tmp2.length(); ++cxx)
1779 fschmid 1157
        {
1158
                hg = new ScText;
1159
                hg->ch = tmp2.at(cxx);
1160
                if (hg->ch == QChar(5))
1161
                        hg->ch = QChar(13);
1162
                if (hg->ch == QChar(4))
1163
                        hg->ch = QChar(9);
1789 fschmid 1164
                if (unknown)
1165
                        hg->cfont = dummy;
1166
                else
1167
                        hg->cfont = (*doc->AllFonts)[tmpf];
1779 fschmid 1168
                hg->csize = size;
1169
                hg->ccolor = fcolor;
1170
                hg->cextra = extra;
1171
                hg->cshade = shade;
1172
                hg->cselect = false;
1173
                hg->cstyle = style;
1174
                hg->cab = ab;
1175
                hg->cstroke = stroke;
1176
                hg->cshade2 = shade2;
1177
                hg->cscale = QMIN(QMAX(scale, 25), 400);
1178
                hg->xp = 0;
1179
                hg->yp = 0;
1180
                hg->PRot = 0;
1181
                hg->PtransX = 0;
1182
                hg->PtransY = 0;
1183
                obj->itemText.append(hg);
1184
        }
1185
        return;
517 fschmid 1186
}
1779 fschmid 1187
 
1188
PageItem* FileLoader::PasteItem(QDomElement *obj, ScribusDoc *doc, ScribusView *view)
1189
{
1190
        int z = 0;
1191
        PageItem::ItemType pt = static_cast<PageItem::ItemType>(QStoInt(obj->attribute("PTYPE")));
1192
        double x = QStodouble(obj->attribute("XPOS"));
1193
        double y = QStodouble(obj->attribute("YPOS"));
1194
        double w = QStodouble(obj->attribute("WIDTH"));
1195
        double h = QStodouble(obj->attribute("HEIGHT"));
1196
        double pw = QStodouble(obj->attribute("PWIDTH"));
1197
        double scx = QStodouble(obj->attribute("LOCALSCX"));
1198
        double scy = QStodouble(obj->attribute("LOCALSCY"));
1199
        QString Pcolor = obj->attribute("PCOLOR");
1200
        QString Pcolor2 = obj->attribute("PCOLOR2");
1201
        QColor tmpc;
1957 cbradney 1202
        PageItem *currItem;
1779 fschmid 1203
        QString tmp;
1204
        int xi;
1205
        double xf, yf;
1206
        switch (pt)
1207
        {
1208
        // OBSOLETE CR 2005-02-06
1209
        case PageItem::FrameType1:
1210
                z = view->PaintEllipse(x, y, w, h, pw, Pcolor, Pcolor2);
1957 cbradney 1211
                currItem = doc->Items.at(z);
1779 fschmid 1212
                break;
1213
        //
1214
        case PageItem::ImageFrame:
1215
                z = view->PaintPict(x, y, w, h);
1957 cbradney 1216
                currItem = doc->Items.at(z);
1217
                currItem->LocalScX = scx;
1218
                currItem->LocalScY = scy;
1219
                currItem->LocalX = QStodouble(obj->attribute("LOCALX"));
1220
                currItem->LocalY = QStodouble(obj->attribute("LOCALY"));
1221
                currItem->Pfile = obj->attribute("PFILE");
1222
                currItem->IProfile = obj->attribute("PRFILE","");
1223
                currItem->EmProfile = obj->attribute("EPROF","");
1224
                currItem->IRender = QStoInt(obj->attribute("IRENDER","1"));
1225
                currItem->UseEmbedded = QStoInt(obj->attribute("EMBEDDED","1"));
1226
                if (currItem->Pfile != "")
1227
                        view->LoadPict(currItem->Pfile, z);
1228
                currItem->LocalScX = scx;
1229
                currItem->LocalScY = scy;
1230
                currItem->PicArt = QStoInt(obj->attribute("PICART"));
1231
                currItem->BBoxX = QStodouble(obj->attribute("BBOXX"));
1232
                currItem->BBoxH = QStodouble(obj->attribute("BBOXH"));
1233
                currItem->ScaleType = QStoInt(obj->attribute("SCALETYPE","1"));
1234
                currItem->AspectRatio = QStoInt(obj->attribute("RATIO","0"));
1235
                currItem->Pwidth = pw;
1779 fschmid 1236
                break;
1237
        // OBSOLETE CR 2005-02-06
1238
        case PageItem::FrameType3:
1239
                z = view->PaintRect(x, y, w, h, pw, Pcolor, Pcolor2);
1957 cbradney 1240
                currItem = doc->Items.at(z);
1779 fschmid 1241
                break;
1242
        //
1243
        case PageItem::PathText:
1244
        case PageItem::TextFrame:
1245
                z = view->PaintText(x, y, w, h, pw, Pcolor);
1957 cbradney 1246
                currItem = doc->Items.at(z);
1779 fschmid 1247
                if ((QStoInt(obj->attribute("ANNOTATION","0"))) && (static_cast<bool>(QStoInt(obj->attribute("ANICON","0")))))
1248
                {
1957 cbradney 1249
                        currItem->LocalScX = scx;
1250
                        currItem->LocalScY = scy;
1251
                        currItem->LocalX = QStodouble(obj->attribute("LOCALX"));
1252
                        currItem->LocalY = QStodouble(obj->attribute("LOCALY"));
1253
                        currItem->Pfile = obj->attribute("PFILE");
1254
                        currItem->Pfile2 = obj->attribute("PFILE2","");
1255
                        currItem->Pfile3 = obj->attribute("PFILE3","");
1256
                        currItem->IProfile = obj->attribute("PRFILE","");
1257
                        currItem->EmProfile = obj->attribute("EPROF","");
1258
                        currItem->IRender = QStoInt(obj->attribute("IRENDER","1"));
1259
                        currItem->UseEmbedded = QStoInt(obj->attribute("EMBEDDED","1"));
1260
                        view->LoadPict(currItem->Pfile, z);
1261
                        currItem->LocalScX = scx;
1262
                        currItem->LocalScY = scy;
1263
                        currItem->PicArt = QStoInt(obj->attribute("PICART"));
1264
                        currItem->BBoxX = QStodouble(obj->attribute("BBOXX"));
1265
                        currItem->BBoxH = QStodouble(obj->attribute("BBOXH"));
1266
                        currItem->ScaleType = QStoInt(obj->attribute("SCALETYPE","1"));
1267
                        currItem->AspectRatio = QStoInt(obj->attribute("RATIO","0"));
1779 fschmid 1268
                }
1957 cbradney 1269
                currItem->LineSp = QStodouble(obj->attribute("LINESP"));
1270
                currItem->convertTo(pt);
1779 fschmid 1271
                break;
1272
        case PageItem::Line:
1273
                z = view->PaintLine(x, y, w, h, pw, Pcolor2);
1957 cbradney 1274
                currItem = doc->Items.at(z);
1779 fschmid 1275
                break;
1276
        case PageItem::Polygon:
1277
                z = view->PaintPoly(x, y, w, h, pw, Pcolor, Pcolor2);
1957 cbradney 1278
                currItem = doc->Items.at(z);
1779 fschmid 1279
                break;
1280
        case PageItem::PolyLine:
1281
                z = view->PaintPolyLine(x, y, w, h, pw, Pcolor, Pcolor2);
1957 cbradney 1282
                currItem = doc->Items.at(z);
1779 fschmid 1283
                break;
1284
        }
1957 cbradney 1285
        currItem->FrameType = QStoInt(obj->attribute("FRTYPE", "0"));
1286
        currItem->startArrowIndex =  QStoInt(obj->attribute("startArrowIndex","0"));
1287
        currItem->endArrowIndex =  QStoInt(obj->attribute("endArrowIndex","0"));
1288
        currItem->NamedLStyle = obj->attribute("NAMEDLST", "");
1289
        currItem->isBookmark = QStoInt(obj->attribute("BOOKMARK"));
1290
        if ((currItem->isBookmark) && (doc->BookMarks.count() == 0))
1779 fschmid 1291
                doc->OldBM = true;
1957 cbradney 1292
        currItem->BMnr = QStoInt(obj->attribute("BookNr","0"));
1293
        currItem->textAlignment = QStoInt(obj->attribute("ALIGN","0"));
1294
        currItem->setImageFlippedH(QStoInt(obj->attribute("FLIPPEDH")));
1295
        currItem->setImageFlippedV(QStoInt(obj->attribute("FLIPPEDV")));
1296
        currItem->RadRect = QStodouble(obj->attribute("RADRECT","0"));
1297
        currItem->ClipEdited = QStoInt(obj->attribute("CLIPEDIT", "0"));
1298
        currItem->setFillColor(Pcolor);
1299
        currItem->setLineColor(Pcolor2);
1300
        currItem->setFillShade(QStoInt(obj->attribute("SHADE")));
1301
        currItem->setLineShade(QStoInt(obj->attribute("SHADE2")));
1302
        currItem->TxtStroke = obj->attribute("TXTSTROKE", "None");
1303
        currItem->TxtFill = obj->attribute("TXTFILL", "Black");
1304
        currItem->ShTxtStroke = QStoInt(obj->attribute("TXTSTRSH", "100"));
1305
        currItem->ShTxtFill = QStoInt(obj->attribute("TXTFILLSH", "100"));
1306
        currItem->TxtScale = QStoInt(obj->attribute("TXTSCALE", "100"));
1307
        currItem->TxTStyle = QStoInt(obj->attribute("TXTSTYLE", "0"));
1308
        currItem->Rot = QStodouble(obj->attribute("ROT"));
1309
        currItem->Extra = QStodouble(obj->attribute("EXTRA"));
1310
        currItem->TExtra = QStodouble(obj->attribute("TEXTRA", "1"));
1311
        currItem->BExtra = QStodouble(obj->attribute("BEXTRA", "1"));
1312
        currItem->RExtra = QStodouble(obj->attribute("REXTRA", "1"));
1313
        currItem->PLineArt = Qt::PenStyle(QStoInt(obj->attribute("PLINEART")));
1314
        currItem->PLineEnd = Qt::PenCapStyle(QStoInt(obj->attribute("PLINEEND","0")));
1315
        currItem->PLineJoin = Qt::PenJoinStyle(QStoInt(obj->attribute("PLINEJOIN","0")));
1316
        currItem->isPrintable = QStoInt(obj->attribute("PRINTABLE"));
1317
        currItem->isAnnotation = QStoInt(obj->attribute("ANNOTATION","0"));
1318
        currItem->AnType = QStoInt(obj->attribute("ANTYPE","0"));
1779 fschmid 1319
        QString AnName = obj->attribute("ANNAME","");
1320
        if (AnName != "")
1321
        {
1957 cbradney 1322
                if (currItem->itemName() == AnName)
1323
                        currItem->AutoName = true;
1779 fschmid 1324
                else
1325
                {
1957 cbradney 1326
                        currItem->setItemName(AnName);
1327
                        currItem->AutoName = false;
1779 fschmid 1328
                }
1329
        }
1957 cbradney 1330
        currItem->AnAction = obj->attribute("ANACTION","");
1331
        currItem->An_E_act = obj->attribute("ANEACT","");
1332
        currItem->An_X_act = obj->attribute("ANXACT","");
1333
        currItem->An_D_act = obj->attribute("ANDACT","");
1334
        currItem->An_Fo_act = obj->attribute("ANFOACT","");
1335
        currItem->An_Bl_act = obj->attribute("ANBLACT","");
1336
        currItem->An_K_act = obj->attribute("ANKACT","");
1337
        currItem->An_F_act = obj->attribute("ANFACT","");
1338
        currItem->An_V_act = obj->attribute("ANVACT","");
1339
        currItem->An_C_act = obj->attribute("ANCACT","");
1340
        currItem->AnActType = QStoInt(obj->attribute("ANACTYP","0"));
1341
        currItem->An_Extern = obj->attribute("ANEXTERN","");
1342
        if ((currItem->An_Extern != "") && (currItem->AnActType != 8))
1779 fschmid 1343
        {
1957 cbradney 1344
                QFileInfo efp(currItem->An_Extern);
1345
                currItem->An_Extern = efp.absFilePath();
1779 fschmid 1346
        }
1957 cbradney 1347
        currItem->AnZiel = QStoInt(obj->attribute("ANZIEL","0"));
1348
        currItem->AnToolTip = obj->attribute("ANTOOLTIP","");
1349
        currItem->AnRollOver = obj->attribute("ANROLL","");
1350
        currItem->AnDown = obj->attribute("ANDOWN","");
1351
        currItem->AnBwid = QStoInt(obj->attribute("ANBWID","1"));
1352
        currItem->AnBsty = QStoInt(obj->attribute("ANBSTY","0"));
1353
        currItem->AnFeed = QStoInt(obj->attribute("ANFEED","1"));
1354
        currItem->AnFlag = QStoInt(obj->attribute("ANFLAG","0"));
1355
        currItem->AnFont = QStoInt(obj->attribute("ANFONT","4"));
1356
        currItem->AnFormat = QStoInt(obj->attribute("ANFORMAT","0"));
1357
        currItem->AnVis = QStoInt(obj->attribute("ANVIS","0"));
1358
        currItem->AnIsChk = static_cast<bool>(QStoInt(obj->attribute("ANCHK","0")));
1359
        currItem->AnAAact = static_cast<bool>(QStoInt(obj->attribute("ANAA","0")));
1360
        currItem->AnHTML = static_cast<bool>(QStoInt(obj->attribute("ANHTML","0")));
1361
        currItem->AnUseIcons = static_cast<bool>(QStoInt(obj->attribute("ANICON","0")));
1362
        currItem->AnChkStil = QStoInt(obj->attribute("ANCHKS","0"));
1363
        currItem->AnMaxChar = QStoInt(obj->attribute("ANMC","-1"));
1364
        currItem->AnBColor = obj->attribute("ANBCOL","None");
1365
        currItem->AnIPlace = QStoInt(obj->attribute("ANPLACE","1"));
1366
        currItem->AnScaleW = QStoInt(obj->attribute("ANSCALE","0"));
1367
        currItem->TopLine = static_cast<bool>(QStoInt(obj->attribute("TopLine","0")));
1368
        currItem->LeftLine = static_cast<bool>(QStoInt(obj->attribute("LeftLine","0")));
1369
        currItem->RightLine = static_cast<bool>(QStoInt(obj->attribute("RightLine","0")));
1370
        currItem->BottomLine = static_cast<bool>(QStoInt(obj->attribute("BottomLine","0")));
1371
        currItem->isTableItem = static_cast<bool>(QStoInt(obj->attribute("isTableItem","0")));
1372
        currItem->TopLinkID =  QStoInt(obj->attribute("TopLINK","-1"));
1373
        currItem->LeftLinkID =  QStoInt(obj->attribute("LeftLINK","-1"));
1374
        currItem->RightLinkID =  QStoInt(obj->attribute("RightLINK","-1"));
1375
        currItem->BottomLinkID =  QStoInt(obj->attribute("BottomLINK","-1"));
1376
        currItem->PoShow = QStoInt(obj->attribute("PLTSHOW","0"));
1377
        currItem->BaseOffs = QStodouble(obj->attribute("BASEOF","0"));
1378
        currItem->setTextFlowsAroundFrame(QStoInt(obj->attribute("TEXTFLOW")));
1379
        currItem->setTextFlowUsesBoundingBox(QStoInt(obj->attribute("TEXTFLOW2","0")));
1380
        currItem->ISize = qRound(QStodouble(obj->attribute("ISIZE","12")) * 10);
1381
        currItem->ExtraV=QStodouble(obj->attribute("EXTRAV","0"));
1382
        currItem->DashOffset = QStodouble(obj->attribute("DASHOFF","0.0"));
1383
        currItem->Reverse = static_cast<bool>(QStoInt(obj->attribute("REVERS","0")));
1384
        currItem->InvPict = static_cast<bool>(QStoInt(obj->attribute("INVERS","0")));
1385
        currItem->setLocked(static_cast<bool>(QStoInt(obj->attribute("LOCK","0"))));
1386
        currItem->setSizeLocked(static_cast<bool>(QStoInt(obj->attribute("LOCKR","0"))));
1387
        currItem->setFillTransparency(QStodouble(obj->attribute("TransValue","0.0")));
1779 fschmid 1388
        if (obj->hasAttribute("TransValueS"))
1957 cbradney 1389
                currItem->setLineTransparency(QStodouble(obj->attribute("TransValueS","0.0")));
1779 fschmid 1390
        else
1957 cbradney 1391
                currItem->setLineTransparency(QStodouble(obj->attribute("TransValue","0.0")));
1779 fschmid 1392
        if (QStoInt(obj->attribute("TRANSPARENT","0")) == 1)
1957 cbradney 1393
                currItem->setFillColor("None");
1394
        currItem->Cols = QStoInt(obj->attribute("COLUMNS","1"));
1395
        currItem->ColGap = QStodouble(obj->attribute("COLGAP","0.0"));
1779 fschmid 1396
        if (QStoInt(obj->attribute("LAYER","0")) != -1)
1957 cbradney 1397
                currItem->LayerNr = QStoInt(obj->attribute("LAYER","0"));
1398
        currItem->setTextFlowUsesContourLine(QStoInt(obj->attribute("TEXTFLOW3","0")));
1779 fschmid 1399
        tmp = "";
1400
        if ((obj->hasAttribute("GROUPS")) && (QStoInt(obj->attribute("NUMGROUP","0")) != 0))
1401
        {
1402
                tmp = obj->attribute("GROUPS");
1403
                QTextStream fg(&tmp, IO_ReadOnly);
1957 cbradney 1404
                currItem->Groups.clear();
1779 fschmid 1405
                for (int cx = 0; cx < QStoInt(obj->attribute("NUMGROUP","0")); ++cx)
1406
                {
1407
                        fg >> xi;
1957 cbradney 1408
                        currItem->Groups.push(xi);
1779 fschmid 1409
                }
1410
                tmp = "";
1411
        }
1412
        else
1957 cbradney 1413
                currItem->Groups.clear();
1779 fschmid 1414
        tmp = "";
1415
        if ((obj->hasAttribute("NUMTAB")) && (QStoInt(obj->attribute("NUMTAB","0")) != 0))
1416
        {
1417
                tmp = obj->attribute("TABS");
1418
                QTextStream tgv(&tmp, IO_ReadOnly);
1957 cbradney 1419
                currItem->TabValues.clear();
1779 fschmid 1420
                for (int cxv = 0; cxv < QStoInt(obj->attribute("NUMTAB","0")); ++cxv)
1421
                {
1422
                        tgv >> xf;
1957 cbradney 1423
                        currItem->TabValues.append(xf);
1779 fschmid 1424
                }
1425
                tmp = "";
1426
        }
1427
        else
1957 cbradney 1428
                currItem->TabValues.clear();
1779 fschmid 1429
        if ((obj->hasAttribute("NUMDASH")) && (QStoInt(obj->attribute("NUMDASH","0")) != 0))
1430
        {
1431
                tmp = obj->attribute("DASHS");
1432
                QTextStream dgv(&tmp, IO_ReadOnly);
1957 cbradney 1433
                currItem->DashValues.clear();
1779 fschmid 1434
                for (int cxv = 0; cxv < QStoInt(obj->attribute("NUMDASH","0")); ++cxv)
1435
                {
1436
                        dgv >> xf;
1957 cbradney 1437
                        currItem->DashValues.append(xf);
1779 fschmid 1438
                }
1439
                tmp = "";
1440
        }
1441
        else
1957 cbradney 1442
                currItem->DashValues.clear();
1779 fschmid 1443
        tmp = "";
1444
        if (obj->hasAttribute("NUMPO"))
1445
        {
1957 cbradney 1446
                currItem->PoLine.resize(obj->attribute("NUMPO").toUInt());
1779 fschmid 1447
                tmp = obj->attribute("POCOOR");
1448
                QTextStream fp(&tmp, IO_ReadOnly);
1449
                for (uint cx=0; cx<obj->attribute("NUMPO").toUInt(); ++cx)
1450
                {
1451
                        fp >> xf;
1452
                        fp >> yf;
1957 cbradney 1453
                        currItem->PoLine.setPoint(cx, xf, yf);
1779 fschmid 1454
                }
1455
        }
1456
        else
1957 cbradney 1457
                currItem->PoLine.resize(0);
1779 fschmid 1458
        tmp = "";
1459
        if (obj->hasAttribute("NUMCO"))
1460
        {
1957 cbradney 1461
                currItem->ContourLine.resize(obj->attribute("NUMCO").toUInt());
1779 fschmid 1462
                tmp = obj->attribute("COCOOR");
1463
                QTextStream fp(&tmp, IO_ReadOnly);
1464
                for (uint cx=0; cx<obj->attribute("NUMCO").toUInt(); ++cx)
1465
                {
1466
                        fp >> xf;
1467
                        fp >> yf;
1957 cbradney 1468
                        currItem->ContourLine.setPoint(cx, xf, yf);
1779 fschmid 1469
                }
1470
        }
1471
        else
1957 cbradney 1472
                currItem->ContourLine = currItem->PoLine.copy();
1473
        if (currItem->itemType() != PageItem::Line)
1474
                currItem->Clip = FlattenPath(currItem->PoLine, currItem->Segments);
1779 fschmid 1475
        else
1476
        {
1957 cbradney 1477
                int ph = static_cast<int>(QMAX(1.0, currItem->Pwidth / 2.0));
1478
                currItem->Segments.clear();
1479
                currItem->PoLine.resize(0);
1480
                currItem->Clip.setPoints(4, -ph,-ph, static_cast<int>(currItem->Width+ph),-ph,
1481
                                  static_cast<int>(currItem->Width+ph),static_cast<int>(currItem->Height+ph),
1482
                                  -ph,static_cast<int>(currItem->Height+ph));
1483
                currItem->Height = 1;
1779 fschmid 1484
        }
1957 cbradney 1485
        if (currItem->itemType() == PageItem::ImageFrame)
1486
                view->AdjustPictScale(currItem);
1487
        if ((currItem->itemType() != PageItem::TextFrame) && (currItem->itemType() != PageItem::PathText))
1488
                currItem->IFont = doc->toolSettings.defFont;
1489
        currItem->GrType = QStoInt(obj->attribute("GRTYP","0"));
1779 fschmid 1490
        QString GrColor;
1491
        QString GrColor2;
1492
        int GrShade;
1493
        int GrShade2;
1957 cbradney 1494
        if (currItem->GrType != 0)
1779 fschmid 1495
        {
1957 cbradney 1496
                currItem->GrStartX = QStodouble(obj->attribute("GRSTARTX","0.0"));
1497
                currItem->GrStartY = QStodouble(obj->attribute("GRSTARTY","0.0"));
1498
                currItem->GrEndX = QStodouble(obj->attribute("GRENDX","0.0"));
1499
                currItem->GrEndY = QStodouble(obj->attribute("GRENDY","0.0"));
1779 fschmid 1500
                GrColor = obj->attribute("GRCOLOR","");
1501
                if (GrColor != "")
1502
                {
1503
                        GrColor2 = obj->attribute("GRCOLOR2","");
1504
                        GrShade = QStoInt(obj->attribute("GRSHADE","100"));
1505
                        GrShade2 = QStoInt(obj->attribute("GRSHADE2","100"));
1506
                }
1507
        }
1957 cbradney 1508
        if (currItem->GrType != 0)
1779 fschmid 1509
        {
1957 cbradney 1510
                currItem->fill_gradient.clearStops();
1779 fschmid 1511
                if ((GrColor != "") && (GrColor2 != ""))
1512
                {
1957 cbradney 1513
                        if (currItem->GrType == 5)
1779 fschmid 1514
                        {
1515
                                if ((GrColor != "None") && (GrColor != ""))
1957 cbradney 1516
                                        currItem->SetFarbe(&tmpc, GrColor, GrShade);
1517
                                currItem->fill_gradient.addStop(tmpc, 0.0, 0.5, 1.0, GrColor, GrShade);
1779 fschmid 1518
                                if ((GrColor2 != "None") && (GrColor2 != ""))
1957 cbradney 1519
                                        currItem->SetFarbe(&tmpc, GrColor2, GrShade2);
1520
                                currItem->fill_gradient.addStop(tmpc, 1.0, 0.5, 1.0, GrColor2, GrShade2);
1779 fschmid 1521
                        }
1522
                        else
1523
                        {
1524
                                if ((GrColor2 != "None") && (GrColor2 != ""))
1957 cbradney 1525
                                        currItem->SetFarbe(&tmpc, GrColor2, GrShade2);
1526
                                currItem->fill_gradient.addStop(tmpc, 0.0, 0.5, 1.0, GrColor2, GrShade2);
1779 fschmid 1527
                                if ((GrColor != "None") && (GrColor != ""))
1957 cbradney 1528
                                        currItem->SetFarbe(&tmpc, GrColor, GrShade);
1529
                                currItem->fill_gradient.addStop(tmpc, 1.0, 0.5, 1.0, GrColor, GrShade);
1779 fschmid 1530
                        }
1531
                }
1957 cbradney 1532
                view->updateGradientVectors(currItem);
1779 fschmid 1533
        }
1957 cbradney 1534
        view->setRedrawBounding(currItem);
1535
        currItem->OwnPage = view->OnPage(currItem);
1536
        return currItem;
1779 fschmid 1537
}