Subversion Repositories Scribus

Rev

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

Rev Author Line No. Line
506 fschmid 1
#include "fileloader.h"
2
#include <qfile.h>
3
#include <qfileinfo.h>
517 fschmid 4
#include <qtl.h>
5
#include <qcursor.h>
6
#include <qregexp.h>
7
#include <qdir.h>
8
#include <qtextcodec.h>
9
#include <cstdlib>
10
#include <cmath>
11
#include <qtextstream.h>
506 fschmid 12
#include "scribus.h"
13
#include "scribusXml.h"
517 fschmid 14
#include "missing.h"
506 fschmid 15
#if (_MSC_VER >= 1200)
16
        #include "win-config.h"
17
#else
18
        #include "config.h"
19
#endif
20
#ifdef HAVE_LIBZ
21
        #include <zlib.h>
22
#endif
23
extern bool loadText(QString nam, QString *Buffer);
517 fschmid 24
extern void GetItemProps(bool newVersion, QDomElement *obj, struct CLBuf *OB);
25
extern double QStodouble(QString in);
26
extern int QStoInt(QString in);
27
extern QColor SetFarbe(ScribusDoc *doc, QString farbe, int shad);
506 fschmid 28
 
29
/*!
30
 \fn FileLoader::FileLoader(QString fileName)
31
 \author Franz Schmid
32
 \date
33
 \brief Constructor, sets the variable "FileName" to the input parameter fileName
34
 \param QString fileName
35
 \retval None
36
 */
516 fschmid 37
FileLoader::FileLoader(QString fileName, ScribusApp* app)
506 fschmid 38
{
39
        FileName = fileName;
40
        FileType = -1;
516 fschmid 41
        havePS = app->DLLexists(6);
42
        haveSVG = app->DLLexists(10);
506 fschmid 43
}
44
 
45
/*!
46
 \fn int FileLoader::TestFile()
47
 \author Franz Schmid
48
 \date
49
 \brief Tests if the file "FileName" exists and determines the type of the file.
50
 \param None
51
 \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
52
 */
53
int FileLoader::TestFile()
54
{
55
        QFileInfo fi = QFileInfo(FileName);
56
        int ret = -1;
57
        if (!fi.exists())
58
                ret = -1;
59
        QString ext = fi.extension(true).lower();
60
        if ((ext == "sla.gz") || (ext == "sla") || (ext == "scd.gz") || (ext == "scd"))
61
                ret = CheckScribus();
516 fschmid 62
        if (((ext == "ps") || (ext == "eps")) && (havePS))
506 fschmid 63
                ret = 2;
516 fschmid 64
        if (((ext == "svg") || (ext == "svgz")) && (haveSVG))
506 fschmid 65
                ret = 3;
66
/*      if (ext == "pdf")
67
                ret = 4; */
68
        FileType = ret;
69
        return ret;
70
}
71
 
72
/*!
73
 \fn int FileLoader::CheckScribus()
74
 \author Franz Schmid
75
 \date
76
 \brief Checks which Scribus fileformat the File in FileName has.
77
 \param None
78
 \retval 0 for old Scribus files, 1 for Scribus files created by Scribus 1.3 and above
79
 */
80
int FileLoader::CheckScribus()
81
{
82
        int ret = -1;
83
        QString fText = ReadDatei(FileName);
84
        if (fText == "")
85
                return ret;
517 fschmid 86
        if ((fText.startsWith("<SCRIBUSUTF8NEW")) && (fText.contains("<PAGE ", TRUE) != 0))
87
                return 1;
506 fschmid 88
        if ((fText.startsWith("<SCRIBUS")) && (fText.contains("<PAGE ", TRUE) != 0))
89
                return 0;
90
        return ret;
91
}
92
 
93
/*!
94
 \fn QString FileLoader::ReadDatei(QString fileName)
95
 \author Franz Schmid
96
 \date
97
 \brief Auxiliary function loads the file "fileName" into a QString and does conversion from UTF8 if required
98
 \param QString fileName
99
 \retval QString Contents of the file, converted from UTF8
100
 */
101
QString FileLoader::ReadDatei(QString fileName)
102
{
103
/**
104
  * added to support gz docs
105
  * 2.7.2002 C.Toepp
106
  * <c.toepp@gmx.de>
107
  */
108
        QString f = "";
109
#ifdef HAVE_LIBZ
110
        if(fileName.right(2) == "gz")
111
        {
112
                gzFile gzDoc;
113
                char buff[4097];
114
                int i;
115
                gzDoc = gzopen(fileName.latin1(),"rb");
116
                if(gzDoc == NULL)
117
                        return "";
118
                while((i = gzread(gzDoc,&buff,4096)) > 0)
119
                {
120
                        buff[i] = '\0';
121
                        f.append(buff);
122
                }
123
                gzclose(gzDoc);
124
        }
125
        else
126
                loadText(fileName, &f);
127
#else
128
        loadText(fileName, &f);
129
#endif
130
        QString ff = "";
131
        if (f.startsWith("<SCRIBUSUTF8"))
132
                ff = QString::fromUtf8(f);
133
        else if (f.startsWith("<SCRIBUS"))
134
                ff = f;
135
        return ff;
136
/** end changes */
137
}
138
 
139
/*!
140
 \fn bool FileLoader::LoadFile(ScribusApp* app)
141
 \author Franz Schmid
142
 \date
143
 \brief Loads the file "FileName" as a Scribus document
144
 \param ScribusApp* app, pointer to the main application class
145
 \retval bool true when loading is succsessful, false otherwise
146
 */
