Subversion Repositories Scribus

Rev

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

Rev Author Line No. Line
2834 cbradney 1
/***************************************************************************
2
        copyright            : (C) 2005 by Craig Bradney
3
        email                : cbradney@zip.com.au
4
***************************************************************************/
5
 
6
/***************************************************************************
7
*                                                                         *
8
*   This program is free software; you can redistribute it and/or modify  *
9
*   it under the terms of the GNU General Public License as published by  *
10
*   the Free Software Foundation; either version 2 of the License, or     *
11
*   (at your option) any later version.                                   *
12
*                                                                         *
13
***************************************************************************/
2835 cbradney 14
 
15
#include <qcolor.h>
16
#include <qdir.h>
2889 cbradney 17
#include <qdom.h>
2835 cbradney 18
#include <qfile.h>
19
#include <qstring.h>
2889 cbradney 20
#include <qstylefactory.h>
2835 cbradney 21
#include <qwmatrix.h>
22
 
2834 cbradney 23
#include "prefsmanager.h"
3120 fschmid 24
#include "prefsmanager.moc"
2859 cbradney 25
#include "filewatcher.h"
2889 cbradney 26
#include "missing.h"
3932 avox 27
#include "keymanager.h"
2865 cbradney 28
#include "pagesize.h"
4122 cbradney 29
#include "pagestructs.h"
2835 cbradney 30
#include "pdfoptions.h"
31
#include "prefsfile.h"
32
#include "scfonts.h"
3953 cbradney 33
#include "scmessagebox.h"
2835 cbradney 34
#include "scpaths.h"
35
#include "scribus.h"
36
#include "scribusstructs.h"
37
#include "scribusapp.h"
38
#include "util.h"
2859 cbradney 39
#include "werktoolb.h"
2835 cbradney 40
 
3205 craig 41
 
2835 cbradney 42
extern ScribusQApp* ScQApp;
2859 cbradney 43
extern bool emergencyActivated;
2835 cbradney 44
 
2834 cbradney 45
PrefsManager* PrefsManager::_instance = 0;
46
 
47
PrefsManager::PrefsManager(QObject *parent, const char *name)
48
 : QObject(parent, name)
49
{
50
}
51
 
52
PrefsManager::~PrefsManager()
53
{
2871 cbradney 54
        appPrefs.AvailFonts.~SCFonts();
2856 cbradney 55
        delete prefsFile;
2834 cbradney 56
}
57
 
58
PrefsManager* PrefsManager::instance()
59
{
60
    if (_instance == 0)
61
        _instance = new PrefsManager();
62
 
63
    return _instance;
64
}
65
 
66
void PrefsManager::deleteInstance()
67
{
68
    if (_instance)
69
        delete _instance;
70
    _instance = 0;
71
}
72
 
73
 
74
ApplicationPrefs* PrefsManager::applicationPrefs()
75
{
76
        return &appPrefs;
77
}
2835 cbradney 78
 
2856 cbradney 79
PrefsFile* PrefsManager::applicationPrefsFile()
80
{
81
        return prefsFile;
82
}
83
 
84
const bool PrefsManager::importingFrom12x()
85
{
86
        return importingFrom12;
87
}
88
 
89
 
90
void PrefsManager::setup()
91
{
92
        setupPreferencesLocation();
93
 
94
        importingFrom12=copy12Preferences();
95
        prefsFile = new PrefsFile(QDir::convertSeparators(prefsLocation + "/prefs13.xml"));
96
        if (importingFrom12)
97
                convert12Preferences();
98
        //<<CB TODO Reset keyboard shortcuts of all 1.3 users as too many
99
        //     have conflicts if they dont nuke their settings.
100
        // - Remove for 1.3.0 release: importingFrom12=true;
101
        //>>CB
102
}
103
 
2835 cbradney 104
void PrefsManager::initDefaults()
105
{
106
        /** Default font and size **/
107
        SCFontsIterator it(appPrefs.AvailFonts);
108
        appPrefs.toolSettings.defFont = it.currentKey();
109
        appPrefs.toolSettings.defSize = 120;
110
 
111
        /** Default colours **/
112
        appPrefs.DColors.clear();
113
        QString pfadC = ScPaths::instance().libDir();
114
        QString pfadC2 = pfadC + "rgbscribus.txt";
115
        QFile fiC(pfadC2);
116
        if (!fiC.exists())
117
        {
2886 fschmid 118
                appPrefs.DColors.insert("White", ScColor(0, 0, 0, 0));
119
                appPrefs.DColors.insert("Black", ScColor(0, 0, 0, 255));
120
                appPrefs.DColors.insert("Blue", ScColor(255, 255, 0, 0));
121
                appPrefs.DColors.insert("Cyan", ScColor(255, 0, 0, 0));
122
                appPrefs.DColors.insert("Green", ScColor(255, 0, 255, 0));
123
                appPrefs.DColors.insert("Red", ScColor(0, 255, 255, 0));
124
                appPrefs.DColors.insert("Yellow", ScColor(0, 0, 255, 0));
125
                appPrefs.DColors.insert("Magenta", ScColor(0, 255, 0, 0));
2835 cbradney 126
                appPrefs.DColorSet = "Scribus-Small";
127
        }
128
        else
129
        {
130
                if (fiC.open(IO_ReadOnly))
131
                {
132
                        QString ColorEn, Cname;
133
                        int Rval, Gval, Bval;
134
                        QTextStream tsC(&fiC);
135
                        ColorEn = tsC.readLine();
136
                        while (!tsC.atEnd())
137
                        {
138
                                ColorEn = tsC.readLine();
139
                                QTextStream CoE(&ColorEn, IO_ReadOnly);
140
                                CoE >> Rval;
141
                                CoE >> Gval;
142
                                CoE >> Bval;
143
                                CoE >> Cname;
2886 fschmid 144
                                ScColor tmp;
2835 cbradney 145
                                tmp.setColorRGB(Rval, Gval, Bval);
146
                                appPrefs.DColors.insert(Cname, tmp);
147
                        }
148
                        fiC.close();
149
                }
150
                appPrefs.DColorSet = "X11 RGB-Set";
151
        }
152
 
153
        appPrefs.Wheelval = 40;
3641 fschmid 154
        /** Set Default window position and size to sane default values which should work on every screen */
155
        appPrefs.mainWinSettings.xPosition = 0;
156
        appPrefs.mainWinSettings.yPosition = 0;
157
        appPrefs.mainWinSettings.width = 640;
158
        appPrefs.mainWinSettings.height = 480;
2835 cbradney 159
        appPrefs.guidesSettings.marginsShown = true;
160
        appPrefs.guidesSettings.framesShown = true;
161
        appPrefs.guidesSettings.gridShown = false;
162
        appPrefs.guidesSettings.guidesShown = false;
163
        appPrefs.guidesSettings.baseShown = false;
164
        appPrefs.guidesSettings.showPic = true;
165
        appPrefs.guidesSettings.showControls = false;
166
        appPrefs.guidesSettings.linkShown = false;
2863 fschmid 167
        appPrefs.guidesSettings.rulerMode = true;
2835 cbradney 168
        appPrefs.guidesSettings.grabRad = 4;
169
        appPrefs.guidesSettings.guideRad = 10;
170
        appPrefs.guidesSettings.minorGrid = 20;
171
        appPrefs.guidesSettings.majorGrid = 100;
172
        appPrefs.guidesSettings.minorColor = QColor(green);
173
        appPrefs.guidesSettings.majorColor = QColor(green);
174
        appPrefs.guidesSettings.margColor = QColor(blue);
175
        appPrefs.guidesSettings.guideColor = QColor(darkBlue);
176
        appPrefs.guidesSettings.baseColor = QColor(lightGray);
2889 cbradney 177
        appPrefs.typographicSettings.valueSuperScript = 33;
178
        appPrefs.typographicSettings.scalingSuperScript = 100;
179
        appPrefs.typographicSettings.valueSubScript = 33;
180
        appPrefs.typographicSettings.scalingSubScript = 100;
181
        appPrefs.typographicSettings.valueSmallCaps = 75;
182
        appPrefs.typographicSettings.autoLineSpacing = 20;
183
        appPrefs.typographicSettings.valueUnderlinePos = -1;
184
        appPrefs.typographicSettings.valueUnderlineWidth = -1;
185
        appPrefs.typographicSettings.valueStrikeThruPos = -1;
186
        appPrefs.typographicSettings.valueStrikeThruWidth = -1;
187
        appPrefs.typographicSettings.valueBaseGrid = 14.4;
188
        appPrefs.typographicSettings.offsetBaseGrid = 0.0;
2835 cbradney 189
        appPrefs.GUI = "Default";
4039 fschmid 190
        appPrefs.showToolTips = true;
2835 cbradney 191
        //FIXME
192
        //Black here causes issues when a colour set is loaded without "Black" in it.
193
        //"Black" is created with wrong values. Eg SVG colour set
194
        appPrefs.toolSettings.dPen = "Black";
195
        appPrefs.toolSettings.dBrush = "Black";
196
        appPrefs.toolSettings.dShade = 100;
197
        appPrefs.toolSettings.dShade2 = 100;
198
        appPrefs.toolSettings.dLineArt = SolidLine;
199
        appPrefs.toolSettings.dWidth = 1;
200
        appPrefs.toolSettings.dPenLine = "Black";
201
        appPrefs.toolSettings.dPenText = "Black";
202
        appPrefs.toolSettings.dStrokeText = "Black";
3093 fschmid 203
        appPrefs.toolSettings.dTextBackGround = "None";
204
        appPrefs.toolSettings.dTextLineColor = "None";
205
        appPrefs.toolSettings.dTextBackGroundShade = 100;
206
        appPrefs.toolSettings.dTextLineShade = 100;
207
        appPrefs.toolSettings.dTextPenShade = 100;
208
        appPrefs.toolSettings.dTextStrokeShade = 100;
2835 cbradney 209
        appPrefs.toolSettings.tabFillChar = "";
210
        appPrefs.toolSettings.dTabWidth = 36.0;
211
        appPrefs.DpapColor = QColor(white);
212
        appPrefs.toolSettings.dCols = 1;
213
        appPrefs.toolSettings.dGap = 0.0;
214
        appPrefs.toolSettings.dShadeLine = 100;
215
        appPrefs.toolSettings.dLstyleLine = SolidLine;
216
        appPrefs.toolSettings.dWidthLine = 1;
217
        appPrefs.toolSettings.dStartArrow = 0;
218
        appPrefs.toolSettings.dEndArrow = 0;
219
        appPrefs.toolSettings.magMin = 10;
220
        appPrefs.toolSettings.magMax = 3200;
221
        appPrefs.toolSettings.magStep = 25;
222
        appPrefs.toolSettings.dBrushPict = "White";
223
        appPrefs.toolSettings.shadePict = 100;
224
        appPrefs.toolSettings.scaleX = 1;
225
        appPrefs.toolSettings.scaleY = 1;
226
        appPrefs.guidesSettings.before = true;
227
        appPrefs.docUnitIndex = 0;
228
        appPrefs.toolSettings.polyC = 4;
229
        appPrefs.toolSettings.polyF = 0.5;
230
        appPrefs.toolSettings.polyS = false;
231
        appPrefs.toolSettings.polyFd = 0;
232
        appPrefs.toolSettings.polyR = 0;
233
        appPrefs.mainToolBarSettings.visible = true;
234
        appPrefs.pdfToolBarSettings.visible = true;
235
        appPrefs.PSize = 40;
236
        appPrefs.SaveAtQ = true;
237
        appPrefs.ClipMargin = true;
238
        appPrefs.GCRMode = false;
239
        appPrefs.RecentDocs.clear();
240
        appPrefs.RecentDCount = 5;
241
        appPrefs.marginColored = false;
242
        appPrefs.pageSize = "A4";
243
        appPrefs.pageOrientation = 0;
2865 cbradney 244
        PageSize a4("A4");
245
        appPrefs.PageWidth = a4.getPageWidth();
246
        appPrefs.PageHeight = a4.getPageHeight();
2835 cbradney 247
        appPrefs.RandOben = 40;
248
        appPrefs.RandUnten = 40;
249
        appPrefs.RandLinks = 40;
250
        appPrefs.RandRechts = 40;
251
        appPrefs.toolSettings.scaleType = true;
252
        appPrefs.toolSettings.aspectRatio = true;
253
        appPrefs.toolSettings.lowResType = 1;
254
        appPrefs.toolSettings.useEmbeddedPath = false;
255
        appPrefs.MinWordLen = 3;
256
        appPrefs.HyCount = 2;
257
        appPrefs.Language = "";
258
        appPrefs.Automatic = true;
259
        appPrefs.AutoCheck = false;
260
        appPrefs.AutoSave = false;
261
        appPrefs.AutoSaveTime = 600000;
262
        appPrefs.DisScale = 1.0;
263
        appPrefs.DocDir = QDir::homeDirPath();
264
        appPrefs.ProfileDir = "";
265
        appPrefs.ScriptDir = "";
266
        appPrefs.documentTemplatesDir = "";
267
        appPrefs.CustomColorSets.clear();
268
        appPrefs.PrPr_Mode = false;
269
        appPrefs.Gcr_Mode = true;
270
        appPrefs.PrPr_AlphaText = false;
271
        appPrefs.PrPr_AlphaGraphics = false;
272
        appPrefs.PrPr_Transparency = false;
273
        appPrefs.PrPr_C = true;
274
        appPrefs.PrPr_M = true;
275
        appPrefs.PrPr_Y = true;
276
        appPrefs.PrPr_K = true;
277
        appPrefs.imageEditorExecutable = "gimp";
278
        appPrefs.gs_AntiAliasGraphics = true;
279
        appPrefs.gs_AntiAliasText = true;
2910 fschmid 280
        appPrefs.gs_exe = getGSDefaultExeName();
2835 cbradney 281
        appPrefs.gs_Resolution = 72;
282
        appPrefs.STEcolor = QColor(white);
283
        appPrefs.DCMSset.DefaultMonitorProfile = "";
284
        appPrefs.DCMSset.DefaultPrinterProfile = "";
2984 fschmid 285
        appPrefs.DCMSset.DefaultImageRGBProfile = "";
286
        appPrefs.DCMSset.DefaultSolidColorProfile = "";
2835 cbradney 287
        appPrefs.DCMSset.CMSinUse = false;
288
        appPrefs.DCMSset.SoftProofOn = false;
289
        appPrefs.DCMSset.GamutCheck = false;
290
        appPrefs.DCMSset.BlackPoint = true;
291
        appPrefs.DCMSset.DefaultIntentMonitor = 1;
2984 fschmid 292
        appPrefs.DCMSset.DefaultIntentImages = 1;
2835 cbradney 293
        appPrefs.DCMSset.DefaultIntentPrinter = 0;
294
        appPrefs.GFontSub.clear();
295
        appPrefs.ScratchLeft = 100;
296
        appPrefs.ScratchRight = 100;
297
        appPrefs.ScratchTop = 20;
298
        appPrefs.ScratchBottom = 20;
3016 fschmid 299
        struct PageSet pageS;
300
        pageS.Name = tr( "Single Page" );
301
        pageS.FirstPage = 0;
302
        pageS.Rows = 1;
303
        pageS.Columns = 1;
304
        pageS.GapHorizontal = 0.0;
305
        pageS.GapVertical = 0.0;
306
        pageS.GapBelow = 40.0;
3026 fschmid 307
        pageS.pageNames.clear();
3016 fschmid 308
        appPrefs.pageSets.append(pageS);
309
        pageS.Name = tr( "Double sided" );
310
        pageS.FirstPage = 1;
311
        pageS.Columns = 2;
3026 fschmid 312
        pageS.pageNames.clear();
313
        pageS.pageNames.append( tr("Left Page"));
314
        pageS.pageNames.append( tr("Right Page"));
3016 fschmid 315
        appPrefs.pageSets.append(pageS);
316
        pageS.Name = tr( "3-Fold" );
317
        pageS.FirstPage = 0;
318
        pageS.Columns = 3;
3026 fschmid 319
        pageS.pageNames.clear();
320
        pageS.pageNames.append( tr("Left Page"));
321
        pageS.pageNames.append( tr("Middle"));
322
        pageS.pageNames.append( tr("Right Page"));
3016 fschmid 323
        appPrefs.pageSets.append(pageS);
324
        pageS.Name = tr( "4-Fold" );
325
        pageS.FirstPage = 0;
326
        pageS.Columns = 4;
3026 fschmid 327
        pageS.pageNames.clear();
328
        pageS.pageNames.append( tr("Left Page"));
329
        pageS.pageNames.append( tr("Middle Left"));
330
        pageS.pageNames.append( tr("Middle Right"));
331
        pageS.pageNames.append( tr("Right Page"));
3016 fschmid 332
        appPrefs.pageSets.append(pageS);
333
        appPrefs.FacingPages = singlePage;
2835 cbradney 334
        appPrefs.askBeforeSubstituite = true;
335
        appPrefs.haveStylePreview = true;
336
        // lorem ipsum defaults
337
        appPrefs.useStandardLI = false;
338
        appPrefs.paragraphsLI = 10;
339
        appPrefs.showStartupDialog = true;
3873 subik 340
        initDefaultCheckerPrefs(&appPrefs.checkerProfiles);
3142 cbradney 341
        appPrefs.curCheckProfile = tr("PostScript");
2835 cbradney 342
        appPrefs.PDF_Options.Thumbnails = false;
343
        appPrefs.PDF_Options.Articles = false;
344
        appPrefs.PDF_Options.useLayers = false;
345
        appPrefs.PDF_Options.Compress = true;
346
        appPrefs.PDF_Options.CompressMethod = 0;
347
        appPrefs.PDF_Options.Quality = 0;
348
        appPrefs.PDF_Options.RecalcPic = false;
349
        appPrefs.PDF_Options.Bookmarks = false;
350
        appPrefs.PDF_Options.PicRes = 300;
351
        appPrefs.PDF_Options.Version = PDFOptions::PDFVersion_14;
352
        appPrefs.PDF_Options.Resolution = 300;
353
        appPrefs.PDF_Options.Binding = 0;
354
        appPrefs.PDF_Options.EmbedList.clear();
355
        appPrefs.PDF_Options.SubsetList.clear();
356
        appPrefs.PDF_Options.MirrorH = false;
357
        appPrefs.PDF_Options.MirrorV = false;
358
        appPrefs.PDF_Options.RotateDeg = 0;
359
        appPrefs.PDF_Options.PresentMode = false;
360
        appPrefs.PDF_Options.Datei = "";
361
        appPrefs.PDF_Options.PresentVals.clear();
362
        appPrefs.PDF_Options.isGrayscale = false;
363
        appPrefs.PDF_Options.UseRGB = true;
364
        appPrefs.PDF_Options.UseProfiles = false;
365
        appPrefs.PDF_Options.UseProfiles2 = false;
366
        appPrefs.PDF_Options.SolidProf = "";
367
        appPrefs.PDF_Options.SComp = 3;
368
        appPrefs.PDF_Options.ImageProf = "";
369
        appPrefs.PDF_Options.PrintProf = "";
370
        appPrefs.PDF_Options.Info = "";
371
        appPrefs.PDF_Options.Intent = 0;
372
        appPrefs.PDF_Options.Intent2 = 0;
373
        appPrefs.PDF_Options.BleedTop = 0;
374
        appPrefs.PDF_Options.BleedLeft = 0;
375
        appPrefs.PDF_Options.BleedRight = 0;
376
        appPrefs.PDF_Options.BleedBottom = 0;
377
        appPrefs.PDF_Options.EmbeddedI = false;
378
        appPrefs.PDF_Options.Encrypt = false;
379
        appPrefs.PDF_Options.PassOwner = "";
380
        appPrefs.PDF_Options.PassUser = "";
381
        appPrefs.PDF_Options.Permissions = -4;
382
        appPrefs.PDF_Options.UseLPI = false;
383
        appPrefs.PDF_Options.LPISettings.clear();
3079 fschmid 384
        appPrefs.PDF_Options.UseSpotColors = true;
385
        appPrefs.PDF_Options.doMultiFile = false;
4197 fschmid 386
        appPrefs.PDF_Options.displayBookmarks = false;
387
        appPrefs.PDF_Options.displayFullscreen = false;
388
        appPrefs.PDF_Options.displayLayers = false;
389
        appPrefs.PDF_Options.displayThumbs = false;
4201 fschmid 390
        appPrefs.PDF_Options.hideMenuBar = false;
391
        appPrefs.PDF_Options.hideToolBar = false;
392
        appPrefs.PDF_Options.fitWindow = false;
4197 fschmid 393
        appPrefs.PDF_Options.PageLayout = PDFOptions::SinglePage;
394
        appPrefs.PDF_Options.openAction = "";
2835 cbradney 395
 
396
        //Attribute setup
397
        appPrefs.defaultItemAttributes.clear();
398
        appPrefs.defaultToCSetups.clear();
399
}
400
 
