Subversion Repositories Scribus

Rev

Rev 469 | Rev 494 | 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
/*
25
 * We need to be able to see ScApp so we can get the
26
 * Prefs struct.
27
 */
28
// Is this the right place for this declaration?
29
extern ScribusApp *ScApp;
30
 
3 paul 31
ScribusDoc::ScribusDoc()
32
{
167 Franz 33
        modified = false;
34
        MasterP = false;
3 paul 35
        GuideLock = false;
36
        SnapGuides = false;
167 Franz 37
        ShowPic = true;
38
        useRaster = false;
39
        EditClip = false;
40
        EditClipMode = 0;
41
        loading = false;
42
        minorGrid = 20;
43
        majorGrid = 100;
44
        minorColor = QColor(green);
45
        majorColor = QColor(green);
3 paul 46
        guideColor = QColor(darkBlue);
47
        GuideRad = 10;
48
        Dpen = "Black";
49
        Dshade2 = 100;
50
        Dbrush = "Black";
51
        Dshade = 100;
52
        Dwidth = 1;
53
        DLineArt = SolidLine;
178 Franz 54
        DocName = QObject::tr("Document")+"-";
3 paul 55
        UsedFonts.clear();
56
        Dfont = "";
111 Franz 57
        Dsize = 120;
3 paul 58
        CurrentSel = -1;
59
        DocTitel = "";
60
        DocAutor = "";
61
        DocComments = "";
68 Franz 62
        DocKeyWords = "";
330 Franz 63
        DocPublisher = "";
64
        DocDate = "";
65
        DocType = "";
66
        DocFormat = "";
67
        DocIdent = "";
68
        DocSource = "";
69
        DocLangInfo = "";
70
        DocRelation = "";
71
        DocCover = "";
72
        DocRights = "";
73
        DocContrib = "";
3 paul 74
        PageC = 0;
75
        LastAuto = 0;
76
        FirstAuto = 0;
77
        DraggedElem = 0;
78
        GroupCounter = 1;
79
        Vorlagen.clear();
80
        struct StVorL vg;
81
        vg.Vname = "Normal Internal";
82
        vg.LineSpa = 15;
83
        vg.Ausri = 0;
84
        vg.Indent = 0;
85
        vg.First = 0;
86
        vg.Avor = 0;
87
        vg.Anach = 0;
88
        vg.Font = "";
89
        vg.FontSize = Dsize;
140 Franz 90
        vg.TabValues.clear();
153 Franz 91
        vg.Drop = false;
92
        vg.DropLin = 2;
173 Franz 93
        vg.FontEffect = 0;
94
        vg.FColor = Dbrush;
95
        vg.FShade = Dshade;
96
        vg.SColor = Dpen;
97
        vg.SShade = Dshade2;
241 Franz 98
        vg.BaseAdj = false;
3 paul 99
        Vorlagen.append(vg);
100
        vg.Vname = "Center Internal";
101
        vg.Ausri = 1;
102
        Vorlagen.append(vg);
103
        vg.Vname = "Rechts Internal";
104
        vg.Ausri = 2;
105
        Vorlagen.append(vg);
106
        vg.Vname = "Block Internal";
107
        vg.Ausri = 3;
108
        Vorlagen.append(vg);
109
        vg.Vname = "EBlock Internal";
110
        vg.Ausri = 4;
111
        Vorlagen.append(vg);
112
        Layers.clear();
113
        struct Layer ll;
114
        ll.LNr = 0;
115
        ll.Level = 0;
178 Franz 116
        ll.Name = QObject::tr("Background");
3 paul 117
        ll.Sichtbar = true;
118
        ll.Drucken = true;
119
        Layers.append(ll);
120
        ActiveLayer = 0;
121
        JavaScripts.clear();
122
        UnDoValid = false;
123
        UnData.UnCode = -1;
167 Franz 124
        CurrentStyle = 0;
125
        CurrentABStil = 0;
3 paul 126
        TotalItems = 0;
127
        TemplateMode = false;
128
        PDF_Optionen.Thumbnails = false;
129
        PDF_Optionen.Articles = false;
130
        PDF_Optionen.Compress = true;
202 Franz 131
        PDF_Optionen.CompressMethod = 0;
132
        PDF_Optionen.Quality = 0;
3 paul 133
        PDF_Optionen.RecalcPic = false;
134
        PDF_Optionen.Bookmarks = false;
135
        PDF_Optionen.PicRes = 300;
203 Franz 136
        PDF_Optionen.Version = 14;
3 paul 137
        PDF_Optionen.Resolution = 300;
138
        PDF_Optionen.Binding = 0;
139
        PDF_Optionen.EmbedList.clear();
476 fschmid 140
        PDF_Optionen.SubsetList.clear();
420 Franz 141
        PDF_Optionen.MirrorH = false;
469 fschmid 142
        PDF_Optionen.MirrorV = false;
454 fschmid 143
        PDF_Optionen.RotateDeg = 0;
3 paul 144
        PDF_Optionen.PresentMode = false;
145
        PDF_Optionen.Datei = "";
146
        PDF_Optionen.PresentVals.clear();
203 Franz 147
        PDF_Optionen.UseRGB = true;
3 paul 148
        PDF_Optionen.UseProfiles = false;
149
        PDF_Optionen.UseProfiles2 = false;
150
        PDF_Optionen.SolidProf = "";
151
        PDF_Optionen.SComp = 3;
152
        PDF_Optionen.ImageProf = "";
153
        PDF_Optionen.PrintProf = "";
154
        PDF_Optionen.Info = "";
155
        PDF_Optionen.Intent = 0;
156
        PDF_Optionen.Intent2 = 0;
157
        PDF_Optionen.BleedTop = 0;
158
        PDF_Optionen.BleedLeft = 0;
159
        PDF_Optionen.BleedRight = 0;
160
        PDF_Optionen.BleedBottom = 0;
161
        PDF_Optionen.EmbeddedI = false;
162
        PDF_Optionen.Encrypt = false;
163
        PDF_Optionen.PassOwner = "";
164
        PDF_Optionen.PassUser = "";
165
        PDF_Optionen.Permissions = -4;
337 Franz 166
        PDF_Optionen.UseLPI = false;
167
        PDF_Optionen.LPISettings.clear();
3 paul 168
        RePos = false;
169
        BookMarks.clear();
170
        OldBM = false;
171
        hasName = false;
63 Franz 172
        DoDrawing = true;
3 paul 173
        RotMode = 0;
123 Franz 174
        SubMode = -1;
3 paul 175
        ASaveTimer = new QTimer(this);
27 Franz 176
        MLineStyles.clear();
3 paul 177
        FT_Init_FreeType( &library );
456 fschmid 178
        Pages.clear();
179
        MasterPages.clear();
180
        DocPages.clear();
181
        Items.clear();
182
        MasterItems.clear();
183
        DocItems.clear();
184
        ScratchLeft = 100;
185
        ScratchRight = 100;
186
        ScratchTop = 20;
187
        ScratchBottom = 20;
3 paul 188
}
189
 