147
bool FileLoader::LoadFile(ScribusApp* app)
148
{
149
        bool ret = false;
150
        switch (FileType)
151
        {
152
                case 0:
153
                        {
154
                                ScriXmlDoc *ss = new ScriXmlDoc();
155
                                QObject::connect(ss, SIGNAL(NewPage(int)), app, SLOT(slotNewPage(int)));
156
                                ret = ss->ReadDoc(FileName, app->Prefs.AvailFonts, app->doc, app->view, app->FProg);
157
                                QObject::disconnect(ss, SIGNAL(NewPage(int)), app, SLOT(slotNewPage(int)));
158
                                delete ss;
159
                        }
160
                        break;
517 fschmid 161
                case 1:
162
                        ret = ReadDoc(app, FileName, app->Prefs.AvailFonts, app->doc, app->view, app->FProg);
163
                        break;
506 fschmid 164
                case 2:
165
                        app->DLLinput = FileName;
512 fschmid 166
                        app->CallDLL( 6 );
506 fschmid 167
                        ret = true;
168
                        break;
169
                case 3:
170
                        app->DLLinput = FileName;
512 fschmid 171
                        app->CallDLL( 10 );
506 fschmid 172
                        ret = true;
173
                        break;
174
                default:
175
                        ret = false;
176
                        break;
177
        }
178
        return ret;
179
}
517 fschmid 180
 