401
void PrefsManager::initDefaultGUIFont(const QFont& guiFont)
402
{
3873 subik 403
        appPrefs.AppFontSize = guiFont.pointSize();
404
        appPrefs.STEfont = guiFont.toString();
3940 tsoots 405
        appPrefs.PaletteFontSize = appPrefs.AppFontSize;
2835 cbradney 406
}
407
 
408
void PrefsManager::initArrowStyles()
409
{
410
        struct ArrowDesc arrow;
411
        FPointArray points;
412
        QWMatrix arrowScaling;
413
        arrowScaling.scale(0.5, 0.5);
414
        arrow.name = "Arrow1L";
415
        arrow.userArrow = false;
416
        points.addQuadPoint(0, 0, 0, 0, 0, 0, 0, 0);
417
        points.addQuadPoint(-5, -5, -5, -5, -5, -5, -5, -5);
418
        points.addQuadPoint(12, 0, 12, 0, 12, 0, 12, 0);
419
        points.addQuadPoint(-5, 5, -5, 5, -5, 5, -5, 5);
420
        points.addQuadPoint(0, 0, 0, 0, 0, 0, 0, 0);
421
        arrow.points = points.copy();
422
        appPrefs.arrowStyles.append(arrow);
423
        arrow.name = "Arrow1M";
424
        points.map(arrowScaling);
425
        arrow.points = points.copy();
426
        appPrefs.arrowStyles.append(arrow);
427
        arrow.name = "Arrow1S";
428
        points.map(arrowScaling);
429
        arrow.points = points.copy();
430
        appPrefs.arrowStyles.append(arrow);
431
        arrow.name = "SquareL";
432
        points.resize(0);
433
        points.addQuadPoint(-5, -5, -5, -5, -5, -5, -5, -5);
434
        points.addQuadPoint(5, -5, 5, -5, 5, -5, 5, -5);
435
        points.addQuadPoint(5, 5, 5, 5, 5, 5, 5, 5);
436
        points.addQuadPoint(-5, 5, -5, 5, -5, 5, -5, 5);
437
        points.addQuadPoint(-5, -5, -5, -5, -5, -5, -5, -5);
438
        arrow.points = points.copy();
439
        appPrefs.arrowStyles.append(arrow);
440
        arrow.name = "SquareM";
441
        points.map(arrowScaling);
442
        arrow.points = points.copy();
443
        appPrefs.arrowStyles.append(arrow);
444
        arrow.name = "SquareS";
445
        points.map(arrowScaling);
446
        arrow.points = points.copy();
447
        appPrefs.arrowStyles.append(arrow);
448
        arrow.name = "TriangleInL";
449
        points.resize(0);
450
        points.addQuadPoint(5.77, 0, 5.77, 0, 5.77, 0, 5.77, 0);
451
        points.addQuadPoint(-2.88, 5, -2.88, 5, -2.88, 5, -2.88, 5);
452
        points.addQuadPoint(-2.88, -5, -2.88, -5, -2.88, -5, -2.88, -5);
453
        points.addQuadPoint(5.77, 0, 5.77, 0, 5.77, 0, 5.77, 0);
454
        arrow.points = points.copy();
455
        appPrefs.arrowStyles.append(arrow);
456
        arrow.name = "TriangleInM";
457
        points.map(arrowScaling);
458
        arrow.points = points.copy();
459
        appPrefs.arrowStyles.append(arrow);
460
        arrow.name = "TriangleInS";
461
        points.map(arrowScaling);
462
        arrow.points = points.copy();
463
        appPrefs.arrowStyles.append(arrow);
464
        arrow.name = "TriangleOutL";
465
        points.resize(0);
466
        points.addQuadPoint(-5.77, 0, -5.77, 0, -5.77, 0, -5.77, 0);
467
        points.addQuadPoint(2.88, 5, 2.88, 5, 2.88, 5, 2.88, 5);
468
        points.addQuadPoint(2.88, -5, 2.88, -5, 2.88, -5, 2.88, -5);
469
        points.addQuadPoint(-5.77, 0, -5.77, 0, -5.77, 0, -5.77, 0);
470
        arrow.points = points.copy();
471
        appPrefs.arrowStyles.append(arrow);
472
        arrow.name = "TriangleOutM";
473
        points.map(arrowScaling);
474
        arrow.points = points.copy();
475
        appPrefs.arrowStyles.append(arrow);
476
        arrow.name = "TriangleOutS";
477
        points.map(arrowScaling);
478
        arrow.points = points.copy();
479
        appPrefs.arrowStyles.append(arrow);
480
}
481
 
482
/*!
483
 \fn QString PrefsManager::getPreferencesLocation()
484
 \author Craig Bradney
485
 \date Thu 18 Nov 2004
486
 \brief Set the user's preference file location. Rename any existing old preferences files
487
 \retval QString Location of the user's preferences
488
 */
489
 
490
QString PrefsManager::setupPreferencesLocation()
491
{
492
        QString Pff = QDir::convertSeparators(QDir::homeDirPath()+"/.scribus");
493
        QFileInfo Pffi = QFileInfo(Pff);
494
        QString PrefsPfad;
495
        //If we are using ~/.scribus
496
        if (Pffi.exists())
497
        {
498
                if (Pffi.isDir())
499
                        PrefsPfad = Pff;
500
                else
501
                        PrefsPfad = QDir::homeDirPath();
502
        }
503
        else // Move to using ~/.scribus/scribus.* from ~/.scribus.*
504
        {
505
                QDir prefsDirectory = QDir();
506
                prefsDirectory.mkdir(Pff);
507
                PrefsPfad = Pff;
508
                QString oldPR = QDir::convertSeparators(QDir::homeDirPath()+"/.scribus.rc");
509
                QFileInfo oldPi = QFileInfo(oldPR);
510
                if (oldPi.exists())
511
                        moveFile(oldPR, Pff+"/scribus.rc");
512
                QString oldPR2 = QDir::convertSeparators(QDir::homeDirPath()+"/.scribusfont.rc");
513
                QFileInfo oldPi2 = QFileInfo(oldPR2);
514
                if (oldPi2.exists())
515
                        moveFile(oldPR2, Pff+"/scribusfont.rc");
516
                QString oldPR3 = QDir::convertSeparators(QDir::homeDirPath()+"/.scribusscrap.scs");
517
                QFileInfo oldPi3 = QFileInfo(oldPR3);
518
                if (oldPi3.exists())
519
                        moveFile(oldPR3, Pff+"/scrap.scs");
520
        }
521
        prefsLocation=PrefsPfad;
522
        return PrefsPfad;
523
}
524
 
525
/*!
526
 \fn QString PrefsManager::getPreferencesLocation()
527
 \retval QString Location of the user's preferences
528
 */
529
const QString PrefsManager::preferencesLocation()
530
{
531
        return prefsLocation;
532
}
533
 
534
/*!
4026 craig 535
 \fn bool ScribusMainWindow::copy12Preferences(const QString prefsLocation)
2835 cbradney 536
 \author Craig Bradney
537
 \date Sun 09 Jan 2005
538
 \brief Copy 1.2 prefs XML before loading, and copy rc files we don't yet convert
539
 \param prefsLocation Location of user preferences
540
 \retval bool true if prefs were imported
541
 */
542
bool PrefsManager::copy12Preferences()
543
{
544
        //Now make copies for 1.3 use and leave the old ones alone for <1.3.0 usage
545
        QString oldPR[4], newPR[4];
3152 craig 546
 
547
        // Special case for scribus.rc - if found, use scribus123.rc,
548
        // otherwise fall back to the possibly mis-encoded scribus.rc .
549
        oldPR[0]=QDir::convertSeparators(prefsLocation+"/scribus123.rc");
550
        if (!QFile::exists(oldPR[0]))
551
                oldPR[0] = prefsLocation+"/scribus.rc";
552
 
2835 cbradney 553
        oldPR[1]=QDir::convertSeparators(prefsLocation+"/scrap.scs");
554
        oldPR[2]=QDir::convertSeparators(prefsLocation+"/prefs.xml");
555
        oldPR[3]=QDir::convertSeparators(prefsLocation+"/scripter.rc");
556
        newPR[0]=QDir::convertSeparators(prefsLocation+"/scribus13.rc");
557
        newPR[1]=QDir::convertSeparators(prefsLocation+"/scrap13.scs");
558
        newPR[2]=QDir::convertSeparators(prefsLocation+"/prefs13.xml");
559
        newPR[3]=QDir::convertSeparators(prefsLocation+"/scripter13.rc");
560
 
561
        bool existsOldPR[4], existsNewPR[4];
3156 craig 562
        for (uint i=0;i<4;++i)
2835 cbradney 563
        {
564
                existsOldPR[i]=QFile::exists(oldPR[i]);
565
                existsNewPR[i]=QFile::exists(newPR[i]);
566
        }
567
 
568
        bool retVal=false;
569
        //Only check for these two as they will be autocreated if they dont exist.
3151 craig 570
        if( (existsOldPR[0] && !existsNewPR[0]) || (existsOldPR[2] && !existsNewPR[2]) )
2835 cbradney 571
        {
572
                retVal=true; // converting from 1.2 prefs
573
                if (ScQApp->usingGUI())
574
                {
4026 craig 575
                        ScMW->showSplash(false);
576
                        if ( (ScMessageBox::question( ScMW, tr("Migrate Old Scribus Settings?"),
2835 cbradney 577
                                tr("Scribus has detected existing Scribus 1.2 preferences files.\n"
578
                                                "Do you want to migrate them to the new Scribus version?"),
579
                                QMessageBox::Yes | QMessageBox::Default, QMessageBox::No, QMessageBox::NoButton))==QMessageBox::Yes )
580
                        {
581
                                for (uint i=0;i<4;++i)
582
                                {
583
                                        if (existsOldPR[i] && !existsNewPR[i])
584
                                                copyFile(oldPR[i], newPR[i]);
585
                                }
586
                        }
4026 craig 587
                        ScMW->showSplash(true);
2835 cbradney 588
                }
589
        }
590
        return retVal;
591
}
592
 
