Subversion Repositories Scribus

Rev

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

Rev Author Line No. Line
3 paul 1
/***************************************************************************
2
                          scribusdoc.cpp  -  description
3
                             -------------------
4
    begin                : Fre Apr  6 21:47:55 CEST 2001
5
    copyright            : (C) 2001 by Franz Schmid
6
    email                : Franz.Schmid@altmuehlnet.de
7
 ***************************************************************************/
8
 
9
/***************************************************************************
10
 *                                                                         *
11
 *   This program is free software; you can redistribute it and/or modify  *
12
 *   it under the terms of the GNU General Public License as published by  *
13
 *   the Free Software Foundation; either version 2 of the License, or     *
14
 *   (at your option) any later version.                                   *
15
 *                                                                         *
16
 ***************************************************************************/
17
 
18
#include "scribusdoc.h"
410 Franz 19
#include "scribusXml.h"
20
#include "scribus.h"
456 fschmid 21
#include "page.h"
22
#include "pageitem.h"
23
#include <qfile.h> 
410 Franz 24
 
823 fschmid 25
ScribusDoc::ScribusDoc(struct preV *prefsData)
3 paul 26
{
823 fschmid 27
        prefsValues = prefsData;
167 Franz 28
        modified = false;
29
        MasterP = false;
823 fschmid 30
        UsedFonts.clear();
31
        FT_Init_FreeType( &library );
32
        AllFonts = &prefsData->AvailFonts;
33
        AddFont(prefsData->DefFont, prefsData->AvailFonts[prefsData->DefFont]->Font);
34
        Dfont = prefsData->DefFont;
35
        Dsize = prefsData->DefSize;
36
        GrabRad = prefsData->GrabRad;
37
        GuideRad = prefsData->GuideRad;
38
        minorGrid = prefsData->DminGrid;
39
        majorGrid = prefsData->DmajGrid;
40
        minorColor = prefsData->DminColor;
41
        majorColor = prefsData->DmajColor;
42
        papColor = prefsData->DpapColor;
43
        margColor = prefsData->DmargColor;
44
        guideColor = prefsData->guideColor;
45
        baseColor = prefsData->baseColor;
46
        PageColors.clear();
47
        PageColors.insert("Black", CMYKColor(0, 0, 0, 255));
48
        PageColors.insert("White", CMYKColor(0, 0, 0, 0));
49
        if (prefsData->Dpen != "None")
50
                PageColors.insert(prefsData->Dpen, prefsData->DColors[prefsData->Dpen]);
51
        Dpen = prefsData->Dpen;
52
        if (prefsData->DpenLine != "None")
53
                PageColors.insert(prefsData->DpenLine, prefsData->DColors[prefsData->DpenLine]);
54
        DpenLine = prefsData->DpenLine;
55
        if (prefsData->DpenText != "None")
56
                PageColors.insert(prefsData->DpenText, prefsData->DColors[prefsData->DpenText]);
57
        DpenText = prefsData->DpenText;
58
        if (prefsData->DstrokeText != "None")
59
                PageColors.insert(prefsData->DstrokeText, prefsData->DColors[prefsData->DstrokeText]);
60
        DstrokeText = prefsData->DstrokeText;
61
        if (prefsData->Dbrush != "None")
62
                PageColors.insert(prefsData->Dbrush, prefsData->DColors[prefsData->Dbrush]);
63
        Dbrush = prefsData->Dbrush;
64
        if (prefsData->DbrushPict != "None")
65
                PageColors.insert(prefsData->DbrushPict, prefsData->DColors[prefsData->DbrushPict]);
66
        DbrushPict = prefsData->DbrushPict;
67
        typographicSetttings.valueSuperScript = prefsData->typographicSetttings.valueSuperScript;
68
        typographicSetttings.scalingSuperScript = prefsData->typographicSetttings.scalingSuperScript;
69
        typographicSetttings.valueSubScript = prefsData->typographicSetttings.valueSubScript;
70
        typographicSetttings.scalingSubScript = prefsData->typographicSetttings.scalingSubScript;
71
        typographicSetttings.valueSmallCaps = prefsData->typographicSetttings.valueSmallCaps;
72
        typographicSetttings.autoLineSpacing = prefsData->typographicSetttings.autoLineSpacing;
73
        typographicSetttings.valueBaseGrid = prefsData->typographicSetttings.valueBaseGrid;
74
        typographicSetttings.offsetBaseGrid = prefsData->typographicSetttings.offsetBaseGrid;
75
        Dshade = prefsData->Dshade;
76
        Dshade2 = prefsData->Dshade2;
77
        ShadePict = prefsData->ShadePict;
78
        ScaleX = prefsData->ScaleX;
79
        ScaleY = prefsData->ScaleY;
80
        ScaleType = prefsData->ScaleType;
81
        AspectRatio = prefsData->AspectRatio;
82
        DCols = prefsData->DCols;
83
        DGap = prefsData->DGap;
84
        DLineArt = PenStyle(prefsData->DLineArt);
85
        Dwidth = prefsData->Dwidth;
86
        DshadeLine = prefsData->DshadeLine;
87
        DLstyleLine = PenStyle(prefsData->DLstyleLine);
88
        DwidthLine = prefsData->DwidthLine;
89
        DstartArrow = prefsData->DstartArrow;
90
        DendArrow = prefsData->DendArrow;
91
        PolyC = prefsData->PolyC;
92
        PolyF = prefsData->PolyF;
93
        PolyS = prefsData->PolyS;
94
        PolyFd = prefsData->PolyFd;
95
        PolyR = prefsData->PolyR;
96
        MagMin = prefsData->MagMin;
97
        MagMax = prefsData->MagMax;
98
        MagStep = prefsData->MagStep;
99
        Before = prefsData->Before;
100
        Einheit = prefsData->Einheit;
101
        RandFarbig = prefsData->RandFarbig;
102
        Language = prefsData->Language;
103
        MinWordLen = prefsData->MinWordLen;
104
        HyCount = prefsData->HyCount;
105
        Automatic = prefsData->Automatic;
106
        AutoCheck = prefsData->AutoCheck;
107
        MarginsShown = prefsData->MarginsShown;
108
        FramesShown = prefsData->FramesShown;
109
        GridShown = prefsData->GridShown;
110
        GuidesShown = prefsData->GuidesShown;
111
        BaseShown = prefsData->BaseShown;
112
        linkShown = prefsData->linkShown;
3 paul 113
        GuideLock = false;
114
        SnapGuides = false;
167 Franz 115
        ShowPic = true;
116
        useRaster = false;
117
        EditClip = false;
118
        EditClipMode = 0;
119
        loading = false;
178 Franz 120
        DocName = QObject::tr("Document")+"-";
3 paul 121
        CurrentSel = -1;
122
        DocTitel = "";
123
        DocAutor = "";
124
        DocComments = "";
68 Franz 125
        DocKeyWords = "";
330 Franz 126
        DocPublisher = "";
127
        DocDate = "";
128
        DocType = "";
129
        DocFormat = "";
130
        DocIdent = "";
131
        DocSource = "";
132
        DocLangInfo = "";
133
        DocRelation = "";
134
        DocCover = "";
135
        DocRights = "";
136
        DocContrib = "";
3 paul 137
        PageC = 0;
138
        LastAuto = 0;
139
        FirstAuto = 0;
140
        DraggedElem = 0;
141
        GroupCounter = 1;
142
        Vorlagen.clear();
143
        struct StVorL vg;
144
        vg.Vname = "Normal Internal";
145
        vg.LineSpa = 15;
146
        vg.Ausri = 0;
147
        vg.Indent = 0;
148
        vg.First = 0;
149
        vg.Avor = 0;
150
        vg.Anach = 0;
151
        vg.Font = "";
152
        vg.FontSize = Dsize;
140 Franz 153
        vg.TabValues.clear();
153 Franz 154
        vg.Drop = false;
155
        vg.DropLin = 2;
173 Franz 156
        vg.FontEffect = 0;
157
        vg.FColor = Dbrush;
158
        vg.FShade = Dshade;
159
        vg.SColor = Dpen;
160
        vg.SShade = Dshade2;
241 Franz 161
        vg.BaseAdj = false;
3 paul 162
        Vorlagen.append(vg);
163
        vg.Vname = "Center Internal";
164
        vg.Ausri = 1;
165
        Vorlagen.append(vg);
166
        vg.Vname = "Rechts Internal";
167
        vg.Ausri = 2;
168
        Vorlagen.append(vg);
169
        vg.Vname = "Block Internal";
170
        vg.Ausri = 3;
171
        Vorlagen.append(vg);
172
        vg.Vname = "EBlock Internal";
173
        vg.Ausri = 4;
174
        Vorlagen.append(vg);
175
        Layers.clear();
176
        struct Layer ll;
177
        ll.LNr = 0;
178
        ll.Level = 0;
178 Franz 179
        ll.Name = QObject::tr("Background");
3 paul 180
        ll.Sichtbar = true;
181
        ll.Drucken = true;
182
        Layers.append(ll);
183
        ActiveLayer = 0;
184
        JavaScripts.clear();
185
        UnDoValid = false;
186
        UnData.UnCode = -1;
167 Franz 187
        CurrentStyle = 0;
188
        CurrentABStil = 0;
3 paul 189
        TotalItems = 0;
190
        TemplateMode = false;
191
        PDF_Optionen.Thumbnails = false;
192
        PDF_Optionen.Articles = false;
193
        PDF_Optionen.Compress = true;
202 Franz 194
        PDF_Optionen.CompressMethod = 0;
195
        PDF_Optionen.Quality = 0;
3 paul 196
        PDF_Optionen.RecalcPic = false;
197
        PDF_Optionen.Bookmarks = false;
198
        PDF_Optionen.PicRes = 300;
203 Franz 199
        PDF_Optionen.Version = 14;
3 paul 200
        PDF_Optionen.Resolution = 300;
201
        PDF_Optionen.Binding = 0;
202
        PDF_Optionen.EmbedList.clear();
476 fschmid 203
        PDF_Optionen.SubsetList.clear();
420 Franz 204
        PDF_Optionen.MirrorH = false;
469 fschmid 205
        PDF_Optionen.MirrorV = false;
454 fschmid 206
        PDF_Optionen.RotateDeg = 0;
3 paul 207
        PDF_Optionen.PresentMode = false;
208
        PDF_Optionen.Datei = "";
209
        PDF_Optionen.PresentVals.clear();
203 Franz 210
        PDF_Optionen.UseRGB = true;
3 paul 211
        PDF_Optionen.UseProfiles = false;
212
        PDF_Optionen.UseProfiles2 = false;
213
        PDF_Optionen.SolidProf = "";
214
        PDF_Optionen.SComp = 3;
215
        PDF_Optionen.ImageProf = "";
216
        PDF_Optionen.PrintProf = "";
217
        PDF_Optionen.Info = "";
218
        PDF_Optionen.Intent = 0;
219
        PDF_Optionen.Intent2 = 0;
220
        PDF_Optionen.BleedTop = 0;
221
        PDF_Optionen.BleedLeft = 0;
222
        PDF_Optionen.BleedRight = 0;
223
        PDF_Optionen.BleedBottom = 0;
224
        PDF_Optionen.EmbeddedI = false;
225
        PDF_Optionen.Encrypt = false;
226
        PDF_Optionen.PassOwner = "";
227
        PDF_Optionen.PassUser = "";
228
        PDF_Optionen.Permissions = -4;
337 Franz 229
        PDF_Optionen.UseLPI = false;
230
        PDF_Optionen.LPISettings.clear();
3 paul 231
        RePos = false;
232
        BookMarks.clear();
233
        OldBM = false;
234
        hasName = false;
63 Franz 235
        DoDrawing = true;
3 paul 236
        RotMode = 0;
123 Franz 237
        SubMode = -1;
3 paul 238
        ASaveTimer = new QTimer(this);
27 Franz 239
        MLineStyles.clear();
456 fschmid 240
        Pages.clear();
241
        MasterPages.clear();
242
        DocPages.clear();
243
        Items.clear();
244
        MasterItems.clear();
245
        DocItems.clear();
823 fschmid 246
        ScratchLeft = prefsData->ScratchLeft;
247
        ScratchRight = prefsData->ScratchRight;
248
        ScratchTop = prefsData->ScratchTop;
249
        ScratchBottom = prefsData->ScratchBottom;
250
        arrowStyles = prefsData->arrowStyles;
3 paul 251
}
252
 
