Subversion Repositories Scribus

Rev

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