181
bool FileLoader::ReadDoc(ScribusApp* app, QString fileName, SCFonts &avail, ScribusDoc *doc, ScribusView *view, QProgressBar *dia2)
182
{
183
        struct CLBuf OB;
184
        struct StVorL vg;
185
        struct Layer la;
186
        struct ScribusDoc::BookMa bok;
187
        int counter, Pgc;
188
        bool AtFl;
189
        bool newVersion = false;
190
        struct Linked Link;
191
        QString tmp, tmpf, tmp2, tmp3, tmp4, PgNam, Defont, tmf;
192
        QFont fo;
193
        QMap<int,int> TableID;
194
        QPtrList<PageItem> TableItems;
195
        int x, a;
196
        double xf;
197
        PageItem *Neu;
198
        Page* Apage;
199
        LFrames.clear();
200
        QDomDocument docu("scridoc");
201
        QString f = "";
202
        f = ReadDatei(fileName);
203
        /* 2004/10/02 - petr vanek - bug #1092 - missing <PAGE> crash Scribus. The check constraint moved into IsScribus()
204
        FIXME: I've add test on containig tag PAGE but returning FALSE freezes S. in scribus.cpp need some hack too...  */
205
        if (!docu.setContent(f))
206
                return false;
207
        doc->PageColors.clear();       
208
        doc->Layers.clear();
209
        CMYKColor lf = CMYKColor();
210
        QDomElement elem=docu.documentElement();
211
        if (elem.tagName() != "SCRIBUSUTF8NEW")
212
                return false;
213
        if (elem.hasAttribute("Version"))
214
                newVersion = true;
215
        QDomNode DOC=elem.firstChild();
216
        dia2->setTotalSteps(DOC.childNodes().count());
217
        dia2->setProgress(0);
218
        int ObCount = 0;
219
        TableItems.clear();
220
        TableID.clear();
221
        while(!DOC.isNull())
222
        {
223
                QDomElement dc=DOC.toElement();
224
        /*
225
        * Attribute von DOCUMENT auslesen
226
        */
227
                doc->PageOri = QStoInt(dc.attribute("ORIENTATION","0"));
228
                doc->FirstPnum = QStoInt(dc.attribute("FIRSTNUM","1"));
229
                doc->PageFP=QStoInt(dc.attribute("BOOK", "0"));
230
                doc->FirstPageLeft=QStoInt(dc.attribute("FIRSTLEFT","0"));
231
                doc->PageAT=QStoInt(dc.attribute("AUTOTEXT"));
232
                doc->PageSp=QStoInt(dc.attribute("AUTOSPALTEN"));
233
                doc->PageSpa=QStodouble(dc.attribute("ABSTSPALTEN"));
234
                doc->Einheit = QStoInt(dc.attribute("UNITS","0"));
235
                DoFonts.clear();
236
                doc->Dsize=qRound(QStodouble(dc.attribute("DSIZE")) * 10);
237
                Defont=dc.attribute("DFONT");
238
                if (!avail.find(Defont))
239
                {
240
                        QString dd = Defont;
241
                        if (view->Prefs->GFontSub.contains(Defont))
242
                                Defont = view->Prefs->GFontSub[dd];
243
                        else
244
                                Defont = view->Prefs->DefFont;
245
                        DoFonts[dd] = Defont;
246
                }
247
                else
248
                        DoFonts[Defont] = Defont;
249
                fo = avail[Defont]->Font;
250
                fo.setPointSize(qRound(doc->Dsize / 10.0));
251
                doc->AddFont(Defont, fo);
252
                doc->Dfont = Defont;
253
                doc->DCols=QStoInt(dc.attribute("DCOL", "1"));
254
                doc->DGap=QStodouble(dc.attribute("DGAP", "0.0"));
255
                doc->DocAutor=dc.attribute("AUTHOR");
256
                doc->DocComments=dc.attribute("COMMENTS");
257
                doc->DocKeyWords=dc.attribute("KEYWORDS","");
258
                doc->DocTitel=dc.attribute("TITLE");
259
                doc->DocPublisher = dc.attribute("PUBLISHER", "");
260
                doc->DocDate = dc.attribute("DOCDATE", "");
261
                doc->DocType = dc.attribute("DOCTYPE", "");
262
                doc->DocFormat = dc.attribute("DOCFORMAT", "");
263
                doc->DocIdent = dc.attribute("DOCIDENT", "");
264
                doc->DocSource = dc.attribute("DOCSOURCE", "");
265
                doc->DocLangInfo = dc.attribute("DOCLANGINFO", "");
266
                doc->DocRelation = dc.attribute("DOCRELATION", "");
267
                doc->DocCover = dc.attribute("DOCCOVER", "");
268
                doc->DocRights = dc.attribute("DOCRIGHTS", "");
269
                doc->DocContrib = dc.attribute("DOCCONTRIB", "");
270
                doc->VHoch=QStoInt(dc.attribute("VHOCH"));
271
                doc->VHochSc=QStoInt(dc.attribute("VHOCHSC"));
272
                doc->VTief=QStoInt(dc.attribute("VTIEF"));
273
                doc->VTiefSc=QStoInt(dc.attribute("VTIEFSC"));
274
                doc->VKapit=QStoInt(dc.attribute("VKAPIT"));
275
                doc->GroupCounter=QStoInt(dc.attribute("GROUPC","1"));
276
                doc->HasCMS = static_cast<bool>(QStoInt(dc.attribute("HCMS","0")));
277
                doc->CMSSettings.SoftProofOn = static_cast<bool>(QStoInt(dc.attribute("DPSo","0")));
278
                doc->CMSSettings.CMSinUse = static_cast<bool>(QStoInt(dc.attribute("DPuse","0")));
279
                doc->CMSSettings.GamutCheck = static_cast<bool>(QStoInt(dc.attribute("DPgam","0")));
280
                doc->CMSSettings.BlackPoint = static_cast<bool>(QStoInt(dc.attribute("DPbla","1")));
281
                doc->CMSSettings.DefaultMonitorProfile = dc.attribute("DPMo","");
282
                doc->CMSSettings.DefaultPrinterProfile = dc.attribute("DPPr","");
283
                doc->CMSSettings.DefaultInputProfile = dc.attribute("DPIn","");
284
                doc->CMSSettings.DefaultInputProfile2 = dc.attribute("DPIn2","");
285
                doc->CMSSettings.DefaultIntentPrinter = QStoInt(dc.attribute("DIPr","0"));
286
                doc->CMSSettings.DefaultIntentMonitor = QStoInt(dc.attribute("DIMo","1"));
287
                doc->CMSSettings.DefaultIntentMonitor2 = QStoInt(dc.attribute("DIMo2","1"));
288
                doc->ActiveLayer = QStoInt(dc.attribute("ALAYER","0"));
289
                doc->Language = dc.attribute("LANGUAGE", "");
290
                doc->MinWordLen = QStoInt(dc.attribute("MINWORDLEN", "3"));
291
                doc->HyCount = QStoInt(dc.attribute("HYCOUNT", "2"));
292
                doc->Automatic = static_cast<bool>(QStoInt(dc.attribute("AUTOMATIC", "1")));
293
                doc->AutoCheck = static_cast<bool>(QStoInt(dc.attribute("AUTOCHECK", "0")));
294
                doc->GuideLock = static_cast<bool>(QStoInt(dc.attribute("GUIDELOCK", "0")));
295
                doc->BaseGrid = QStodouble(dc.attribute("BASEGRID", "12"));
296
                doc->BaseOffs = QStodouble(dc.attribute("BASEO", "0"));
297
                doc->minorGrid = QStodouble(dc.attribute("MINGRID", tmp.setNum(view->Prefs->DminGrid)));
298
                doc->majorGrid = QStodouble(dc.attribute("MAJGRID", tmp.setNum(view->Prefs->DmajGrid)));
299
                QDomNode PAGE=DOC.firstChild();
300
                counter = 0;
301
                while(!PAGE.isNull())
302
                {
303
                        ObCount++;
304
                        dia2->setProgress(ObCount);
305
                        QDomElement pg=PAGE.toElement();
306
                        // 10/25/2004 pv - None is "reserved" color. cannot be defined in any file...
307
                        if(pg.tagName()=="COLOR" && pg.attribute("NAME")!="None")
308
                        {
309
                                if (pg.hasAttribute("CMYK"))
310
                                        lf.setNamedColor(pg.attribute("CMYK"));
311
                                else
312
                                        lf.fromQColor(QColor(pg.attribute("RGB")));
313
                          doc->PageColors[pg.attribute("NAME")] = lf;
314
                        }
315
                        if(pg.tagName()=="STYLE")
316
                        {
317
                                vg.Vname = pg.attribute("NAME");
318
                                vg.LineSpa = QStodouble(pg.attribute("LINESP"));
319
                                vg.Indent = QStodouble(pg.attribute("INDENT","0"));
320
                                vg.First = QStodouble(pg.attribute("FIRST","0"));
321
                                vg.Ausri = QStoInt(pg.attribute("ALIGN"));
322
                                vg.Avor = QStodouble(pg.attribute("VOR","0"));
323
                                vg.Anach = QStodouble(pg.attribute("NACH","0"));
324
                                tmpf = pg.attribute("FONT", doc->Dfont);
325
                                if (tmpf == "")
326
                                        tmpf = doc->Dfont;
327
                                tmf = tmpf;
328
                                if (!DoFonts.contains(tmpf))
329
                                        tmpf = AskForFont(avail, tmpf, view->Prefs, doc);
330
                                else
331
                                        tmpf = DoFonts[tmf];
332
                                vg.Font = tmpf;
333
                                vg.FontSize = qRound(QStodouble(pg.attribute("FONTSIZE","12")) * 10.0);
334
                                vg.Drop = static_cast<bool>(QStoInt(pg.attribute("DROP","0")));
335
                                vg.DropLin = QStoInt(pg.attribute("DROPLIN","2"));
336
                                vg.FontEffect = QStoInt(pg.attribute("EFFECT","0"));
337
                                vg.FColor = pg.attribute("FCOLOR", doc->Dbrush);
338
                                vg.FShade = QStoInt(pg.attribute("FSHADE","100"));
339
                                vg.SColor = pg.attribute("SCOLOR", doc->Dpen);
340
                                vg.SShade = QStoInt(pg.attribute("SSHADE","100"));
341
                                vg.BaseAdj = static_cast<bool>(QStoInt(pg.attribute("BASE","0")));
342
                                if ((pg.hasAttribute("NUMTAB")) && (QStoInt(pg.attribute("NUMTAB","0")) != 0))
343
                                {
344
                                        tmp = pg.attribute("TABS");
345
                                        QTextStream tgv(&tmp, IO_ReadOnly);
346
                                        vg.TabValues.clear();
347
                                        for (int cxv = 0; cxv < QStoInt(pg.attribute("NUMTAB","0")); ++cxv)
348
                                        {
349
                                                tgv >> xf;
350
                                                vg.TabValues.append(xf);
351
                                        }
352
                                        tmp = "";
353
                                }
354
                                else
355
                                        vg.TabValues.clear();
356
                                doc->Vorlagen.append(vg);
357
                        }
358
                        if(pg.tagName()=="JAVA")
359
                                doc->JavaScripts[pg.attribute("NAME")] = pg.attribute("SCRIPT");
360
                        if(pg.tagName()=="LAYERS")
361
                        {
362
                                la.LNr = QStoInt(pg.attribute("NUMMER"));
363
                                la.Level = QStoInt(pg.attribute("LEVEL"));
364
                                la.Name = pg.attribute("NAME");
365
                                la.Sichtbar = QStoInt(pg.attribute("SICHTBAR"));
366
                                la.Drucken = QStoInt(pg.attribute("DRUCKEN"));
367
                                doc->Layers.append(la);
368
                        }
369
                        if(pg.tagName()=="Bookmark")
370
                        {
371
                                bok.Title = pg.attribute("Title");
372
                                bok.Text = pg.attribute("Text");
373
                                bok.Aktion = pg.attribute("Aktion");
374
                                bok.ItemNr = QStoInt(pg.attribute("ItemNr"));
375
                                bok.Seite = QStoInt(pg.attribute("Seite"));
376
                                bok.Element = QStoInt(pg.attribute("Element"));
377
                                bok.First = QStoInt(pg.attribute("First"));
378
                                bok.Last = QStoInt(pg.attribute("Last"));
379
                                bok.Prev = QStoInt(pg.attribute("Prev"));
380
                                bok.Next = QStoInt(pg.attribute("Next"));
381
                                bok.Parent = QStoInt(pg.attribute("Parent"));
382
                                doc->BookMarks.append(bok);
383
                        }
384
                        if(pg.tagName()=="MultiLine")
385
                        {
386
                                multiLine ml;
387
                                QDomNode MuLn = PAGE.firstChild();
388
                                while(!MuLn.isNull())
389
                                {
390
                                        QDomElement MuL = MuLn.toElement();
391
                                        struct singleLine sl;
392
                                        sl.Color = MuL.attribute("Color");
393
                                        sl.Dash = QStoInt(MuL.attribute("Dash"));
394
                                        sl.LineEnd = QStoInt(MuL.attribute("LineEnd"));
395
                                        sl.LineJoin = QStoInt(MuL.attribute("LineJoin"));
396
                                        sl.Shade = QStoInt(MuL.attribute("Shade"));
397
                                        sl.Width = QStodouble(MuL.attribute("Width"));
398
                                        ml.push_back(sl);
399
                                        MuLn = MuLn.nextSibling();
400
                                }
401
                                doc->MLineStyles.insert(pg.attribute("Name"), ml);
402
                        }
403
                        if ((pg.tagName()=="PAGE") || (pg.tagName()=="MASTERPAGE"))
404
                        {
405
                                a = QStoInt(pg.attribute("NUM"));
406
                                PgNam = "";
407
                                PgNam = pg.attribute("NAM", "");
408
                                Pgc = doc->PageC;
409
                                AtFl = doc->PageAT;
410
                                if (PgNam == "")
411
                                {
412
                                        doc->PageC = Pgc;
413
                                        doc->Pages = doc->DocPages;
414
                                        doc->PageAT = AtFl;
415
                                        doc->MasterP = false;
416
                                        doc->Items = doc->DocItems;
417
                                }
418
                                else
419
                                {
420
                                        doc->PageC = 0;
421
                                        doc->PageAT = false;
422
                                        doc->Pages = doc->MasterPages;
423
                                        doc->MasterP = true;
424
                                        doc->Items = doc->MasterItems;
425
                                }
426
                                app->slotNewPage(a);
427
                                Apage = doc->Pages.at(a);
428
                                if (PgNam == "")
429
                                {
430
                                        doc->DocPages = doc->Pages;
431
                                        doc->DocItems = doc->Items;
432
                                }
433
                                else
434
                                {
435
                                        Apage->PageNam = PgNam;
436
                                        doc->MasterNames[PgNam] = a;
437
                                        doc->MasterPages = doc->Pages;
438
                                        doc->MasterItems = doc->Items;
439
                                }
440
                                doc->MasterP = false;
441
                                doc->PageC = Pgc+1;
442
                                doc->PageAT = AtFl;
443
                                Apage->LeftPg=QStoInt(pg.attribute("LEFT","0"));
444
                                QString Mus = "";
445
                                Mus = pg.attribute("MNAM","Normal");
446
                                if (!doc->MasterP)
447
                                        Apage->MPageNam = Mus;
448
                                else
449
                                        Apage->MPageNam = "";
450
                                Apage->Width = QStodouble(pg.attribute("PAGEWITH"));
451
                                Apage->Height = QStodouble(pg.attribute("PAGEHEIGHT"));
452
                                Apage->Margins.Left = QStodouble(pg.attribute("BORDERLEFT"));
453
                                Apage->Margins.Right = QStodouble(pg.attribute("BORDERRIGHT"));
454
                                Apage->Margins.Top = QStodouble(pg.attribute("BORDERTOP"));
455
                                Apage->Margins.Bottom = QStodouble(pg.attribute("BORDERBOTTOM"));
456
                                doc->PageB = Apage->Width;
457
                                doc->PageH = Apage->Height;
458
                                doc->PageM.Left = Apage->Margins.Left;
459
                                doc->PageM.Right = Apage->Margins.Right;
460
                                doc->PageM.Top = Apage->Margins.Top;
461
                                doc->PageM.Bottom = Apage->Margins.Bottom;
462
                                if ((pg.hasAttribute("NumVGuides")) && (QStoInt(pg.attribute("NumVGuides","0")) != 0))
463
                                {
464
                                        tmp = pg.attribute("VerticalGuides");
465
                                        QTextStream fgv(&tmp, IO_ReadOnly);
466
                                        Apage->YGuides.clear();
467
                                        for (int cxv = 0; cxv < QStoInt(pg.attribute("NumVGuides","0")); ++cxv)
468
                                        {
469
                                                fgv >> xf;
470
                                                Apage->YGuides.append(xf);
471
                                        }
472
                                        qHeapSort(Apage->YGuides);
473
                                        tmp = "";
474
                                }
475
                                else
476
                                        Apage->YGuides.clear();
477
                                if ((pg.hasAttribute("NumHGuides")) && (QStoInt(pg.attribute("NumHGuides","0")) != 0))
478
                                {
479
                                        tmp = pg.attribute("HorizontalGuides");
480
                                        QTextStream fgh(&tmp, IO_ReadOnly);
481
                                        Apage->XGuides.clear();
482
                                        for (int cxh = 0; cxh < QStoInt(pg.attribute("NumHGuides","0")); ++cxh)
483
                                        {
484
                                                fgh >> xf;
485
                                                Apage->XGuides.append(xf);
486
                                        }
487
                                        qHeapSort(Apage->XGuides);
488
                                        tmp = "";
489
                                }
490
                                else
491
                                        Apage->XGuides.clear();
492
                                }
493
                        if ((pg.tagName()=="PAGEOBJECT") || (pg.tagName()=="MASTEROBJECT"))
494
                        {
495
                                        if (pg.tagName()=="PAGEOBJECT")
496
                                                doc->Items = doc->DocItems;
497
                                        else
498
                                                doc->Items = doc->MasterItems;
499
                                        if ((QStoInt(pg.attribute("NEXTITEM")) != -1) || (static_cast<bool>(QStoInt(pg.attribute("AUTOTEXT")))))
500
                                        {
501
                                                if (QStoInt(pg.attribute("BACKITEM")) == -1)
502
                                                {
503
                                                        Link.Start = counter;
504
                                                        LFrames.append(Link);
505
                                                }
506
                                        }
507
                                        GetItemProps(newVersion, &pg, &OB);
508
                                        OB.Xpos = QStodouble(pg.attribute("XPOS"));
509
                                        OB.Ypos=QStodouble(pg.attribute("YPOS"));
510
                                        OB.NamedLStyle = pg.attribute("NAMEDLST", "");
511
                                        OB.isBookmark=QStoInt(pg.attribute("BOOKMARK"));
512
                                        if ((OB.isBookmark) && (doc->BookMarks.count() == 0))
513
                                                doc->OldBM = true;
514
                                        OB.BMnr = QStoInt(pg.attribute("BookNr","0"));
515
                                        OB.Ausrich = QStoInt(pg.attribute("ALIGN","0"));
516
                                        tmpf = pg.attribute("IFONT", doc->Dfont);
517
                                        if (tmpf == "")
518
                                                tmpf = doc->Dfont;
519
                                        tmf = tmpf;
520
                                        if (!DoFonts.contains(tmpf))
521
                                                tmpf = AskForFont(avail, tmpf, view->Prefs, doc);
522
                                        else
523
                                                tmpf = DoFonts[tmf];
524
                                        OB.IFont = tmpf;
525
                                        OB.LayerNr = QStoInt(pg.attribute("LAYER","0"));
526
                                        OB.Language = pg.attribute("LANGUAGE", doc->Language);
527
                                        tmp = "";
528
                                        if ((pg.hasAttribute("GROUPS")) && (QStoInt(pg.attribute("NUMGROUP","0")) != 0))
529
                                        {
530
                                                tmp = pg.attribute("GROUPS");
531
                                                QTextStream fg(&tmp, IO_ReadOnly);
532
                                                OB.Groups.clear();
533
                                                for (int cx = 0; cx < QStoInt(pg.attribute("NUMGROUP","0")); ++cx)
534
                                                {
535
                                                        fg >> x;
536
                                                        OB.Groups.push(x);
537
                                                }
538
                                                tmp = "";
539
                                        }
540
                                        else
541
                                                OB.Groups.clear();
542
                                        QDomNode IT=pg.firstChild();
543
                                        while(!IT.isNull())
544
                                        {
545
                                                QDomElement it=IT.toElement();
546
                                                if (it.tagName()=="CSTOP")
547
                                                {
548
                                                        QString name = it.attribute("NAME");
549
                                                        double ramp = QStodouble(it.attribute("RAMP","0.0"));
550
                                                        int shade = QStoInt(it.attribute("SHADE","100"));
551
                                                        double opa = QStodouble(it.attribute("TRANS","1"));
552
                                                        OB.fill_gradient.addStop(SetFarbe(doc, name, shade), ramp, 0.5, opa, name, shade);
553
                                                }
554
                                                if (it.tagName()=="ITEXT")
555
                                                        tmp += GetItemText(&it, doc, view->Prefs, false, false);
556
                                                IT=IT.nextSibling();
557
                                        }
558
                                        OB.Ptext = tmp;
559
                                        int docGc = doc->GroupCounter;
560
                                        doc->GroupCounter = 0;
561
                                        if ((OB.PType == 5) && (OB.Height != 0))
562
                                        {
563
                                                OB.Rot += atan2(OB.Height,OB.Width)*(180.0/3.1415927);
564
                                                OB.Width = sqrt(pow(OB.Width,2)+pow(OB.Height,2));
565
                                                OB.Height = 0;
566
                                                OB.Clip.setPoints(4, -1,-1, static_cast<int>(OB.Width+1),-1, static_cast<int>(OB.Width+1),
567
                                                                                         static_cast<int>(OB.Height+1), -1, static_cast<int>(OB.Height+1));
568
                                        }
569
                                        uint last = doc->Items.count();
570
                                        view->PasteItem(&OB, true);
571
                                        doc->GroupCounter = docGc;
572
                                        Neu = doc->Items.at(last);
573
                                        Neu->isAutoText=static_cast<bool>(QStoInt(pg.attribute("AUTOTEXT")));
574
                                        if (Neu->isAutoText)
575
                                                doc->LastAuto = Neu;
576
                                        Neu->NextIt = QStoInt(pg.attribute("NEXTITEM"));
577
                                        Neu->NextPg = QStoInt(pg.attribute("NEXTPAGE"));
578
                                        if (Neu->isTableItem)
579
                                        {
580
                                                TableItems.append(Neu);
581
                                                TableID.insert(QStoInt(pg.attribute("OwnLINK","0")), Neu->ItemNr);
582
                                        }
583
                                        if (pg.tagName()=="PAGEOBJECT")
584
                                                doc->DocItems = doc->Items;
585
                                        else
586
                                                doc->MasterItems = doc->Items;
587
                                        counter++;
588
                                }
589
                        PAGE=PAGE.nextSibling();
590
                }
591
                PAGE=DOC.firstChild();
592
                while(!PAGE.isNull())
593
                {
594
                        QDomElement pg=PAGE.toElement();
595
                        if(pg.tagName()=="PDF")
596
                        {
597
                                doc->PDF_Optionen.Articles = static_cast<bool>(QStoInt(pg.attribute("Articles")));
598
                                doc->PDF_Optionen.Thumbnails = static_cast<bool>(QStoInt(pg.attribute("Thumbnails")));
599
                                doc->PDF_Optionen.Compress = static_cast<bool>(QStoInt(pg.attribute("Compress")));
600
                                doc->PDF_Optionen.CompressMethod = QStoInt(pg.attribute("CMethod","0"));
601
                                doc->PDF_Optionen.Quality = QStoInt(pg.attribute("Quality","0"));
602
                                doc->PDF_Optionen.RecalcPic = static_cast<bool>(QStoInt(pg.attribute("RecalcPic")));
603
                                doc->PDF_Optionen.Bookmarks = static_cast<bool>(QStoInt(pg.attribute("Bookmarks")));
604
                                if (pg.hasAttribute("MirrorH"))
605
                                        doc->PDF_Optionen.MirrorH = static_cast<bool>(QStoInt(pg.attribute("MirrorH")));
606
                                else
607
                                        doc->PDF_Optionen.MirrorH = false;
608
                                if (pg.hasAttribute("MirrorV"))
609
                                        doc->PDF_Optionen.MirrorV = static_cast<bool>(QStoInt(pg.attribute("MirrorV")));
610
                                else
611
                                        doc->PDF_Optionen.MirrorV = false;
612
                                if (pg.hasAttribute("RotateDeg"))
613
                                        doc->PDF_Optionen.RotateDeg = QStoInt(pg.attribute("RotateDeg","0"));
614
                                else
615
                                        doc->PDF_Optionen.RotateDeg = 0;
616
                                doc->PDF_Optionen.PresentMode = static_cast<bool>(QStoInt(pg.attribute("PresentMode")));
617
                                doc->PDF_Optionen.PicRes = QStoInt(pg.attribute("PicRes"));
618
                                doc->PDF_Optionen.Version = QStoInt(pg.attribute("Version"));
619
                                doc->PDF_Optionen.Resolution = QStoInt(pg.attribute("Resolution"));
620
                                doc->PDF_Optionen.Binding = QStoInt(pg.attribute("Binding"));
621
                                doc->PDF_Optionen.Datei = "";
622
                                doc->PDF_Optionen.UseRGB = static_cast<bool>(QStoInt(pg.attribute("RGBMode","0")));
623
                                doc->PDF_Optionen.UseProfiles = static_cast<bool>(QStoInt(pg.attribute("UseProfiles","0")));
624
                                doc->PDF_Optionen.UseProfiles2 = static_cast<bool>(QStoInt(pg.attribute("UseProfiles2","0")));
625
                                doc->PDF_Optionen.Intent = QStoInt(pg.attribute("Intent","1"));
626
                                doc->PDF_Optionen.Intent2 = QStoInt(pg.attribute("Intent2","1"));
627
                                doc->PDF_Optionen.SolidProf = pg.attribute("SolidP", "");
628
                                doc->PDF_Optionen.ImageProf = pg.attribute("ImageP", "");
629
                                doc->PDF_Optionen.PrintProf = pg.attribute("PrintP", "");
630
                                doc->PDF_Optionen.Info = pg.attribute("InfoString", "");
631
                                doc->PDF_Optionen.BleedTop = QStodouble(pg.attribute("BTop","0"));
632
                                doc->PDF_Optionen.BleedLeft = QStodouble(pg.attribute("BLeft","0"));
633
                                doc->PDF_Optionen.BleedRight = QStodouble(pg.attribute("BRight","0"));
634
                                doc->PDF_Optionen.BleedBottom = QStodouble(pg.attribute("BBottom","0"));
635
                                doc->PDF_Optionen.EmbeddedI = static_cast<bool>(QStoInt(pg.attribute("ImagePr","0")));
636
                                doc->PDF_Optionen.PassOwner = pg.attribute("PassOwner", "");
637
                                doc->PDF_Optionen.PassUser = pg.attribute("PassUser", "");
638
                                doc->PDF_Optionen.Permissions = QStoInt(pg.attribute("Permissions","-4"));
639
                                doc->PDF_Optionen.Encrypt = static_cast<bool>(QStoInt(pg.attribute("Encrypt","0")));
640
                                doc->PDF_Optionen.UseLPI = static_cast<bool>(QStoInt(pg.attribute("UseLpi","0")));
641
                                QDomNode PFO = PAGE.firstChild();
642
                                while(!PFO.isNull())
643
                                {
644
                                        QDomElement pdfF = PFO.toElement();
645
                                        if(pdfF.tagName() == "LPI")
646
                                        {
647
                                                struct LPIset lpo;
648
                                                lpo.Angle = QStoInt(pdfF.attribute("Angle"));
649
                                                lpo.Frequency = QStoInt(pdfF.attribute("Frequency"));
650
                                                lpo.SpotFunc = QStoInt(pdfF.attribute("SpotFunction"));
651
                                                doc->PDF_Optionen.LPISettings[pdfF.attribute("Color")] = lpo;
652
                                        }
653
                                        if(pdfF.tagName() == "Fonts")
654
                                        {
655
                                                if (!doc->PDF_Optionen.EmbedList.contains(DoFonts[pdfF.attribute("Name")]))
656
                                                        doc->PDF_Optionen.EmbedList.append(DoFonts[pdfF.attribute("Name")]);
657
                                        }
658
                                        if(pdfF.tagName() == "Subset")
659
                                        {
660
                                                if (!doc->PDF_Optionen.SubsetList.contains(DoFonts[pdfF.attribute("Name")]))
661
                                                        doc->PDF_Optionen.SubsetList.append(DoFonts[pdfF.attribute("Name")]);
662
                                        }
663
                                        if(pdfF.tagName() == "Effekte")
664
                                        {
665
                                        struct PreSet ef;
666
                                        ef.EffektLen = QStoInt(pdfF.attribute("EffektLen"));
667
                                        ef.AnzeigeLen = QStoInt(pdfF.attribute("AnzeigeLen"));
668
                                        ef.Effekt = QStoInt(pdfF.attribute("Effekt"));
669
                                        ef.Dm = QStoInt(pdfF.attribute("Dm"));
670
                                        ef.M = QStoInt(pdfF.attribute("M"));
671
                                        ef.Di = QStoInt(pdfF.attribute("Di"));
672
                                                doc->PDF_Optionen.PresentVals.append(ef);
673
                                        }
674
                                        PFO = PFO.nextSibling();
675
                                }
676
                        }
677
                        PAGE=PAGE.nextSibling();
678
                }
679
                DOC=DOC.nextSibling();
680
        }
681
        if (TableItems.count() != 0)
682
        {
683
                for (uint ttc = 0; ttc < TableItems.count(); ++ttc)
684
                {
685
                        PageItem* ta = TableItems.at(ttc);
686
                        if (ta->TopLinkID != -1)
687
                                ta->TopLink = doc->Items.at(TableID[ta->TopLinkID]);
688
                        else
689
                                ta->TopLink = 0;
690
                        if (ta->LeftLinkID != -1)
691
                                ta->LeftLink = doc->Items.at(TableID[ta->LeftLinkID]);
692
                        else
693
                                ta->LeftLink = 0;
694
                        if (ta->RightLinkID != -1)
695
                                ta->RightLink = doc->Items.at(TableID[ta->RightLinkID]);
696
                        else
697
                                ta->RightLink = 0;
698
                        if (ta->BottomLinkID != -1)
699
                                ta->BottomLink = doc->Items.at(TableID[ta->BottomLinkID]);
700
                        else
701
                                ta->BottomLink = 0;
702
                }
703
        }
704
        doc->Pages = doc->DocPages;
705
        doc->PageC = doc->Pages.count();
706
        doc->Items = doc->DocItems;
707
        doc->MasterP = false;
708
        view->reformPages();
709
        if (doc->Layers.count() == 0)
710
        {
711
                la.LNr = 0;
712
                la.Level = 0;
713
                la.Name = QObject::tr("Background");
714
                la.Sichtbar = true;
715
                la.Drucken = true;
716
                doc->Layers.append(la);
717
        }
718
        if (LFrames.count() != 0)
719
        {
720
                PageItem *Its;
721
                PageItem *Itn;
722
                PageItem *Itr;
723
                QValueList<Linked>::Iterator lc;
724
                for (lc = LFrames.begin(); lc != LFrames.end(); ++lc)
725
                {
726
                        Its = doc->Items.at((*lc).Start);
727
                        Itr = Its;
728
                        Its->BackBox = 0;
729
                        if (Its->isAutoText)
730
                                doc->FirstAuto = Its;
731
                        while (Its->NextIt != -1)
732
                        {
733
                                int itnr = 0;
734
                                for (uint nn = 0; nn < doc->Items.count(); ++nn)
735
                                {
736
                                        if (doc->Items.at(nn)->OwnPage == Its->NextPg)
737
                                        {
738
                                                if (itnr == Its->NextIt)
739
                                                {
740
                                                        itnr = nn;
741
                                                        break;
742
                                                }
743
                                                itnr++;
744
                                        }
745
                                }
746
                                Itn = doc->Items.at(itnr);
747
                                Its->NextBox = Itn;
748
                                Itn->BackBox = Its;
749
                                Its = Itn;
750
                        }
751
                        Its->NextBox = 0;
752
                }
753
        }
754
        view->UN->setText(doc->Einheit == 0 ? "pt" : "mm");
755
        dia2->setProgress(DOC.childNodes().count());
756
        return true;
757
}
758
 