190
ScribusDoc::~ScribusDoc()
191
{
456 fschmid 192
        MasterItems.setAutoDelete(true);
193
        DocItems.setAutoDelete(true);
194
        MasterItems.clear();
195
        DocItems.clear();
196
        MasterPages.setAutoDelete(true);
197
        DocPages.setAutoDelete(true);
198
        MasterPages.clear();
199
        DocPages.clear();
3 paul 200
        FT_Done_FreeType( library );
201
}
202
 
456 fschmid 203
/*
204
 * Split out from loadStyles in editFormats.cpp so it's callable from anywhere,
205
 * including plugins.
206
 * - 2004-09-14 Craig Ringer
207
 */
208
void ScribusDoc::loadStylesFromFile(QString fileName, QValueList<StVorL> *tempStyles)
209
{
210
        // This won't create the QValueList<StVorL> will it?
211
        QValueList<StVorL> *wrkStyles = NULL;
212
        /*
213
         * Use the working styles struct if passed, or work directly
214
         * on the document styles otherwise. Note that tempStyles,
215
         * if passed, MUST have the first five styles initialised already
216
         * or this function will segfault.
217
         */
218
        if (tempStyles != NULL)
219
                wrkStyles = tempStyles;
220
         else
221
                wrkStyles = &Vorlagen;
222
        if (!fileName.isEmpty())
223
        {
224
                ScriXmlDoc *ss = new ScriXmlDoc();
225
                ss->Vorlagen.clear();
226
                for (uint x = 5; x < wrkStyles->count(); ++x)
227
                        ss->Vorlagen.append((*wrkStyles)[x]);
228
                uint old = wrkStyles->count()-5;
229
                if (ss->ReadStyles(fileName, this, &ScApp->Prefs))
230
                {
231
                        if (ss->Vorlagen.count() > old)
232
                        {
233
                                for (uint xx=old; xx<ss->Vorlagen.count(); ++xx)
234
                                {
235
                                        struct StVorL sty;
236
                                        sty.Vname = ss->Vorlagen[xx].Vname;
237
                                        sty.LineSpa = ss->Vorlagen[xx].LineSpa;
238
                                        sty.Ausri = ss->Vorlagen[xx].Ausri;
239
                                        sty.Indent = ss->Vorlagen[xx].Indent;
240
                                        sty.First = ss->Vorlagen[xx].First;
241
                                        sty.Avor = ss->Vorlagen[xx].Avor;
242
                                        sty.Anach = ss->Vorlagen[xx].Anach;
243
                                        sty.Font = ss->Vorlagen[xx].Font;
244
                                        sty.FontSize = ss->Vorlagen[xx].FontSize;
245
                                        sty.TabValues = ss->Vorlagen[xx].TabValues;
246
                                        sty.Drop = ss->Vorlagen[xx].Drop;
247
                                        sty.DropLin = ss->Vorlagen[xx].DropLin;
248
                                        sty.FontEffect = ss->Vorlagen[xx].FontEffect;
249
                                        sty.FColor = ss->Vorlagen[xx].FColor;
250
                                        sty.FShade = ss->Vorlagen[xx].FShade;
251
                                        sty.SColor = ss->Vorlagen[xx].SColor;
252
                                        sty.SShade = ss->Vorlagen[xx].SShade;
253
                                        sty.BaseAdj = ss->Vorlagen[xx].BaseAdj;
254
                                        wrkStyles->append(sty);
255
                                }
256
                        }
257
                }
258
                delete ss;
259
        }
260
}
261
 