253
ScribusDoc::~ScribusDoc()
254
{
456 fschmid 255
        MasterItems.setAutoDelete(true);
256
        DocItems.setAutoDelete(true);
257
        MasterItems.clear();
258
        DocItems.clear();
259
        MasterPages.setAutoDelete(true);
260
        DocPages.setAutoDelete(true);
261
        MasterPages.clear();
262
        DocPages.clear();
494 fschmid 263
        QMap<QString,QFont>::Iterator it3;
264
        for (it3 = UsedFonts.begin(); it3 != UsedFonts.end(); ++it3)
265
        {
266
                if ((*AllFonts)[it3.key()]->PrivateFont != "")
267
                        (*AllFonts).removeFont(it3.key());
268
        }
3 paul 269
        FT_Done_FreeType( library );
270
}
271
 
456 fschmid 272
/*
273
 * Split out from loadStyles in editFormats.cpp so it's callable from anywhere,
274
 * including plugins.
275
 * - 2004-09-14 Craig Ringer
276
 */
277
void ScribusDoc::loadStylesFromFile(QString fileName, QValueList<StVorL> *tempStyles)
278
{
279
        // This won't create the QValueList<StVorL> will it?
280
        QValueList<StVorL> *wrkStyles = NULL;
281
        /*
282
         * Use the working styles struct if passed, or work directly
283
         * on the document styles otherwise. Note that tempStyles,
284
         * if passed, MUST have the first five styles initialised already
285
         * or this function will segfault.
286
         */
287
        if (tempStyles != NULL)
288
                wrkStyles = tempStyles;
289
         else
290
                wrkStyles = &Vorlagen;
291
        if (!fileName.isEmpty())
292
        {
293
                ScriXmlDoc *ss = new ScriXmlDoc();
294
                ss->Vorlagen.clear();
295
                for (uint x = 5; x < wrkStyles->count(); ++x)
296
                        ss->Vorlagen.append((*wrkStyles)[x]);
297
                uint old = wrkStyles->count()-5;
823 fschmid 298
                if (ss->ReadStyles(fileName, this, prefsValues))
456 fschmid 299
                {
300
                        if (ss->Vorlagen.count() > old)
301
                        {
302
                                for (uint xx=old; xx<ss->Vorlagen.count(); ++xx)
303
                                {
304
                                        struct StVorL sty;
305
                                        sty.Vname = ss->Vorlagen[xx].Vname;
306
                                        sty.LineSpa = ss->Vorlagen[xx].LineSpa;
307
                                        sty.Ausri = ss->Vorlagen[xx].Ausri;
308
                                        sty.Indent = ss->Vorlagen[xx].Indent;
309
                                        sty.First = ss->Vorlagen[xx].First;
310
                                        sty.Avor = ss->Vorlagen[xx].Avor;
311
                                        sty.Anach = ss->Vorlagen[xx].Anach;
312
                                        sty.Font = ss->Vorlagen[xx].Font;
313
                                        sty.FontSize = ss->Vorlagen[xx].FontSize;
314
                                        sty.TabValues = ss->Vorlagen[xx].TabValues;
315
                                        sty.Drop = ss->Vorlagen[xx].Drop;
316
                                        sty.DropLin = ss->Vorlagen[xx].DropLin;
317
                                        sty.FontEffect = ss->Vorlagen[xx].FontEffect;
318
                                        sty.FColor = ss->Vorlagen[xx].FColor;
319
                                        sty.FShade = ss->Vorlagen[xx].FShade;
320
                                        sty.SColor = ss->Vorlagen[xx].SColor;
321
                                        sty.SShade = ss->Vorlagen[xx].SShade;
322
                                        sty.BaseAdj = ss->Vorlagen[xx].BaseAdj;
323
                                        wrkStyles->append(sty);
324
                                }
325
                        }
326
                }
327
                delete ss;
328
        }
329
}
330
 