593
/*!
594
 \fn void PrefsManager::convert12Preferences()
595
 \author Craig Ringer
596
 \date Sun 26 June 2005
597
 \brief Import 1.2.x prefs rc data into new prefs xml
598
 \retval None
599
 */
2856 cbradney 600
void PrefsManager::convert12Preferences()
2835 cbradney 601
{
602
        // Import 1.2 font search path prefs
603
        QFile fontPrefsFile12(QDir::convertSeparators(prefsLocation+"/scribusfont.rc"));
604
        if (fontPrefsFile12.open(IO_ReadOnly))
605
        {
2856 cbradney 606
                PrefsContext *pc = prefsFile->getContext("Fonts");
2835 cbradney 607
                PrefsTable *fontPrefs = pc->getTable("ExtraFontDirs");
608
                QTextStream tsx(&fontPrefsFile12);
609
                QString extraPath = tsx.read();
610
                fontPrefsFile12.close();
611
                QStringList extraFonts = QStringList::split("\n",extraPath);
612
                for (uint i = 0; i < extraFonts.count(); ++i)
613
                        fontPrefs->set(i, 0, extraFonts[i]);
614
        }
615
}
2859 cbradney 616
 
3873 subik 617
void PrefsManager::ReadPrefs(const QString & fname)
2859 cbradney 618
{
3873 subik 619
        QString realFile;
620
        if (fname.isNull())
621
                realFile = prefsLocation + "/scribus13.rc";
622
        else
623
                realFile = fname;
624
 
625
        if (QFile::exists(realFile))
626
        {
627
                if (!ReadPref(realFile))
3171 craig 628
                {
629
                        alertLoadPrefsFailed();
630
                        return;
631
                }
3873 subik 632
        }
633
 
4026 craig 634
        ScMW->setDefaultPrinter(appPrefs.PrinterName, appPrefs.PrinterFile, appPrefs.PrinterCommand);
2859 cbradney 635
 
636
        uint max = QMIN(appPrefs.RecentDCount, appPrefs.RecentDocs.count());
637
        for (uint m = 0; m < max; ++m)
638
        {
639
                QFileInfo fd(appPrefs.RecentDocs[m]);
640
                if (fd.exists())
641
                {
4026 craig 642
                        ScMW->RecentDocs.append(appPrefs.RecentDocs[m]);
643
                        ScMW->fileWatcher->addFile(appPrefs.RecentDocs[m]);
2859 cbradney 644
                }
645
        }
4026 craig 646
        ScMW->rebuildRecentFileMenu();
647
        ScMW->move(appPrefs.mainWinSettings.xPosition, appPrefs.mainWinSettings.yPosition);
648
        ScMW->resize(appPrefs.mainWinSettings.width, appPrefs.mainWinSettings.height);
2859 cbradney 649
        ReadPrefsXML();
650
        if (appPrefs.checkerProfiles.count() == 0)
651
        {
3873 subik 652
                initDefaultCheckerPrefs(&appPrefs.checkerProfiles);
3142 cbradney 653
                appPrefs.curCheckProfile = tr("PostScript");
2859 cbradney 654
        }
655
}
656
 
657
void PrefsManager::ReadPrefsXML()
658
{
3171 craig 659
    if (prefsFile)
2859 cbradney 660
    {
661
        PrefsContext* userprefsContext = prefsFile->getContext("user_preferences");
662
        if (userprefsContext) {
663
            appPrefs.guiLanguage = userprefsContext->get("gui_language","");
664
            //continue here...
665
            //Prefs."blah blah" =...
666
        }
667
    }
668
}
669
 
670
 
3873 subik 671
void PrefsManager::SavePrefs(const QString & fname)
2859 cbradney 672
{
673
        // If closing because of a crash don't save prefs as we can
674
        // accidentally nuke the settings if the crash is before prefs are loaded
3170 craig 675
        // The caller is responsible for ensuring we aren't called under those
676
        // conditions.
677
        Q_ASSERT(!emergencyActivated);
4026 craig 678
        appPrefs.mainWinSettings.xPosition = abs(ScMW->pos().x());
679
        appPrefs.mainWinSettings.yPosition = abs(ScMW->pos().y());
680
        appPrefs.mainWinSettings.width = ScMW->size().width();
681
        appPrefs.mainWinSettings.height = ScMW->size().height();
682
        appPrefs.mainToolBarSettings.visible = ScMW->mainToolBarVisible();
683
        appPrefs.pdfToolBarSettings.visible = ScMW->pdfToolBarVisible();
2859 cbradney 684
 
685
        appPrefs.RecentDocs.clear();
4026 craig 686
        uint max = QMIN(appPrefs.RecentDCount, ScMW->RecentDocs.count());
2859 cbradney 687
        for (uint m = 0; m < max; ++m)
688
        {
4026 craig 689
                appPrefs.RecentDocs.append(ScMW->RecentDocs[m]);
2859 cbradney 690
        }
4026 craig 691
        ScMW->getDefaultPrinter(&appPrefs.PrinterName, &appPrefs.PrinterFile, &appPrefs.PrinterCommand);
2859 cbradney 692
 
3170 craig 693
        SavePrefsXML();
3873 subik 694
        QString realFile;
695
        if (fname.isNull())
696
                realFile = prefsLocation+"/scribus13.rc";
697
        else
698
                realFile = fname;
699
        if (!WritePref(realFile))
3170 craig 700
                alertSavePrefsFailed();
2859 cbradney 701
}
702
 
703
void PrefsManager::SavePrefsXML()
704
{
3170 craig 705
    if (prefsFile)
2859 cbradney 706
    {
707
        PrefsContext* userprefsContext = prefsFile->getContext("user_preferences");
708
        if (userprefsContext) {
709
            userprefsContext->set("gui_language",appPrefs.guiLanguage);
710
            //continue here...
711
            //Prefs."blah blah" =...
712
        }
713
        prefsFile->write();
714
    }
715
}
2862 cbradney 716
 
717
void PrefsManager::setGhostscriptExecutable(const QString& executableName)
718
{
719
        appPrefs.gs_exe=executableName;
720
}
721
 
722
void PrefsManager::setImageEditorExecutable(const QString& executableName)
723
{
724
        appPrefs.imageEditorExecutable=executableName;
725
}
726
 
727
const QString PrefsManager::ghostscriptExecutable()
728
{
729
        return appPrefs.gs_exe;
730
}
731
 
732
const QString PrefsManager::imageEditorExecutable()
733
{
734
        return appPrefs.imageEditorExecutable;
735
}
2870 cbradney 736
 
2871 cbradney 737
const QString PrefsManager::documentDir()
738
{
739
        return appPrefs.DocDir;
740
}
741
 
3931 subik 742
void PrefsManager::setDocumentDir(const QString& dirname)
743
{
744
        appPrefs.DocDir = dirname;
745
}
746
 
2871 cbradney 747
const int PrefsManager::mouseWheelValue()
748
{
749
        return appPrefs.Wheelval;
750
}
751
 
2870 cbradney 752
//Changed to return false when we have no fonts
753
const bool PrefsManager::GetAllFonts(bool showFontInfo)
754
{
755
        appPrefs.AvailFonts.GetFonts(prefsLocation, showFontInfo);
756
        if (appPrefs.AvailFonts.isEmpty())
757
                return false;
758
        return true;
759
}
2871 cbradney 760
 
761
void PrefsManager::setShowStartupDialog(const bool showDialog)
762
{
763
        appPrefs.showStartupDialog=showDialog;
764
}
765
 
766
const ColorList& PrefsManager::colorSet()
767
{
768
        return appPrefs.DColors;
769
}
770
 
771
ColorList* PrefsManager::colorSetPtr()
772
{
773
        return &appPrefs.DColors;
774
}
775
 
776
const QString& PrefsManager::colorSetName()
777
{
778
        return appPrefs.DColorSet;
779
}
780
 
781
void PrefsManager::setColorSet(const ColorList& colorSet)
782
{
783
        appPrefs.DColors=colorSet;
784
}
785
 
786
void PrefsManager::setColorSetName(const QString& colorSetName)
787
{
788
        appPrefs.DColorSet=colorSetName;
789
}
2873 cbradney 790
 
791
 
3932 avox 792
void PrefsManager::setKeyEntry(const QString& actName, const QString& cleanMenuText, const QKeySequence& keyseq, const int& rowNumber)
2873 cbradney 793
{
794
        Keys ke;
2877 cbradney 795
        if (!actName.isEmpty())
2873 cbradney 796
        {
4026 craig 797
                if (ScMW->scrActions[actName])
2873 cbradney 798
                {
799
                        ke.actionName=actName;
800
                        ke.keySequence = keyseq;
801
                        ke.cleanMenuText=cleanMenuText;
802
                        ke.tableRow=rowNumber;
803
                        appPrefs.KeyActions.insert(actName, ke);
804
                }
805
                else
806
                        qDebug("%s", QString("Action Name: %1 does not exist").arg(actName).ascii());
807
        }
808
}
809
 
810
const double PrefsManager::displayScale()
811
{
812
        return appPrefs.DisScale;
813
}
814
 
815
const QString& PrefsManager::guiLanguage()
816
{
817
        return appPrefs.guiLanguage;
818
}
819
 
820
const QString& PrefsManager::guiStyle()
821
{
822
        return appPrefs.GUI;
823
}
824
 
825
const int& PrefsManager::guiFontSize()
826
{
827
        return appPrefs.AppFontSize;
828
}
2889 cbradney 829
 
3940 tsoots 830
const int& PrefsManager::paletteFontSize()
831
{
832
        return appPrefs.PaletteFontSize;
833
}
834
 