3 paul 262
void ScribusDoc::setModified()
263
{
264
        modified = true;
265
}
266
 
267
void ScribusDoc::setUnModified()
268
{
269
        modified = false;
270
}
271
 
272
bool ScribusDoc::isModified() const
273
{
274
  return modified;
275
}
276
/** Setzt die Seitenattribute */
80 Franz 277
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 278
{
279
        PageB = b;
280
        PageH = h;
281
        PageM.Top = t;
282
        PageM.Left = l;
283
        PageM.Right = r;
284
        PageM.Bottom = bo;
285
        PageSp = sp;
286
        PageSpa = ab;
287
        PageFP = fp;
288
        PageAT = atf;
289
}
290
 
80 Franz 291
void ScribusDoc::resetPage(double t, double l, double r, double bo, bool fp)
3 paul 292
{
293
        PageM.Top = t;
294
        PageM.Left = l;
295
        PageM.Right = r;
296
        PageM.Bottom = bo;
297
        PageFP = fp;
298
}
299
 
220 Franz 300
bool ScribusDoc::AddFont(QString name, QFont fo)
3 paul 301
{
220 Franz 302
        bool ret = false;
303
        bool error;
3 paul 304
        FT_Face      face;
220 Franz 305
        error = FT_New_Face( library, (*AllFonts)[name]->Datei, 0, &face );
306
        if (error)
307
                return ret;
308
        if ((*AllFonts)[name]->ReadMetrics())
167 Franz 309
        {
220 Franz 310
                (*AllFonts)[name]->CharWidth[13] = 0;
249 Franz 311
                (*AllFonts)[name]->CharWidth[28] = 0;
220 Franz 312
                (*AllFonts)[name]->CharWidth[9] = 1;
313
                QString afnm = (*AllFonts)[name]->Datei.left((*AllFonts)[name]->Datei.length()-3);
314
                QFile afm(afnm+"afm");
3 paul 315
                if(!(afm.exists()))
220 Franz 316
                {
317
                        afm.setName(afnm+"Afm");
318
                        if(!(afm.exists()))
319
                                afm.setName(afnm+"AFM");
320
                }
321
                if (afm.exists())
322
                        FT_Attach_File(face, afm.name());
323
                FFonts[name] = face;
324
                UsedFonts[name] = fo;
325
                ret = true;
167 Franz 326
        }
220 Franz 327
        else
328
                FT_Done_Face( face );
329
        return ret;
3 paul 330
}