Subversion Repositories Scribus

Rev

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

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