3170 craig 835
bool PrefsManager::WritePref(QString ho)
2889 cbradney 836
{
837
        QDomDocument docu("scribusrc");
838
        QString st="<SCRIBUSRC></SCRIBUSRC>";
839
        docu.setContent(st);
840
        QDomElement elem=docu.documentElement();
841
        QDomElement dc=docu.createElement("GUI");
842
        dc.setAttribute("STILT",appPrefs.GUI);
843
        dc.setAttribute("RAD",appPrefs.Wheelval);
844
        dc.setAttribute("APF",appPrefs.AppFontSize);
3940 tsoots 845
        dc.setAttribute("PFS",appPrefs.PaletteFontSize);
2889 cbradney 846
        dc.setAttribute("GRAB",appPrefs.guidesSettings.grabRad);
847
        dc.setAttribute("UNIT",appPrefs.docUnitIndex);
848
        dc.setAttribute("RCD", appPrefs.RecentDCount);
849
        dc.setAttribute("DOC", appPrefs.DocDir);
850
        dc.setAttribute("PROFILES", appPrefs.ProfileDir);
851
        dc.setAttribute("SCRIPTS", appPrefs.ScriptDir);
852
        dc.setAttribute("TEMPLATES", appPrefs.documentTemplatesDir);
853
        dc.setAttribute("SHOWGUIDES", static_cast<int>(appPrefs.guidesSettings.guidesShown));
854
        dc.setAttribute("FRV", static_cast<int>(appPrefs.guidesSettings.framesShown));
855
        dc.setAttribute("SHOWMARGIN", static_cast<int>(appPrefs.guidesSettings.marginsShown));
856
        dc.setAttribute("SHOWBASE", static_cast<int>(appPrefs.guidesSettings.baseShown));
857
        dc.setAttribute("SHOWLINK", static_cast<int>(appPrefs.guidesSettings.linkShown));
858
        dc.setAttribute("SHOWPICT", static_cast<int>(appPrefs.guidesSettings.showPic));
859
        dc.setAttribute("SHOWControl", static_cast<int>(appPrefs.guidesSettings.showControls));
860
        dc.setAttribute("rulerMode", static_cast<int>(appPrefs.guidesSettings.rulerMode));
861
        dc.setAttribute("ScratchBottom", appPrefs.ScratchBottom);
862
        dc.setAttribute("ScratchLeft", appPrefs.ScratchLeft);
863
        dc.setAttribute("ScratchRight", appPrefs.ScratchRight);
864
        dc.setAttribute("ScratchTop", appPrefs.ScratchTop);
865
        dc.setAttribute("STECOLOR", appPrefs.STEcolor.name());
866
        dc.setAttribute("STEFONT", appPrefs.STEfont);
867
        dc.setAttribute("STYLEPREVIEW", static_cast<int>(appPrefs.haveStylePreview));
868
        dc.setAttribute("StartUp", static_cast<int>(appPrefs.showStartupDialog));
4039 fschmid 869
        dc.setAttribute("ToolTips", static_cast<int>(appPrefs.showToolTips));
2889 cbradney 870
        elem.appendChild(dc);
871
        QDomElement dc1=docu.createElement("GRID");
872
        dc1.setAttribute("MINOR",appPrefs.guidesSettings.minorGrid);
873
        dc1.setAttribute("MAJOR",appPrefs.guidesSettings.majorGrid);
874
        dc1.setAttribute("MINORC",appPrefs.guidesSettings.minorColor.name());
875
        dc1.setAttribute("MAJORC",appPrefs.guidesSettings.majorColor.name());
876
        dc1.setAttribute("GuideC", appPrefs.guidesSettings.guideColor.name());
877
        dc1.setAttribute("BaseC", appPrefs.guidesSettings.baseColor.name());
878
        dc1.setAttribute("GuideZ", appPrefs.guidesSettings.guideRad);
879
        dc1.setAttribute("BACKG", static_cast<int>(appPrefs.guidesSettings.before));
880
        dc1.setAttribute("SHOW", static_cast<int>(appPrefs.guidesSettings.gridShown));
881
        elem.appendChild(dc1);
882
        QDomElement dc1a=docu.createElement("PAGE");
883
        dc1a.setAttribute("PAGEC",appPrefs.DpapColor.name());
884
        dc1a.setAttribute("MARGC",appPrefs.guidesSettings.margColor.name());
885
        dc1a.setAttribute("RANDF", static_cast<int>(appPrefs.marginColored));
886
        dc1a.setAttribute("DScale",appPrefs.DisScale);
887
        elem.appendChild(dc1a);
888
        QDomElement dc2=docu.createElement("FONTS");
889
        dc2.setAttribute("FACE",appPrefs.toolSettings.defFont);
890
        dc2.setAttribute("SIZE",appPrefs.toolSettings.defSize / 10.0);
891
        dc2.setAttribute("AutomaticSubst", static_cast<int>(appPrefs.askBeforeSubstituite));
892
        elem.appendChild(dc2);
893
        QDomElement dc3=docu.createElement("TYPO");
894
        dc3.setAttribute("TIEF",appPrefs.typographicSettings.valueSubScript);
895
        dc3.setAttribute("TIEFSC",appPrefs.typographicSettings.scalingSubScript);
896
        dc3.setAttribute("HOCH",appPrefs.typographicSettings.valueSuperScript);
897
        dc3.setAttribute("HOCHSC",appPrefs.typographicSettings.scalingSuperScript);
898
        dc3.setAttribute("SMCAPS",appPrefs.typographicSettings.valueSmallCaps);
899
        dc3.setAttribute("AUTOL", appPrefs.typographicSettings.autoLineSpacing);
900
        dc3.setAttribute("BASE", appPrefs.typographicSettings.valueBaseGrid);
901
        dc3.setAttribute("BASEO", appPrefs.typographicSettings.offsetBaseGrid);
902
        if (appPrefs.typographicSettings.valueUnderlinePos == -1)
903
                dc3.setAttribute("UnderlinePos", appPrefs.typographicSettings.valueUnderlinePos);
904
        else
905
                dc3.setAttribute("UnderlinePos", appPrefs.typographicSettings.valueUnderlinePos / 10.0);
906
        if (appPrefs.typographicSettings.valueUnderlineWidth == -1)
907
                dc3.setAttribute("UnderlineWidth", appPrefs.typographicSettings.valueUnderlineWidth);
908
        else
909
                dc3.setAttribute("UnderlineWidth", appPrefs.typographicSettings.valueUnderlineWidth / 10.0);
910
        if (appPrefs.typographicSettings.valueStrikeThruPos == -1)
911
                dc3.setAttribute("StrikeThruPos", appPrefs.typographicSettings.valueStrikeThruPos);
912
        else
913
                dc3.setAttribute("StrikeThruPos", appPrefs.typographicSettings.valueStrikeThruPos / 10.0);
914
        if (appPrefs.typographicSettings.valueStrikeThruWidth == -1)
915
                dc3.setAttribute("StrikeThruWidth", appPrefs.typographicSettings.valueStrikeThruWidth);
916
        else
917
                dc3.setAttribute("StrikeThruWidth", appPrefs.typographicSettings.valueStrikeThruWidth / 10.0);
918
        elem.appendChild(dc3);
919
        QDomElement dc9=docu.createElement("TOOLS");
920
        dc9.setAttribute("PEN",appPrefs.toolSettings.dPen);
921
        dc9.setAttribute("BRUSH",appPrefs.toolSettings.dBrush);
922
        dc9.setAttribute("PENLINE",appPrefs.toolSettings.dPenLine);
923
        dc9.setAttribute("PENTEXT",appPrefs.toolSettings.dPenText);
924
        dc9.setAttribute("StrokeText",appPrefs.toolSettings.dStrokeText);
3093 fschmid 925
        dc9.setAttribute("TextBackGround", appPrefs.toolSettings.dTextBackGround);
926
        dc9.setAttribute("TextLineColor", appPrefs.toolSettings.dTextLineColor);
927
        dc9.setAttribute("TextBackGroundShade", appPrefs.toolSettings.dTextBackGroundShade);
928
        dc9.setAttribute("TextLineShade", appPrefs.toolSettings.dTextLineShade);
929
        dc9.setAttribute("TextPenShade", appPrefs.toolSettings.dTextPenShade);
930
        dc9.setAttribute("TextStrokeShade", appPrefs.toolSettings.dTextStrokeShade);
2889 cbradney 931
        dc9.setAttribute("TEXTCOL",appPrefs.toolSettings.dCols);
932
        dc9.setAttribute("TEXTGAP",appPrefs.toolSettings.dGap);
933
        dc9.setAttribute("TabWidth",appPrefs.toolSettings.dTabWidth);
934
        dc9.setAttribute("TabFill",appPrefs.toolSettings.tabFillChar);
935
        dc9.setAttribute("STIL",appPrefs.toolSettings.dLineArt);
936
        dc9.setAttribute("STILLINE",appPrefs.toolSettings.dLstyleLine);
937
        dc9.setAttribute("WIDTH",appPrefs.toolSettings.dWidth);
938
        dc9.setAttribute("WIDTHLINE",appPrefs.toolSettings.dWidthLine);
939
        dc9.setAttribute("PENSHADE",appPrefs.toolSettings.dShade2);
940
        dc9.setAttribute("LINESHADE",appPrefs.toolSettings.dShadeLine);
941
        dc9.setAttribute("BRUSHSHADE",appPrefs.toolSettings.dShade);
942
        dc9.setAttribute("MAGMIN",appPrefs.toolSettings.magMin);
943
        dc9.setAttribute("MAGMAX",appPrefs.toolSettings.magMax);
944
        dc9.setAttribute("MAGSTEP",appPrefs.toolSettings.magStep);
945
        dc9.setAttribute("CPICT",appPrefs.toolSettings.dBrushPict);
946
        dc9.setAttribute("PICTSHADE",appPrefs.toolSettings.shadePict);
947
        dc9.setAttribute("PICTSCX",appPrefs.toolSettings.scaleX);
948
        dc9.setAttribute("PICTSCY",appPrefs.toolSettings.scaleY);
949
        dc9.setAttribute("POLYC", appPrefs.toolSettings.polyC);
950
        dc9.setAttribute("POLYF", appPrefs.toolSettings.polyF);
951
        dc9.setAttribute("POLYR", appPrefs.toolSettings.polyR);
952
        dc9.setAttribute("POLYFD", appPrefs.toolSettings.polyFd);
953
        dc9.setAttribute("POLYS", static_cast<int>(appPrefs.toolSettings.polyS));
954
        dc9.setAttribute("PSCALE", static_cast<int>(appPrefs.toolSettings.scaleType));
955
        dc9.setAttribute("PASPECT", static_cast<int>(appPrefs.toolSettings.aspectRatio));
956
        dc9.setAttribute("EmbeddedPath", static_cast<int>(appPrefs.toolSettings.useEmbeddedPath));
957
        dc9.setAttribute("HalfRes", appPrefs.toolSettings.lowResType);
958
        dc9.setAttribute("StartArrow", appPrefs.toolSettings.dStartArrow);
959
        dc9.setAttribute("EndArrow", appPrefs.toolSettings.dEndArrow);
960
        elem.appendChild(dc9);
961
        QDomElement dc4=docu.createElement("MAINWINDOW");
962
        dc4.setAttribute("XPOS",appPrefs.mainWinSettings.xPosition);
963
        dc4.setAttribute("YPOS",appPrefs.mainWinSettings.yPosition);
964
        dc4.setAttribute("WIDTH",appPrefs.mainWinSettings.width);
965
        dc4.setAttribute("HEIGHT",appPrefs.mainWinSettings.height);
966
        elem.appendChild(dc4);
967
        QDomElement dc5=docu.createElement("TOOLPALETTE");
968
        dc5.setAttribute("VISIBLE", static_cast<int>(appPrefs.mainToolBarSettings.visible));
969
        dc5.setAttribute("PDFVISIBLE", static_cast<int>(appPrefs.pdfToolBarSettings.visible));
970
        elem.appendChild(dc5);
971
        QDomElement dc73=docu.createElement("SCRAPBOOK");
972
        dc73.setAttribute("PREVIEW",appPrefs.PSize);
973
        dc73.setAttribute("SAVE", static_cast<int>(appPrefs.SaveAtQ));
974
        elem.appendChild(dc73);
975
        QDomElement dc75=docu.createElement("PAGEPALETTE");
976
        dc75.setAttribute("THUMBS", static_cast<int>(appPrefs.SepalT));
977
        dc75.setAttribute("NAMES", static_cast<int>(appPrefs.SepalN));
978
        elem.appendChild(dc75);
979
        QDomElement dc76=docu.createElement("DOKUMENT");
980
        dc76.setAttribute("PAGESIZE",appPrefs.pageSize);
981
        dc76.setAttribute("AUSRICHTUNG",appPrefs.pageOrientation);
982
        dc76.setAttribute("BREITE",appPrefs.PageWidth);
983
        dc76.setAttribute("HOEHE",appPrefs.PageHeight);
984
        dc76.setAttribute("RANDO",appPrefs.RandOben);
985
        dc76.setAttribute("RANDU",appPrefs.RandUnten);
986
        dc76.setAttribute("RANDL",appPrefs.RandLinks);
987
        dc76.setAttribute("RANDR",appPrefs.RandRechts);
2894 fschmid 988
        dc76.setAttribute("DOPPEL", appPrefs.FacingPages);
2889 cbradney 989
        dc76.setAttribute("AutoSave", static_cast<int>(appPrefs.AutoSave));
990
        dc76.setAttribute("AutoSaveTime", appPrefs.AutoSaveTime);
991
        elem.appendChild(dc76);
3016 fschmid 992
        QDomElement pageSetAttr = docu.createElement("PageSets");
993
        QValueList<PageSet>::Iterator itpgset;
994
        for(itpgset = appPrefs.pageSets.begin(); itpgset != appPrefs.pageSets.end(); ++itpgset )
995
        {
996
                QDomElement pgst = docu.createElement("Set");
997
                pgst.setAttribute("Name", (*itpgset).Name);
998
                pgst.setAttribute("FirstPage", (*itpgset).FirstPage);
999
                pgst.setAttribute("Rows", (*itpgset).Rows);
1000
                pgst.setAttribute("Columns", (*itpgset).Columns);
1001
                pgst.setAttribute("GapHorizontal", (*itpgset).GapHorizontal);
1002
                pgst.setAttribute("GapVertical", (*itpgset).GapVertical);
1003
                pgst.setAttribute("GapBelow", (*itpgset).GapBelow);
3026 fschmid 1004
                QStringList pNames = (*itpgset).pageNames;
1005
                QStringList::Iterator itpgsetN;
1006
                for(itpgsetN = pNames.begin(); itpgsetN != pNames.end(); ++itpgsetN )
1007
                {
1008
                        QDomElement pgstN = docu.createElement("PageNames");
1009
                        pgstN.setAttribute("Name", (*itpgsetN));
1010
                        pgst.appendChild(pgstN);
1011
                }
3016 fschmid 1012
                pageSetAttr.appendChild(pgst);
1013
        }
1014
        elem.appendChild(pageSetAttr);
3183 fschmid 1015
        QDomElement dc79ac=docu.createElement("Checker");
1016
        dc79ac.setAttribute("currentProfile", appPrefs.curCheckProfile);
1017
        elem.appendChild(dc79ac);
3033 cbradney 1018
        CheckerPrefsList::Iterator itcp;
1019
        CheckerPrefsList::Iterator itcpend=appPrefs.checkerProfiles.end();
1020
        for (itcp = appPrefs.checkerProfiles.begin(); itcp != itcpend; ++itcp)
2889 cbradney 1021
        {
1022
                QDomElement dc79a=docu.createElement("CheckProfile");
1023
                dc79a.setAttribute("Name",itcp.key());
1024
                dc79a.setAttribute("ignoreErrors", static_cast<int>(itcp.data().ignoreErrors));
1025
                dc79a.setAttribute("autoCheck", static_cast<int>(itcp.data().autoCheck));
1026
                dc79a.setAttribute("checkGlyphs", static_cast<int>(itcp.data().checkGlyphs));
1027
                dc79a.setAttribute("checkOrphans", static_cast<int>(itcp.data().checkOrphans));
1028
                dc79a.setAttribute("checkOverflow", static_cast<int>(itcp.data().checkOverflow));
1029
                dc79a.setAttribute("checkPictures", static_cast<int>(itcp.data().checkPictures));
1030
                dc79a.setAttribute("checkResolution", static_cast<int>(itcp.data().checkResolution));
1031
                dc79a.setAttribute("checkTransparency", static_cast<int>(itcp.data().checkTransparency));
1032
                dc79a.setAttribute("checkAnnotations", static_cast<int>(itcp.data().checkAnnotations));
1033
                dc79a.setAttribute("checkRasterPDF", static_cast<int>(itcp.data().checkRasterPDF));
1034
                dc79a.setAttribute("minResolution",itcp.data().minResolution);
1035
                elem.appendChild(dc79a);
1036
        }
1037
        QDomElement dc81=docu.createElement("CMS");
1038
        dc81.setAttribute("DPSo", static_cast<int>(appPrefs.DCMSset.SoftProofOn));
1039
        dc81.setAttribute("DPuse", static_cast<int>(appPrefs.DCMSset.CMSinUse));
1040
        dc81.setAttribute("DPgam", static_cast<int>(appPrefs.DCMSset.GamutCheck));
1041
        dc81.setAttribute("DPbla", static_cast<int>(appPrefs.DCMSset.BlackPoint));
1042
        dc81.setAttribute("DPMo",appPrefs.DCMSset.DefaultMonitorProfile);
1043
        dc81.setAttribute("DPPr",appPrefs.DCMSset.DefaultPrinterProfile);
2984 fschmid 1044
        dc81.setAttribute("DPIn",appPrefs.DCMSset.DefaultImageRGBProfile);
1045
        dc81.setAttribute("DPInCMYK",appPrefs.DCMSset.DefaultImageCMYKProfile);
1046
        dc81.setAttribute("DPIn2",appPrefs.DCMSset.DefaultSolidColorProfile);
2889 cbradney 1047
        dc81.setAttribute("DIPr",appPrefs.DCMSset.DefaultIntentPrinter);
1048
        dc81.setAttribute("DIMo",appPrefs.DCMSset.DefaultIntentMonitor);
2984 fschmid 1049
        dc81.setAttribute("DIMo2",appPrefs.DCMSset.DefaultIntentImages);
2889 cbradney 1050
        elem.appendChild(dc81);
1051
        QDomElement dc82=docu.createElement("PRINTER");
1052
        dc82.setAttribute("NAME",appPrefs.PrinterName);
1053
        dc82.setAttribute("FILE",appPrefs.PrinterFile);
1054
        dc82.setAttribute("COMMAND",appPrefs.PrinterCommand);
1055
        dc82.setAttribute("CLIPMARGIN", static_cast<int>(appPrefs.ClipMargin));
1056
        dc82.setAttribute("GMODE", static_cast<int>(appPrefs.GCRMode));
1057
        elem.appendChild(dc82);
1058
        QDomElement dc8Pr=docu.createElement("PRINTPREVIEW");
1059
        dc8Pr.setAttribute("Mode", static_cast<int>(appPrefs.PrPr_Mode));
1060
        dc8Pr.setAttribute("GcrMode", static_cast<int>(appPrefs.Gcr_Mode));
1061
        dc8Pr.setAttribute("AlphaText", static_cast<int>(appPrefs.PrPr_AlphaText));
1062
        dc8Pr.setAttribute("AlphaGraphics", static_cast<int>(appPrefs.PrPr_AlphaGraphics));
1063
        dc8Pr.setAttribute("Transparency", static_cast<int>(appPrefs.PrPr_Transparency));
1064
        dc8Pr.setAttribute("Cyan", static_cast<int>(appPrefs.PrPr_C));
1065
        dc8Pr.setAttribute("Magenta", static_cast<int>(appPrefs.PrPr_M));
1066
        dc8Pr.setAttribute("Yellow", static_cast<int>(appPrefs.PrPr_Y));
1067
        dc8Pr.setAttribute("Black", static_cast<int>(appPrefs.PrPr_K));
1068
        elem.appendChild(dc8Pr);
1069
        QDomElement dc8Ex = docu.createElement("EXTERNAL");
1070
        dc8Ex.setAttribute("GIMP", imageEditorExecutable());
1071
        dc8Ex.setAttribute("GS", ghostscriptExecutable());
1072
        dc8Ex.setAttribute("AlphaGraphics", static_cast<int>(appPrefs.gs_AntiAliasGraphics));
1073
        dc8Ex.setAttribute("AlphaText", static_cast<int>(appPrefs.gs_AntiAliasText));
1074
        dc8Ex.setAttribute("Resolution", appPrefs.gs_Resolution);
1075
        elem.appendChild(dc8Ex);
1076
        QDomElement rde=docu.createElement("HYPHEN");
1077
        rde.setAttribute("LANG", appPrefs.Language);
1078
        rde.setAttribute("WORDLEN", appPrefs.MinWordLen);
1079
        rde.setAttribute("HYCOUNT", appPrefs.HyCount);
1080
        rde.setAttribute("MODE", static_cast<int>(appPrefs.Automatic));
1081
        rde.setAttribute("INMODE", static_cast<int>(appPrefs.AutoCheck));
1082
        elem.appendChild(rde);
1083
        ColorList::Iterator itc;
1084
        for (itc = appPrefs.DColors.begin(); itc != appPrefs.DColors.end(); ++itc)
1085
        {
1086
                QDomElement co=docu.createElement("COLOR");
1087
                co.setAttribute("NAME",itc.key());
1088
                co.setAttribute("RGB",appPrefs.DColors[itc.key()].getRGBColor().name());
1089
                co.setAttribute("CMYK",appPrefs.DColors[itc.key()].name());
3051 fschmid 1090
                co.setAttribute("Spot",static_cast<int>(appPrefs.DColors[itc.key()].isSpotColor()));
3060 fschmid 1091
                co.setAttribute("Register",static_cast<int>(appPrefs.DColors[itc.key()].isRegistrationColor()));
2889 cbradney 1092
                elem.appendChild(co);
1093
        }
1094
        for ( SCFontsIterator itf(appPrefs.AvailFonts); itf.current(); ++itf)
1095
        {
1096
                QDomElement fn=docu.createElement("FONT");
1097
                fn.setAttribute("NAME",itf.currentKey());
1098
                fn.setAttribute("EMBED",static_cast<int>(itf.current()->EmbedPS));
1099
                fn.setAttribute("USE", static_cast<int>(itf.current()->UseFont));
1100
                fn.setAttribute("SUBSET", static_cast<int>(itf.current()->Subset));
1101
                elem.appendChild(fn);
1102
        }
1103
        for (uint rd=0; rd<appPrefs.RecentDocs.count(); ++rd)
1104
        {
1105
                QDomElement rde=docu.createElement("RECENT");
1106
                rde.setAttribute("NAME",appPrefs.RecentDocs[rd]);
1107
                elem.appendChild(rde);
1108
        }
1109
        for (QMap<QString,Keys>::Iterator ksc=appPrefs.KeyActions.begin(); ksc!=appPrefs.KeyActions.end(); ++ksc)
1110
        {
1111
                QDomElement kscc=docu.createElement("SHORTCUT");
1112
                kscc.setAttribute("ACTION",ksc.data().actionName);
3932 avox 1113
                kscc.setAttribute("SEQUENCE",KeyManager::getKeyText(ksc.data().keySequence));
2889 cbradney 1114
                elem.appendChild(kscc);
1115
        }
1116
        QMap<QString,QString>::Iterator itfsu;
1117
        for (itfsu = appPrefs.GFontSub.begin(); itfsu != appPrefs.GFontSub.end(); ++itfsu)
1118
        {
1119
                QDomElement fosu = docu.createElement("Substitute");
1120
                fosu.setAttribute("Name",itfsu.key());
1121
                fosu.setAttribute("Replace",itfsu.data());
1122
                elem.appendChild(fosu);
1123
        }
1124
        for (uint ccs=0; ccs<appPrefs.CustomColorSets.count(); ++ccs)
1125
        {
1126
                QDomElement cos=docu.createElement("COLORSET");
1127
                cos.setAttribute("NAME",appPrefs.CustomColorSets[ccs]);
1128
                elem.appendChild(cos);
1129
        }
1130
        QDomElement cosd=docu.createElement("DCOLORSET");
1131
        cosd.setAttribute("NAME",appPrefs.DColorSet);
1132
        elem.appendChild(cosd);
1133
        QDomElement pdf = docu.createElement("PDF");
1134
        pdf.setAttribute("Thumbnails", static_cast<int>(appPrefs.PDF_Options.Thumbnails));
1135
        pdf.setAttribute("Articles", static_cast<int>(appPrefs.PDF_Options.Articles));
1136
        pdf.setAttribute("Bookmarks", static_cast<int>(appPrefs.PDF_Options.Bookmarks));
1137
        pdf.setAttribute("Compress", static_cast<int>(appPrefs.PDF_Options.Compress));
1138
        pdf.setAttribute("CMethod", appPrefs.PDF_Options.CompressMethod);
1139
        pdf.setAttribute("Quality", appPrefs.PDF_Options.Quality);
1140
        pdf.setAttribute("MirrorH", static_cast<int>(appPrefs.PDF_Options.MirrorH));
1141
        pdf.setAttribute("MirrorV", static_cast<int>(appPrefs.PDF_Options.MirrorV));
1142
        pdf.setAttribute("RotateDeg", static_cast<int>(appPrefs.PDF_Options.RotateDeg));
1143
        pdf.setAttribute("PresentMode", static_cast<int>(appPrefs.PDF_Options.PresentMode));
1144
        pdf.setAttribute("RecalcPic", static_cast<int>(appPrefs.PDF_Options.RecalcPic));
1145
        pdf.setAttribute("Grayscale", static_cast<int>(appPrefs.PDF_Options.isGrayscale));
1146
        pdf.setAttribute("RGBMode", static_cast<int>(appPrefs.PDF_Options.UseRGB));
1147
        pdf.setAttribute("UseProfiles", static_cast<int>(appPrefs.PDF_Options.UseProfiles));
1148
        pdf.setAttribute("UseProfiles2", static_cast<int>(appPrefs.PDF_Options.UseProfiles2));
1149
        pdf.setAttribute("Binding", appPrefs.PDF_Options.Binding);
1150
        pdf.setAttribute("PicRes", appPrefs.PDF_Options.PicRes);
1151
        pdf.setAttribute("Resolution", appPrefs.PDF_Options.Resolution);
1152
        pdf.setAttribute("Version", appPrefs.PDF_Options.Version);
1153
        pdf.setAttribute("Intent", appPrefs.PDF_Options.Intent);
1154
        pdf.setAttribute("Intent2", appPrefs.PDF_Options.Intent2);
1155
        pdf.setAttribute("SolidP", appPrefs.PDF_Options.SolidProf);
1156
        pdf.setAttribute("ImageP", appPrefs.PDF_Options.ImageProf);
1157
        pdf.setAttribute("PrintP", appPrefs.PDF_Options.PrintProf);
1158
        pdf.setAttribute("InfoString", appPrefs.PDF_Options.Info);
1159
        pdf.setAttribute("BTop", appPrefs.PDF_Options.BleedTop);
1160
        pdf.setAttribute("BLeft", appPrefs.PDF_Options.BleedLeft);
1161
        pdf.setAttribute("BRight", appPrefs.PDF_Options.BleedRight);
1162
        pdf.setAttribute("BBottom", appPrefs.PDF_Options.BleedBottom);
1163
        pdf.setAttribute("ImagePr", static_cast<int>(appPrefs.PDF_Options.EmbeddedI));
1164
        pdf.setAttribute("PassOwner", appPrefs.PDF_Options.PassOwner);
1165
        pdf.setAttribute("PassUser", appPrefs.PDF_Options.PassUser);
1166
        pdf.setAttribute("Permissions", appPrefs.PDF_Options.Permissions);
1167
        pdf.setAttribute("Encrypt", static_cast<int>(appPrefs.PDF_Options.Encrypt));
1168
        pdf.setAttribute("UseLayers", static_cast<int>(appPrefs.PDF_Options.useLayers));
1169
        pdf.setAttribute("UseLpi", static_cast<int>(appPrefs.PDF_Options.UseLPI));
3079 fschmid 1170
        pdf.setAttribute("UseSpotColors", static_cast<int>(appPrefs.PDF_Options.UseSpotColors));
1171
        pdf.setAttribute("doMultiFile", static_cast<int>(appPrefs.PDF_Options.doMultiFile));
4197 fschmid 1172
        pdf.setAttribute("displayBookmarks", static_cast<int>(appPrefs.PDF_Options.displayBookmarks));
1173
        pdf.setAttribute("displayFullscreen", static_cast<int>(appPrefs.PDF_Options.displayFullscreen));
1174
        pdf.setAttribute("displayLayers", static_cast<int>(appPrefs.PDF_Options.displayLayers));
1175
        pdf.setAttribute("displayThumbs", static_cast<int>(appPrefs.PDF_Options.displayThumbs));
1176
        pdf.setAttribute("PageLayout", appPrefs.PDF_Options.PageLayout);
1177
        pdf.setAttribute("openAction", appPrefs.PDF_Options.openAction);
2889 cbradney 1178
        QMap<QString,LPIData>::Iterator itlp;
1179
        for (itlp = appPrefs.PDF_Options.LPISettings.begin(); itlp != appPrefs.PDF_Options.LPISettings.end(); ++itlp)
1180
        {
1181
                QDomElement pdf4 = docu.createElement("LPI");
1182
                pdf4.setAttribute("Color", itlp.key());
1183
                pdf4.setAttribute("Frequency", itlp.data().Frequency);
1184
                pdf4.setAttribute("Angle", itlp.data().Angle);
1185
                pdf4.setAttribute("SpotFunction", itlp.data().SpotFunc);
1186
                pdf.appendChild(pdf4);
1187
        }
1188
        elem.appendChild(pdf);
1189
        QDomElement docItemAttrs = docu.createElement("DefaultItemAttributes");
1190
        for(ObjAttrVector::Iterator objAttrIt = appPrefs.defaultItemAttributes.begin() ; objAttrIt != appPrefs.defaultItemAttributes.end(); ++objAttrIt )
1191
        {
1192
                QDomElement itemAttr = docu.createElement("ItemAttribute");
1193
                itemAttr.setAttribute("Name", (*objAttrIt).name);
1194
                itemAttr.setAttribute("Type", (*objAttrIt).type);
1195
                itemAttr.setAttribute("Value", (*objAttrIt).value);
1196
                itemAttr.setAttribute("Parameter", (*objAttrIt).parameter);
1197
                itemAttr.setAttribute("Relationship", (*objAttrIt).relationship);
1198
                itemAttr.setAttribute("RelationshipTo", (*objAttrIt).relationshipto);
1199
                itemAttr.setAttribute("AutoAddTo", (*objAttrIt).autoaddto);
1200
                docItemAttrs.appendChild(itemAttr);
1201
        }
1202
        elem.appendChild(docItemAttrs);
1203
        QDomElement tocElem = docu.createElement("TablesOfContents");
1204
        for(ToCSetupVector::Iterator tocSetupIt = appPrefs.defaultToCSetups.begin() ; tocSetupIt != appPrefs.defaultToCSetups.end(); ++tocSetupIt )
1205
        {
1206
                QDomElement tocsetup = docu.createElement("TableOfContents");
1207
                tocsetup.setAttribute("Name", (*tocSetupIt).name);
1208
                tocsetup.setAttribute("ItemAttributeName", (*tocSetupIt).itemAttrName);
1209
                tocsetup.setAttribute("FrameName", (*tocSetupIt).frameName);
1210
                tocsetup.setAttribute("ListNonPrinting", (*tocSetupIt).listNonPrintingFrames);
1211
                tocsetup.setAttribute("Style", (*tocSetupIt).textStyle);
1212
                tocsetup.setAttribute("NumberPlacement", (*tocSetupIt).pageLocation);
1213
                tocElem.appendChild(tocsetup);
1214
        }
1215
        elem.appendChild(tocElem);
1216
        // lorem ipsum
1217
        QDomElement liElem = docu.createElement("LoremIpsum");
1218
        liElem.setAttribute("useStandardLI", static_cast<int>(appPrefs.useStandardLI));
1219
        liElem.setAttribute("paragraphsLI", appPrefs.paragraphsLI);
1220
        elem.appendChild(liElem);
1221
        // write file
3170 craig 1222
        bool result = false;
2889 cbradney 1223
        QFile f(ho);
1224
        if(!f.open(IO_WriteOnly))
3170 craig 1225
        {
1226
                m_lastError = tr("Could not open preferences file \"%1\" for writing: %2")
1227
                        .arg(ho).arg(qApp->translate("QFile",f.errorString()));
1228
        }
1229
        else
1230
        {
1231
                QTextStream s(&f);
1232
                s.setEncoding(QTextStream::UnicodeUTF8);
1233
                s<<docu.toString();
1234
                if (f.status() == IO_Ok)
1235
                        result = true;
1236
                else
1237
                        m_lastError = tr("Writing to preferences file \"%1\" failed: "
1238
                                             "QIODevice status code %2")
1239
                                .arg(ho).arg(f.status());
1240
        }
1241
        if (f.isOpen())
1242
                f.close();
1243
        return result;
2889 cbradney 1244
}
1245
 