759
QString FileLoader::GetItemText(QDomElement *it, ScribusDoc *doc, preV *Prefs, bool VorLFound, bool impo)
760
{
761
        QString tmp2, tmf, tmpf, tmp3, tmp;
762
        tmp = "";
763
        tmp2 = it->attribute("CH");
764
        tmp2.replace(QRegExp("\r"), QChar(5));
765
        tmp2.replace(QRegExp("\n"), QChar(5));
766
        tmp2.replace(QRegExp("\t"), QChar(4));
767
        tmpf = it->attribute("CFONT", doc->Dfont);
768
        if (tmpf == "")
769
                tmpf = doc->Dfont;
770
        tmf = tmpf;
771
        if (!DoFonts.contains(tmpf))
772
                tmpf = AskForFont(Prefs->AvailFonts, tmpf, Prefs, doc);
773
        else
774
                tmpf = DoFonts[tmf];
775
        tmp3 = "\t" + tmpf + "\t";
776
        tmp3 += it->attribute("CSIZE") + "\t";
777
        tmp3 += it->attribute("CCOLOR") + "\t";
778
        tmp3 += it->attribute("CEXTRA") + "\t";
779
        tmp3 += it->attribute("CSHADE") + "\t";
780
        tmp3 += it->attribute("CSTYLE") + "\t";
781
        if (impo)
782
        {
783
                if (VorLFound)
784
                        tmp3 += DoVorl[it->attribute("CAB","0").toUInt()] + "\t";
785
                else
786
                {
787
                        if (it->attribute("CAB","0").toUInt() < 5)
788
                                tmp3 += it->attribute("CAB","0")+"\t";
789
                        else
790
                                tmp3 += "0\t";
791
                }
792
        }
793
        else
794
                tmp3 += it->attribute("CAB","0") + "\t";
795
        tmp3 += it->attribute("CSTROKE","None") + "\t";
796
        tmp3 += it->attribute("CSHADE2","100") + "\t";
797
        tmp3 += it->attribute("CSCALE","100") + "\n";
798
        for (uint cxx=0; cxx<tmp2.length(); ++cxx)
799
                tmp += tmp2.at(cxx)+tmp3;
800
        return tmp;
801
}
802
 
803
QString FileLoader::AskForFont(SCFonts &avail, QString fStr, preV *Prefs, ScribusDoc *doc)
804
{
805
        QFont fo;
806
        QString tmpf = fStr;
807
        if ((!avail.find(tmpf)) || (!avail[tmpf]->UseFont))
808
        {
809
                if ((!Prefs->GFontSub.contains(tmpf)) || (!avail[Prefs->GFontSub[tmpf]]->UseFont))
810
                {
811
                        qApp->setOverrideCursor(QCursor(Qt::arrowCursor), true);
812
                        DmF *dia = new DmF(0, tmpf, Prefs);
813
                        dia->exec();
814
                        tmpf = dia->Ersatz;
815
                        delete dia;
816
                        qApp->setOverrideCursor(QCursor(Qt::waitCursor), true);
817
                        Prefs->GFontSub[fStr] = tmpf;
818
                }
819
                else
820
                        tmpf = Prefs->GFontSub[tmpf];
821
        }
822
        fo = avail[tmpf]->Font;
823
        fo.setPointSize(qRound(doc->Dsize / 10.0));
824
        doc->AddFont(tmpf, fo);
825
        DoFonts[fStr] = tmpf;
826
        return tmpf;
827
}