3 paul 331
void ScribusDoc::setModified()
332
{
333
        modified = true;
334
}
335
 
336
void ScribusDoc::setUnModified()
337
{
338
        modified = false;
339
}
340
 
341
bool ScribusDoc::isModified() const
342
{
343
  return modified;
344
}
345
/** Setzt die Seitenattribute */
80 Franz 346
void ScribusDoc::setPage(double b, double h, double t, double l, double r, double bo, double sp, double ab, bool atf, bool fp)
3 paul 347
{
348
        PageB = b;
349
        PageH = h;
350
        PageM.Top = t;
351
        PageM.Left = l;
352
        PageM.Right = r;
353
        PageM.Bottom = bo;
354
        PageSp = sp;
355
        PageSpa = ab;
356
        PageFP = fp;
357
        PageAT = atf;
358
}
359
 
80 Franz 360
void ScribusDoc::resetPage(double t, double l, double r, double bo, bool fp)
3 paul 361
{
362
        PageM.Top = t;
363
        PageM.Left = l;
364
        PageM.Right = r;
365
        PageM.Bottom = bo;
366
        PageFP = fp;
367
}
368
 
220 Franz 369
bool ScribusDoc::AddFont(QString name, QFont fo)
3 paul 370
{
220 Franz 371
        bool ret = false;
372
        bool error;
3 paul 373
        FT_Face      face;
220 Franz 374
        error = FT_New_Face( library, (*AllFonts)[name]->Datei, 0, &face );
375
        if (error)
376
                return ret;
377
        if ((*AllFonts)[name]->ReadMetrics())
167 Franz 378
        {
220 Franz 379
                (*AllFonts)[name]->CharWidth[13] = 0;
249 Franz 380
                (*AllFonts)[name]->CharWidth[28] = 0;
220 Franz 381
                (*AllFonts)[name]->CharWidth[9] = 1;
382
                QString afnm = (*AllFonts)[name]->Datei.left((*AllFonts)[name]->Datei.length()-3);
383
                QFile afm(afnm+"afm");
3 paul 384
                if(!(afm.exists()))
220 Franz 385
                {
386
                        afm.setName(afnm+"Afm");
387
                        if(!(afm.exists()))
388
                                afm.setName(afnm+"AFM");
389
                }
390
                if (afm.exists())
391
                        FT_Attach_File(face, afm.name());
392
                FFonts[name] = face;
393
                UsedFonts[name] = fo;
394
                ret = true;
167 Franz 395
        }
220 Franz 396
        else
397
                FT_Done_Face( face );
398
        return ret;
3 paul 399
}