3171 craig 1246
// Returns false on error. It's the caller's job to make sure the prefs file
1247
// actually exists.
2889 cbradney 1248
bool PrefsManager::ReadPref(QString ho)
1249
{
1250
        QDomDocument docu("scridoc");
1251
        QFile f(ho);
1252
        if(!f.open(IO_ReadOnly))
3171 craig 1253
        {
1254
                m_lastError = tr("Failed to open prefs file \"%1\": %2")
1255
                        .arg(ho).arg( qApp->translate("QFile",f.errorString()) );
2889 cbradney 1256
                return false;
3171 craig 1257
        }
2889 cbradney 1258
        QTextStream ts(&f);
1259
        ts.setEncoding(QTextStream::UnicodeUTF8);
1260
        QString errorMsg;
1261
        int errorLine = 0, errorColumn = 0;
1262
        if( !docu.setContent(ts.read(), &errorMsg, &errorLine, &errorColumn) )
1263
        {
3171 craig 1264
                m_lastError = tr("Failed to read prefs XML from \"%1\": %2 at line %3, col %4")
1265
                        .arg(ho).arg(errorMsg).arg(errorLine).arg(errorColumn);
2889 cbradney 1266
                f.close();
1267
                return false;
1268
        }
1269
        f.close();
1270
        QDomElement elem=docu.documentElement();
1271
        if (elem.tagName() != "SCRIBUSRC")
1272
                return false;
1273
        appPrefs.DColors.clear();
1274
        ScColor lf = ScColor();
1275
        QDomNode DOC=elem.firstChild();
3183 fschmid 1276
        if (!DOC.namedItem("CheckProfile").isNull())
1277
                appPrefs.checkerProfiles.clear();
2889 cbradney 1278
        while(!DOC.isNull())
1279
        {
1280
                QDomElement dc=DOC.toElement();
1281
                if (dc.tagName()=="GUI")
1282
                {
1283
                        appPrefs.GUI = dc.attribute("STILT","Default");
4026 craig 1284
                        appPrefs.Wheelval = dc.attribute("RAD").toInt();
1285
                        appPrefs.guidesSettings.grabRad = dc.attribute("GRAB", "4").toInt();
1286
                        appPrefs.docUnitIndex = dc.attribute("UNIT", "0").toInt();
1287
                        appPrefs.AppFontSize = dc.attribute("APF", "12").toInt();
1288
                        appPrefs.PaletteFontSize = dc.attribute("PFS", "10").toInt();
2889 cbradney 1289
                        appPrefs.RecentDCount = dc.attribute("RCD","5").toUInt();
1290
                        appPrefs.DocDir = dc.attribute("DOC","");
1291
                        appPrefs.ProfileDir = dc.attribute("PROFILES","");
1292
                        appPrefs.ScriptDir = dc.attribute("SCRIPTS","");
1293
                        appPrefs.documentTemplatesDir = dc.attribute("TEMPLATES","");
4026 craig 1294
                        appPrefs.guidesSettings.guidesShown = static_cast<bool>(dc.attribute("SHOWGUIDES", "1").toInt());
1295
                        appPrefs.guidesSettings.framesShown = static_cast<bool>(dc.attribute("FRV", "1").toInt());
1296
                        appPrefs.guidesSettings.marginsShown = static_cast<bool>(dc.attribute("SHOWMARGIN", "1").toInt());
1297
                        appPrefs.guidesSettings.baseShown = static_cast<bool>(dc.attribute("SHOWBASE", "1").toInt());
1298
                        appPrefs.guidesSettings.linkShown = static_cast<bool>(dc.attribute("SHOWLINK", "0").toInt());
1299
                        appPrefs.guidesSettings.showPic = static_cast<bool>(dc.attribute("SHOWPICT", "1").toInt());
1300
                        appPrefs.guidesSettings.showControls = static_cast<bool>(dc.attribute("SHOWControl", "0").toInt());
1301
                        appPrefs.guidesSettings.rulerMode = static_cast<bool>(dc.attribute("rulerMode", "1").toInt());
1302
                        appPrefs.haveStylePreview = static_cast<bool>(dc.attribute("STYLEPREVIEW", "1").toInt());
1303
                        appPrefs.showStartupDialog = static_cast<bool>(dc.attribute("StartUp", "1").toInt());
1304
                        appPrefs.ScratchBottom = dc.attribute("ScratchBottom", "20").toDouble();
1305
                        appPrefs.ScratchLeft = dc.attribute("ScratchLeft", "100").toDouble();
1306
                        appPrefs.ScratchRight = dc.attribute("ScratchRight", "100").toDouble();
1307
                        appPrefs.ScratchTop = dc.attribute("ScratchTop", "20").toDouble();
2889 cbradney 1308
                        if (dc.hasAttribute("STECOLOR"))
1309
                                appPrefs.STEcolor = QColor(dc.attribute("STECOLOR"));
1310
                        if (dc.hasAttribute("STEFONT"))
1311
                                appPrefs.STEfont = dc.attribute("STEFONT");
4039 fschmid 1312
                        appPrefs.showToolTips = static_cast<bool>(dc.attribute("ToolTips", "1").toInt());
2889 cbradney 1313
                }
1314
                if (dc.tagName()=="GRID")
1315
                {
4026 craig 1316
                        appPrefs.guidesSettings.minorGrid = dc.attribute("MINOR").toDouble();
1317
                        appPrefs.guidesSettings.majorGrid = dc.attribute("MAJOR").toDouble();
2889 cbradney 1318
                        appPrefs.guidesSettings.minorColor = QColor(dc.attribute("MINORC"));
1319
                        appPrefs.guidesSettings.majorColor = QColor(dc.attribute("MAJORC"));
4026 craig 1320
                        appPrefs.guidesSettings.before = static_cast<bool>(dc.attribute("BACKG", "1").toInt());
1321
                        appPrefs.guidesSettings.gridShown = static_cast<bool>(dc.attribute("SHOW", "0").toInt());
2889 cbradney 1322
                        if (dc.hasAttribute("GuideC"))
1323
                                appPrefs.guidesSettings.guideColor = QColor(dc.attribute("GuideC"));
1324
                        if (dc.hasAttribute("GuideZ"))
4026 craig 1325
                                appPrefs.guidesSettings.guideRad = dc.attribute("GuideZ").toDouble();
2889 cbradney 1326
                        if (dc.hasAttribute("BaseC"))
1327
                                appPrefs.guidesSettings.baseColor = QColor(dc.attribute("BaseC"));
1328
                }
1329
                if (dc.tagName()=="PAGE")
1330
                {
1331
                        appPrefs.DpapColor = QColor(dc.attribute("PAGEC"));
1332
                        appPrefs.guidesSettings.margColor = QColor(dc.attribute("MARGC","#0000ff"));
4026 craig 1333
                        appPrefs.marginColored = static_cast<bool>(dc.attribute("RANDF", "0").toInt());
1334
                        appPrefs.DisScale = dc.attribute("DScale", "1").toDouble();
2889 cbradney 1335
                }
1336
                if (dc.tagName()=="TYPO")
1337
                {
4026 craig 1338
                        appPrefs.typographicSettings.valueSuperScript = dc.attribute("HOCH").toInt();
1339
                        appPrefs.typographicSettings.scalingSuperScript = dc.attribute("HOCHSC").toInt();
1340
                        appPrefs.typographicSettings.valueSubScript = dc.attribute("TIEF").toInt();
1341
                        appPrefs.typographicSettings.scalingSubScript = dc.attribute("TIEFSC").toInt();
1342
                        appPrefs.typographicSettings.valueSmallCaps = dc.attribute("SMCAPS").toInt();
1343
                        appPrefs.typographicSettings.valueBaseGrid = dc.attribute("BASE", "12").toDouble();
1344
                        appPrefs.typographicSettings.offsetBaseGrid = dc.attribute("BASEO", "0").toDouble();
1345
                        appPrefs.typographicSettings.autoLineSpacing = dc.attribute("AUTOL", "20").toInt();
1346
                        double ulp = dc.attribute("UnderlinePos", "-1").toDouble();
2889 cbradney 1347
                        if (ulp != -1)
1348
                                appPrefs.typographicSettings.valueUnderlinePos = qRound(ulp * 10);
1349
                        else
1350
                                appPrefs.typographicSettings.valueUnderlinePos = -1;
4026 craig 1351
                        double ulw = dc.attribute("UnderlineWidth", "-1").toDouble();
2889 cbradney 1352
                        if (ulw != -1)
1353
                                appPrefs.typographicSettings.valueUnderlineWidth = qRound(ulw * 10);
1354
                        else
1355
                                appPrefs.typographicSettings.valueUnderlineWidth = -1;
4026 craig 1356
                        double stp = dc.attribute("StrikeThruPos", "-1").toDouble();
2889 cbradney 1357
                        if (stp != -1)
1358
                                appPrefs.typographicSettings.valueStrikeThruPos = qRound(ulp * 10);
1359
                        else
1360
                                appPrefs.typographicSettings.valueStrikeThruPos = -1;
4026 craig 1361
                        double stw = dc.attribute("StrikeThruWidth", "-1").toDouble();
2889 cbradney 1362
                        if (stw != -1)
1363
                                appPrefs.typographicSettings.valueStrikeThruWidth = qRound(stw * 10);
1364
                        else
1365
                                appPrefs.typographicSettings.valueStrikeThruWidth = -1;
1366
                }
1367
                if (dc.tagName()=="TOOLS")
1368
                {
1369
                        appPrefs.toolSettings.dPen = dc.attribute("PEN");
1370
                        appPrefs.toolSettings.dBrush = dc.attribute("BRUSH");
1371
                        appPrefs.toolSettings.dPenLine = dc.attribute("PENLINE");
1372
                        appPrefs.toolSettings.dPenText = dc.attribute("PENTEXT");
1373
                        appPrefs.toolSettings.dStrokeText = dc.attribute("StrokeText", appPrefs.toolSettings.dPenText);
3093 fschmid 1374
                        appPrefs.toolSettings.dTextBackGround = dc.attribute("TextBackGround", "None");
1375
                        appPrefs.toolSettings.dTextLineColor = dc.attribute("TextLineColor", "None");
4026 craig 1376
                        appPrefs.toolSettings.dTextBackGroundShade = dc.attribute("TextBackGroundShade", "100").toInt();
1377
                        appPrefs.toolSettings.dTextLineShade = dc.attribute("TextLineShade", "100").toInt();
1378
                        appPrefs.toolSettings.dTextPenShade = dc.attribute("TextPenShade", "100").toInt();
1379
                        appPrefs.toolSettings.dTextStrokeShade = dc.attribute("TextStrokeShade", "100").toInt();
1380
                        appPrefs.toolSettings.dCols = dc.attribute("TEXTCOL", "1").toInt();
1381
                        appPrefs.toolSettings.dGap = dc.attribute("TEXTGAP", "0.0").toDouble();
2889 cbradney 1382
                        appPrefs.toolSettings.tabFillChar = dc.attribute("TabFill", "");
4026 craig 1383
                        appPrefs.toolSettings.dTabWidth = dc.attribute("TabWidth", "36.0").toDouble();
1384
                        appPrefs.toolSettings.dLineArt = dc.attribute("STIL").toInt();
1385
                        appPrefs.toolSettings.dLstyleLine = dc.attribute("STILLINE").toInt();
1386
                        appPrefs.toolSettings.dWidth = dc.attribute("WIDTH").toDouble();
1387
                        appPrefs.toolSettings.dWidthLine = dc.attribute("WIDTHLINE").toDouble();
1388
                        appPrefs.toolSettings.dShade2 = dc.attribute("PENSHADE").toInt();
1389
                        appPrefs.toolSettings.dShadeLine = dc.attribute("LINESHADE").toInt();
1390
                        appPrefs.toolSettings.dShade = dc.attribute("BRUSHSHADE").toInt();
1391
                        appPrefs.toolSettings.magMin = dc.attribute("MAGMIN", "10").toInt();
1392
                        appPrefs.toolSettings.magMax = dc.attribute("MAGMAX", "3200").toInt();
1393
                        appPrefs.toolSettings.magStep = dc.attribute("MAGSTEP", "25").toInt();
2889 cbradney 1394
                        appPrefs.toolSettings.dBrushPict = dc.attribute("CPICT");
4026 craig 1395
                        appPrefs.toolSettings.shadePict = dc.attribute("PICTSHADE", "100").toInt();
1396
                        appPrefs.toolSettings.scaleX = dc.attribute("PICTSCX", "1").toDouble();
1397
                        appPrefs.toolSettings.scaleY = dc.attribute("PICTSCY", "1").toDouble();
1398
                        appPrefs.toolSettings.scaleType = static_cast<bool>(dc.attribute("PSCALE", "1").toInt());
1399
                        appPrefs.toolSettings.aspectRatio = static_cast<bool>(dc.attribute("PASPECT", "0").toInt());
1400
                        appPrefs.toolSettings.useEmbeddedPath = static_cast<bool>(dc.attribute("EmbeddedPath", "0").toInt());
1401
                        appPrefs.toolSettings.lowResType = dc.attribute("HalfRes", "1").toInt();
1402
                        appPrefs.toolSettings.polyC = dc.attribute("POLYC", "4").toInt();
1403
                        appPrefs.toolSettings.polyF = dc.attribute("POLYF", "0.5").toDouble();
1404
                        appPrefs.toolSettings.polyR = dc.attribute("POLYR", "0").toDouble();
1405
                        appPrefs.toolSettings.polyFd = dc.attribute("POLYFD", "0").toInt();
1406
                        appPrefs.toolSettings.polyS = static_cast<bool>(dc.attribute("POLYS", "0").toInt());
1407
                        appPrefs.toolSettings.dStartArrow = dc.attribute("StartArrow", "0").toInt();
1408
                        appPrefs.toolSettings.dEndArrow = dc.attribute("EndArrow", "0").toInt();
2889 cbradney 1409
                }
1410
                if (dc.tagName()=="MAINWINDOW")
1411
                {
4026 craig 1412
                        appPrefs.mainWinSettings.xPosition = dc.attribute("XPOS", "0").toInt();
1413
                        appPrefs.mainWinSettings.yPosition = dc.attribute("YPOS", "0").toInt();
1414
                        appPrefs.mainWinSettings.width = dc.attribute("WIDTH", "640").toInt();
1415
                        appPrefs.mainWinSettings.height = dc.attribute("HEIGHT", "480").toInt();
3932 avox 1416
                        QDesktopWidget *d = QApplication::desktop();
1417
                        QSize gStrut = QApplication::globalStrut();
1418
                        int minX = 0;
1419
#ifndef QT_MAC
1420
                        int minY = 0;
1421
#else
1422
                        // on Mac you're dead if the titlebar is not on screen
1423
                        int minY = 22;
1424
#endif
1425
                        if (appPrefs.mainWinSettings.xPosition < minX )
1426
                                appPrefs.mainWinSettings.xPosition = minX;
1427
                        if (appPrefs.mainWinSettings.yPosition <  minY)
1428
                                appPrefs.mainWinSettings.yPosition = minY;
1429
                        int minWidth = 5*gStrut.width();
1430
                        int minHeight = 5*gStrut.width();
1431
                        int maxWidth = d->width();
1432
                        int maxHeight = d->height();
1433
                        if (appPrefs.mainWinSettings.width > maxWidth)
1434
                                appPrefs.mainWinSettings.width = maxWidth;
1435
                        if (appPrefs.mainWinSettings.width < minWidth)
1436
                                appPrefs.mainWinSettings.width = minWidth;
1437
                        if (appPrefs.mainWinSettings.height > maxHeight)
1438
                                appPrefs.mainWinSettings.height = maxHeight;
1439
                        if (appPrefs.mainWinSettings.height < minHeight)
1440
                                appPrefs.mainWinSettings.height = minHeight;
1441
                        int maxX = d->width() - minWidth;
1442
                        int maxY = d->height() - minHeight;
1443
                        if (appPrefs.mainWinSettings.xPosition >= maxX)
1444
                                appPrefs.mainWinSettings.xPosition = maxX;
1445
                        if (appPrefs.mainWinSettings.yPosition >= maxY)
1446
                                appPrefs.mainWinSettings.yPosition = maxY;
2889 cbradney 1447
                }
1448
                if (dc.tagName()=="PAGEPALETTE")
1449
                {
4026 craig 1450
                        appPrefs.SepalT = static_cast<bool>(dc.attribute("THUMBS").toInt());
1451
                        appPrefs.SepalN = static_cast<bool>(dc.attribute("NAMES").toInt());
2889 cbradney 1452
                }
1453
                if (dc.tagName()=="SCRAPBOOK")
1454
                {
4026 craig 1455
                        appPrefs.PSize = dc.attribute("PREVIEW").toInt();
1456
                        appPrefs.SaveAtQ = static_cast<bool>(dc.attribute("SAVE").toInt());
2889 cbradney 1457
                }
1458
                if (dc.tagName() == "DOKUMENT")
1459
                {
1460
                        appPrefs.pageSize = dc.attribute("PAGESIZE","A4");
4026 craig 1461
                        appPrefs.pageOrientation = dc.attribute("AUSRICHTUNG", "0").toInt();
1462
                        appPrefs.PageWidth = dc.attribute("BREITE", "595").toDouble();
1463
                        appPrefs.PageHeight = dc.attribute("HOEHE", "842").toDouble();
1464
                        appPrefs.RandOben = dc.attribute("RANDO", "9").toDouble();
1465
                        appPrefs.RandUnten = dc.attribute("RANDU", "40").toDouble();
1466
                        appPrefs.RandLinks = dc.attribute("RANDL", "9").toDouble();
1467
                        appPrefs.RandRechts = dc.attribute("RANDR", "9").toDouble();
1468
                        appPrefs.FacingPages = dc.attribute("DOPPEL", "0").toInt();
1469
                        appPrefs.AutoSave = static_cast<bool>(dc.attribute("AutoSave", "0").toInt());
1470
                        appPrefs.AutoSaveTime = dc.attribute("AutoSaveTime", "600000").toInt();
2889 cbradney 1471
                }
3016 fschmid 1472
                if (dc.tagName()=="PageSets")
1473
                {
1474
                        QDomNode PGS = DOC.firstChild();
3026 fschmid 1475
                        if  (!PGS.namedItem("PageNames").isNull())
3016 fschmid 1476
                        {
3026 fschmid 1477
                                appPrefs.pageSets.clear();
1478
                                while(!PGS.isNull())
3016 fschmid 1479
                                {
3026 fschmid 1480
                                        QDomElement PgsAttr = PGS.toElement();
1481
                                        if(PgsAttr.tagName() == "Set")
1482
                                        {
1483
                                                struct PageSet pageS;
1484
                                                pageS.Name = PgsAttr.attribute("Name");
4026 craig 1485
                                                pageS.FirstPage = PgsAttr.attribute("FirstPage", "0").toInt();
1486
                                                pageS.Rows = PgsAttr.attribute("Rows", "1").toInt();
1487
                                                pageS.Columns = PgsAttr.attribute("Columns", "1").toInt();
1488
                                                pageS.GapHorizontal = PgsAttr.attribute("GapHorizontal", "0").toDouble();
1489
                                                pageS.GapVertical = PgsAttr.attribute("GapVertical", "0").toDouble();
1490
                                                pageS.GapBelow = PgsAttr.attribute("GapBelow", "0").toDouble();
3026 fschmid 1491
                                                pageS.pageNames.clear();
1492
                                                QDomNode PGSN = PGS.firstChild();
1493
                                                while(!PGSN.isNull())
1494
                                                {
1495
                                                        QDomElement PgsAttrN = PGSN.toElement();
1496
                                                        if(PgsAttrN.tagName() == "PageNames")
1497
                                                                pageS.pageNames.append(PgsAttrN.attribute("Name"));
1498
                                                        PGSN = PGSN.nextSibling();
1499
                                                }
1500
                                                appPrefs.pageSets.append(pageS);
1501
                                        }
1502
                                        PGS = PGS.nextSibling();
3016 fschmid 1503
                                }
1504
                        }
1505
                }
2889 cbradney 1506
                if (dc.tagName()=="CMS")
1507
                {
4026 craig 1508
                        appPrefs.DCMSset.SoftProofOn = static_cast<bool>(dc.attribute("DPSo", "0").toInt());
1509
                        appPrefs.DCMSset.CMSinUse = static_cast<bool>(dc.attribute("DPuse", "0").toInt());
1510
                        appPrefs.DCMSset.GamutCheck = static_cast<bool>(dc.attribute("DPgam", "0").toInt());
1511
                        appPrefs.DCMSset.BlackPoint = static_cast<bool>(dc.attribute("DPbla", "1").toInt());
2889 cbradney 1512
                        appPrefs.DCMSset.DefaultMonitorProfile = dc.attribute("DPMo","");
1513
                        appPrefs.DCMSset.DefaultPrinterProfile = dc.attribute("DPPr","");
2984 fschmid 1514
                        appPrefs.DCMSset.DefaultImageRGBProfile = dc.attribute("DPIn","");
1515
                        appPrefs.DCMSset.DefaultImageCMYKProfile = dc.attribute("DPInCMYK","");
1516
                        appPrefs.DCMSset.DefaultSolidColorProfile = dc.attribute("DPIn2","");
4026 craig 1517
                        appPrefs.DCMSset.DefaultIntentPrinter = dc.attribute("DIPr", "0").toInt();
1518
                        appPrefs.DCMSset.DefaultIntentMonitor = dc.attribute("DIMo", "3").toInt();
1519
                        appPrefs.DCMSset.DefaultIntentImages = dc.attribute("DIMo2", "3").toInt();
2889 cbradney 1520
                }
1521
                if (!importingFrom12 && dc.tagName()=="SHORTCUT")
1522
                {
1523
                        if (appPrefs.KeyActions.contains(dc.attribute("ACTION")))
1524
                        {
1525
                                appPrefs.KeyActions[dc.attribute("ACTION")].actionName = dc.attribute("ACTION");
3932 avox 1526
                                QKeySequence newKeySequence = QKeySequence(dc.attribute("SEQUENCE"));
1527
//                              qDebug(QString("reading shortcut for %2 %1").arg(QString(newKeySequence)).arg(dc.attribute("ACTION")));
1528
                                appPrefs.KeyActions[dc.attribute("ACTION")].keySequence = newKeySequence;
2889 cbradney 1529
                        }
1530
                }
1531
                if (dc.tagName()=="RECENT")
1532
                        appPrefs.RecentDocs.append(dc.attribute("NAME"));
1533
                if (dc.tagName()=="Checker")
1534
                {
3142 cbradney 1535
                        appPrefs.curCheckProfile = dc.attribute("currentProfile", tr("PostScript"));
1536
                        //#2516 work around old values until people wont have them anymore, not that these
1537
                        //translated strings should be going into prefs anyway!
1538
                        if (appPrefs.curCheckProfile == tr("Postscript"))
1539
                                appPrefs.curCheckProfile == tr("PostScript");
2889 cbradney 1540
                }
1541
                if (dc.tagName()=="CheckProfile")
1542
                {
1543
                        QString name=dc.attribute("Name");
3183 fschmid 1544
                        struct checkerPrefs checkerSettings;
4026 craig 1545
                        checkerSettings.ignoreErrors = static_cast<bool>(dc.attribute("ignoreErrors", "0").toInt());
1546
                        checkerSettings.autoCheck = static_cast<bool>(dc.attribute("autoCheck", "1").toInt());
1547
                        checkerSettings.checkGlyphs = static_cast<bool>(dc.attribute("checkGlyphs", "1").toInt());
1548
                        checkerSettings.checkOrphans = static_cast<bool>(dc.attribute("checkOrphans", "1").toInt());
1549
                        checkerSettings.checkOverflow = static_cast<bool>(dc.attribute("checkOverflow", "1").toInt());
1550
                        checkerSettings.checkPictures = static_cast<bool>(dc.attribute("checkPictures", "1").toInt());
1551
                        checkerSettings.checkResolution = static_cast<bool>(dc.attribute("checkResolution", "1").toInt());
1552
                        checkerSettings.checkTransparency = static_cast<bool>(dc.attribute("checkTransparency", "1").toInt());
1553
                        checkerSettings.minResolution = dc.attribute("minResolution", "72").toDouble();
1554
                        checkerSettings.checkAnnotations = static_cast<bool>(dc.attribute("checkAnnotations", "0").toInt());
1555
                        checkerSettings.checkRasterPDF = static_cast<bool>(dc.attribute("checkRasterPDF", "1").toInt());
3183 fschmid 1556
                        appPrefs.checkerProfiles[name] = checkerSettings;
2889 cbradney 1557
                }
1558
                if (dc.tagName()=="PRINTER")
1559
                {
1560
                        appPrefs.PrinterName = dc.attribute("NAME");
1561
                        appPrefs.PrinterFile = dc.attribute("FILE");
1562
                        appPrefs.PrinterCommand = dc.attribute("COMMAND");
4026 craig 1563
                        appPrefs.ClipMargin = static_cast<bool>(dc.attribute("CLIPMARGIN", "1").toInt());
1564
                        appPrefs.GCRMode = static_cast<bool>(dc.attribute("GMODE", "1").toInt());
2889 cbradney 1565
                }
1566
                if (dc.tagName()=="PRINTPREVIEW")
1567
                {
4026 craig 1568
                        appPrefs.PrPr_Mode = static_cast<bool>(dc.attribute("Mode", "0").toInt());
1569
                        appPrefs.Gcr_Mode = static_cast<bool>(dc.attribute("GcrMode", "1").toInt());
1570
                        appPrefs.PrPr_AlphaText = static_cast<bool>(dc.attribute("AlphaText", "0").toInt());
1571
                        appPrefs.PrPr_AlphaGraphics = static_cast<bool>(dc.attribute("AlphaGraphics", "0").toInt());
1572
                        appPrefs.PrPr_Transparency = static_cast<bool>(dc.attribute("Transparency", "0").toInt());
1573
                        appPrefs.PrPr_C = static_cast<bool>(dc.attribute("Cyan", "1").toInt());
1574
                        appPrefs.PrPr_M = static_cast<bool>(dc.attribute("Magenta", "1").toInt());
1575
                        appPrefs.PrPr_Y = static_cast<bool>(dc.attribute("Yellow", "1").toInt());
1576
                        appPrefs.PrPr_K = static_cast<bool>(dc.attribute("Black", "1").toInt());
2889 cbradney 1577
                }
1578
                if (dc.tagName()=="EXTERNAL")
1579
                {
1580
                        setGhostscriptExecutable(dc.attribute("GS", "gs"));
4026 craig 1581
                        appPrefs.gs_AntiAliasText = static_cast<bool>(dc.attribute("AlphaText", "0").toInt());
1582
                        appPrefs.gs_AntiAliasGraphics = static_cast<bool>(dc.attribute("AlphaGraphics", "0").toInt());
1583
                        appPrefs.gs_Resolution = dc.attribute("Resolution", "72").toInt();
2889 cbradney 1584
                        setImageEditorExecutable(dc.attribute("GIMP", "gimp"));
1585
                }
1586
                if (dc.tagName()=="HYPHEN")
1587
                {
1588
                        if (!dc.attribute("LANG", "").isEmpty())
1589
                                appPrefs.Language = dc.attribute("LANG");
4026 craig 1590
                        appPrefs.MinWordLen = dc.attribute("WORDLEN", "3").toInt();
1591
                        appPrefs.HyCount = dc.attribute("HYCOUNT", "2").toInt();
1592
                        appPrefs.Automatic = static_cast<bool>(dc.attribute("MODE", "1").toInt());
1593
                        appPrefs.AutoCheck = static_cast<bool>(dc.attribute("INMODE", "1").toInt());
2889 cbradney 1594
                }
1595
                if (dc.tagName()=="FONTS")
1596
                {
1597
                        QString tmpf = dc.attribute("FACE");
1598
                        QString newFont = "";
1599
                        if (!appPrefs.AvailFonts.find(tmpf))
1600
                        {
4026 craig 1601
                                ScMW->showSplash(false);
2889 cbradney 1602
                                MissingFont *dia = new MissingFont(0, tmpf, 0);
1603
                                dia->exec();
1604
                                newFont = dia->getReplacementFont();
1605
                                delete dia;
1606
                        }
1607
                        else
1608
                                newFont = dc.attribute("FACE");
1609
                        if (!newFont.isEmpty())
1610
                                appPrefs.toolSettings.defFont = newFont;
4026 craig 1611
                        appPrefs.toolSettings.defSize = qRound(dc.attribute("SIZE").toDouble() * 10.0);
1612
                        appPrefs.askBeforeSubstituite = static_cast<bool>(dc.attribute("AutomaticSubst", "1").toInt());
2889 cbradney 1613
                }
1614
                if (dc.tagName()=="FONT")
1615
                {
1616
                        if (appPrefs.AvailFonts.find(dc.attribute("NAME")))
1617
                        {
4026 craig 1618
                                appPrefs.AvailFonts[dc.attribute("NAME")]->EmbedPS = static_cast<bool>(dc.attribute("EMBED").toInt());
1619
                                appPrefs.AvailFonts[dc.attribute("NAME")]->UseFont &= static_cast<bool>(dc.attribute("USE", "1").toInt());
1620
                                appPrefs.AvailFonts[dc.attribute("NAME")]->Subset = static_cast<bool>(dc.attribute("SUBSET", "0").toInt());
2889 cbradney 1621
                        }
1622
                }
1623
                if (dc.tagName()=="COLOR")
1624
                {
1625
                        if (dc.hasAttribute("CMYK"))
1626
                                lf.setNamedColor(dc.attribute("CMYK"));
1627
                        else
1628
                                lf.fromQColor(QColor(dc.attribute("RGB")));
3051 fschmid 1629
                        if (dc.hasAttribute("Spot"))
4026 craig 1630
                                lf.setSpotColor(static_cast<bool>(dc.attribute("Spot").toInt()));
3051 fschmid 1631
                        else
1632
                                lf.setSpotColor(false);
3060 fschmid 1633
                        if (dc.hasAttribute("Register"))
4026 craig 1634
                                lf.setRegistrationColor(static_cast<bool>(dc.attribute("Register").toInt()));
3060 fschmid 1635
                        else
1636
                                lf.setRegistrationColor(false);
2889 cbradney 1637
                  appPrefs.DColors[dc.attribute("NAME")] = lf;
1638
                }
1639
                if (dc.tagName()=="Substitute")
1640
                  appPrefs.GFontSub[dc.attribute("Name")] = dc.attribute("Replace");
1641
                if (dc.tagName()=="COLORSET")
1642
                        appPrefs.CustomColorSets.append(dc.attribute("NAME"));
1643
                if (dc.tagName()=="DCOLORSET")
1644
                        appPrefs.DColorSet = dc.attribute("NAME");
1645
                if(dc.tagName()=="PDF")
1646
                {
4026 craig 1647
                        appPrefs.PDF_Options.Articles = static_cast<bool>(dc.attribute("Articles").toInt());
1648
                        appPrefs.PDF_Options.Thumbnails = static_cast<bool>(dc.attribute("Thumbnails").toInt());
1649
                        appPrefs.PDF_Options.Compress = static_cast<bool>(dc.attribute("Compress").toInt());
1650
                        appPrefs.PDF_Options.CompressMethod = dc.attribute("CMethod", "0").toInt();
1651
                        appPrefs.PDF_Options.Quality = dc.attribute("Quality", "0").toInt();
1652
                        appPrefs.PDF_Options.RecalcPic = static_cast<bool>(dc.attribute("RecalcPic").toInt());
1653
                        appPrefs.PDF_Options.Bookmarks = static_cast<bool>(dc.attribute("Bookmarks").toInt());
1654
                        appPrefs.PDF_Options.MirrorH = static_cast<bool>(dc.attribute("MirrorH").toInt());
1655
                        appPrefs.PDF_Options.MirrorV = static_cast<bool>(dc.attribute("MirrorV").toInt());
1656
                        appPrefs.PDF_Options.RotateDeg = dc.attribute("RotateDeg", "0").toInt();
1657
                        appPrefs.PDF_Options.PresentMode = static_cast<bool>(dc.attribute("PresentMode").toInt());
1658
                        appPrefs.PDF_Options.PicRes = dc.attribute("PicRes").toInt();
1659
                        appPrefs.PDF_Options.Version = (PDFOptions::PDFVersion)dc.attribute("Version").toInt();
1660
                        appPrefs.PDF_Options.Resolution = dc.attribute("Resolution").toInt();
1661
                        appPrefs.PDF_Options.Binding = dc.attribute("Binding").toInt();
2889 cbradney 1662
                        appPrefs.PDF_Options.Datei = "";
4026 craig 1663
                        appPrefs.PDF_Options.isGrayscale = static_cast<bool>(dc.attribute("Grayscale", "0").toInt());
1664
                        appPrefs.PDF_Options.UseRGB = static_cast<bool>(dc.attribute("RGBMode", "0").toInt());
1665
                        appPrefs.PDF_Options.UseProfiles = static_cast<bool>(dc.attribute("UseProfiles", "0").toInt());
1666
                        appPrefs.PDF_Options.UseProfiles2 = static_cast<bool>(dc.attribute("UseProfiles2", "0").toInt());
1667
                        appPrefs.PDF_Options.Intent = dc.attribute("Intent", "1").toInt();
1668
                        appPrefs.PDF_Options.Intent2 = dc.attribute("Intent2", "1").toInt();
2889 cbradney 1669
                        appPrefs.PDF_Options.SolidProf = dc.attribute("SolidP", "");
1670
                        appPrefs.PDF_Options.ImageProf = dc.attribute("ImageP", "");
1671
                        appPrefs.PDF_Options.PrintProf = dc.attribute("PrintP", "");
1672
                        appPrefs.PDF_Options.Info = dc.attribute("InfoString", "");
4026 craig 1673
                        appPrefs.PDF_Options.BleedTop = dc.attribute("BTop", "0").toDouble();
1674
                        appPrefs.PDF_Options.BleedLeft = dc.attribute("BLeft", "0").toDouble();
1675
                        appPrefs.PDF_Options.BleedRight = dc.attribute("BRight", "0").toDouble();
1676
                        appPrefs.PDF_Options.BleedBottom = dc.attribute("BBottom", "0").toDouble();
1677
                        appPrefs.PDF_Options.EmbeddedI = static_cast<bool>(dc.attribute("ImagePr", "0").toInt());
2889 cbradney 1678
                        appPrefs.PDF_Options.PassOwner = dc.attribute("PassOwner", "");
1679
                        appPrefs.PDF_Options.PassUser = dc.attribute("PassUser", "");
4026 craig 1680
                        appPrefs.PDF_Options.Permissions = dc.attribute("Permissions", "-4").toInt();
1681
                        appPrefs.PDF_Options.Encrypt = static_cast<bool>(dc.attribute("Encrypt", "0").toInt());
1682
                        appPrefs.PDF_Options.useLayers = static_cast<bool>(dc.attribute("UseLayers", "0").toInt());
1683
                        appPrefs.PDF_Options.UseLPI = static_cast<bool>(dc.attribute("UseLpi", "0").toInt());
1684
                        appPrefs.PDF_Options.UseSpotColors = static_cast<bool>(dc.attribute("UseSpotColors", "1").toInt());
1685
                        appPrefs.PDF_Options.doMultiFile = static_cast<bool>(dc.attribute("doMultiFile", "0").toInt());
4197 fschmid 1686
                        appPrefs.PDF_Options.displayBookmarks = static_cast<bool>(dc.attribute("displayBookmarks", "0").toInt());
1687
                        appPrefs.PDF_Options.displayFullscreen = static_cast<bool>(dc.attribute("displayFullscreen", "0").toInt());
1688
                        appPrefs.PDF_Options.displayLayers = static_cast<bool>(dc.attribute("displayLayers", "0").toInt());
1689
                        appPrefs.PDF_Options.displayThumbs = static_cast<bool>(dc.attribute("displayThumbs", "0").toInt());
1690
                        appPrefs.PDF_Options.PageLayout = dc.attribute("PageLayout", "0").toInt();
1691
                        appPrefs.PDF_Options.openAction = dc.attribute("openAction", "");
2889 cbradney 1692
                        QDomNode PFO = DOC.firstChild();
4039 fschmid 1693
                        appPrefs.PDF_Options.LPISettings.clear();
2889 cbradney 1694
                        while(!PFO.isNull())
1695
                        {
1696
                                QDomElement pdfF = PFO.toElement();
1697
                                if(pdfF.tagName() == "LPI")
1698
                                {
1699
                                        struct LPIData lpo;
4026 craig 1700
                                        lpo.Angle = pdfF.attribute("Angle").toInt();
1701
                                        lpo.Frequency = pdfF.attribute("Frequency").toInt();
1702
                                        lpo.SpotFunc = pdfF.attribute("SpotFunction").toInt();
2889 cbradney 1703
                                        appPrefs.PDF_Options.LPISettings[pdfF.attribute("Color")] = lpo;
1704
                                }
1705
                                PFO = PFO.nextSibling();
1706
                        }
1707
                }
1708
                if(dc.tagName()=="DefaultItemAttributes")
1709
                {
1710
                        QDomNode DIA = DOC.firstChild();
1711
                        appPrefs.defaultItemAttributes.clear();
1712
                        while(!DIA.isNull())
1713
                        {
1714
                                QDomElement itemAttr = DIA.toElement();
1715
                                if(itemAttr.tagName() == "ItemAttribute")
1716
                                {
1717
                                        ObjectAttribute objattr;
1718
                                        objattr.name=itemAttr.attribute("Name");
1719
                                        objattr.type=itemAttr.attribute("Type");
1720
                                        objattr.value=itemAttr.attribute("Value");
1721
                                        objattr.parameter=itemAttr.attribute("Parameter");
1722
                                        objattr.relationship=itemAttr.attribute("Relationship");
1723
                                        objattr.relationshipto=itemAttr.attribute("RelationshipTo");
1724
                                        objattr.autoaddto=itemAttr.attribute("AutoAddTo");
1725
                                        appPrefs.defaultItemAttributes.append(objattr);
1726
                                }
1727
                                DIA = DIA.nextSibling();
1728
                        }
1729
                }
1730
                if(dc.tagName()=="TablesOfContents")
1731
                {
1732
                        QDomNode TOC = DOC.firstChild();
1733
                        appPrefs.defaultToCSetups.clear();
1734
                        while(!TOC.isNull())
1735
                        {
1736
                                QDomElement tocElem = TOC.toElement();
1737
                                if(tocElem.tagName() == "TableOfContents")
1738
                                {
1739
                                        ToCSetup tocsetup;
1740
                                        tocsetup.name=tocElem.attribute("Name");
1741
                                        tocsetup.itemAttrName=tocElem.attribute("ItemAttributeName");
1742
                                        tocsetup.frameName=tocElem.attribute("FrameName");
1743
                                        tocsetup.listNonPrintingFrames=tocElem.attribute("ListNonPrinting");
1744
                                        tocsetup.textStyle=tocElem.attribute("Style");
1745
                                        QString numberPlacement=tocElem.attribute("NumberPlacement");
1746
                                        if (numberPlacement=="Beginning")
1747
                                                tocsetup.pageLocation=Beginning;
1748
                                        if (numberPlacement=="End")
1749
                                                tocsetup.pageLocation=End;
1750
                                        if (numberPlacement=="NotShown")
1751
                                                tocsetup.pageLocation=NotShown;
1752
                                        appPrefs.defaultToCSetups.append(tocsetup);
1753
                                }
1754
                                TOC = TOC.nextSibling();
1755
                        }
1756
                }
1757
                // lorem ispum
1758
                if (dc.tagName() == "LoremIpsum")
1759
                {
4026 craig 1760
                        appPrefs.useStandardLI = static_cast<bool>(dc.attribute("useStandardLI", "0").toInt());
1761
                        appPrefs.paragraphsLI = dc.attribute("paragraphsLI", "10").toInt();
2889 cbradney 1762
                }
1763
                DOC=DOC.nextSibling();
1764
        }
1765
        if (appPrefs.GUI != "Default")
1766
                qApp->setStyle(QStyleFactory::create(appPrefs.GUI));
1767
        QFont apf = qApp->font();
1768
        apf.setPointSize(appPrefs.AppFontSize);
1769
        qApp->setFont(apf,true);
1770
        return true;
1771
}
3097 cbradney 1772
 
1773
void PrefsManager::initDefaultCheckerPrefs(CheckerPrefsList* cp)
1774
{
1775
        if (cp!=NULL)
1776
        {
1777
                struct checkerPrefs checkerSettings;
1778
                checkerSettings.ignoreErrors = false;
1779
                checkerSettings.autoCheck = true;
1780
                checkerSettings.checkGlyphs = true;
1781
                checkerSettings.checkOrphans = true;
1782
                checkerSettings.checkOverflow = true;
1783
                checkerSettings.checkPictures = true;
1784
                checkerSettings.checkResolution = true;
1785
                checkerSettings.checkTransparency = true;
1786
                checkerSettings.checkAnnotations = false;
1787
                checkerSettings.checkRasterPDF = true;
1788
                checkerSettings.minResolution = 72.0;
1789
                //TODO Stop translating these into settings!!!!!!!!!
3142 cbradney 1790
                cp->insert( QT_TR_NOOP("PostScript"), checkerSettings);
3097 cbradney 1791
                cp->insert( QT_TR_NOOP("PDF 1.3"), checkerSettings);
1792
                checkerSettings.checkTransparency = false;
1793
                cp->insert( QT_TR_NOOP("PDF 1.4"), checkerSettings);
1794
                checkerSettings.checkTransparency = true;
1795
                checkerSettings.checkAnnotations = true;
1796
                checkerSettings.minResolution = 144.0;
1797
                cp->insert( QT_TR_NOOP("PDF/X-3"), checkerSettings);
1798
        }
1799
}
3170 craig 1800
 
1801
const QString & PrefsManager::lastError() const
1802
{
1803
        return m_lastError;
1804
}
1805
 
1806
// It's hard to say whether this should be here and called from SavePrefs, or
4026 craig 1807
// triggered by a signal sent from here and displayed by ScribusMainWindow.
3170 craig 1808
void PrefsManager::alertSavePrefsFailed() const
1809
{
4026 craig 1810
        QMessageBox::critical(ScMW, tr("Error Writing Preferences"),
3170 craig 1811
                        "<qt>" +
1812
                        tr("Scribus was not able to save its preferences:<br>"
1813
                           "%1<br>"
1814
                           "Please check file and directory permissions and "
1815
                           "available disk space.", "scribus app error")
1816
                           .arg(lastError())
1817
                        + "</qt>",
1818
                        QMessageBox::Ok|QMessageBox::Default|QMessageBox::Escape,
1819
                        QMessageBox::NoButton);
1820
}
3171 craig 1821
 
1822
// It's hard to say whether this should be here and called from ReadPrefs, or
4026 craig 1823
// triggered by a signal sent from here and displayed by ScribusMainWindow.
3171 craig 1824
void PrefsManager::alertLoadPrefsFailed() const
1825
{
4026 craig 1826
        bool splashShowing = ScMW->splashShowing();
3171 craig 1827
        if (splashShowing)
4026 craig 1828
                ScMW->showSplash(false);
1829
        QMessageBox::critical(ScMW, tr("Error Loading Preferences"),
3171 craig 1830
                        "<qt>" +
1831
                        tr("Scribus was not able to load its preferences:<br>"
1832
                           "%1<br>"
1833
                           "Default settings will be loaded.")
1834
                           .arg(lastError())
1835
                        + "</qt>",
1836
                        QMessageBox::Ok|QMessageBox::Default|QMessageBox::Escape,
1837
                        QMessageBox::NoButton);
4026 craig 1838
        ScMW->showSplash(splashShowing);
3171 craig 1839
}
3302 cbradney 1840
 
1841
const int PrefsManager::gsResolution()
1842
{
1843
        return appPrefs.gs_Resolution;
1844
}