Scribus Developer Documentation - API
logo-pen

Scribus Developer Documentation - API

prefsmanager.cpp

Go to the documentation of this file.
00001 /*
00002 For general Scribus (>=1.3.2) copyright and licensing information please refer
00003 to the COPYING file provided with the program. Following this notice may exist
00004 a copyright and/or license notice that predates the release of Scribus 1.3.2
00005 for which a new license (GPL+exception) is in place.
00006 */
00007 /***************************************************************************
00008     copyright            : (C) 2005 by Craig Bradney
00009     email                : cbradney@zip.com.au
00010 ***************************************************************************/
00011 
00012 /***************************************************************************
00013 *                                                                         *
00014 *   This program is free software; you can redistribute it and/or modify  *
00015 *   it under the terms of the GNU General Public License as published by  *
00016 *   the Free Software Foundation; either version 2 of the License, or     *
00017 *   (at your option) any later version.                                   *
00018 *                                                                         *
00019 ***************************************************************************/
00020 
00021 #include <QColor>
00022 #include <QDebug>
00023 #include <QDesktopWidget>
00024 #include <QDir>
00025 #include <QDomDocument>
00026 #include <QFile>
00027 #include <QMatrix>
00028 #include <QList>
00029 #include <QString>
00030 #include <QStringList>
00031 #include <QStyleFactory>
00032 
00033 #include "prefsmanager.h"
00034 
00035 #include "actionmanager.h"
00036 #include "colorsetmanager.h"
00037 #include "commonstrings.h"
00038 #include "filewatcher.h"
00039 #include "latexhelpers.h"
00040 #include "missing.h"
00041 #include "tabkeyboardshortcutswidget.h"
00042 #include "pagesize.h"
00043 #include "pagestructs.h"
00044 #include "pdfoptions.h"
00045 #include "prefsfile.h"
00046 #include "scfonts.h"
00047 #include "scmessagebox.h"
00048 #include "scpaths.h"
00049 #include "scribuscore.h"
00050 #include "scribusstructs.h"
00051 #include "scribuscore.h"
00052 #include "ui/modetoolbar.h"
00053 #include "util.h"
00054 #include "util_ghostscript.h"
00055 
00056 extern bool emergencyActivated;
00057 
00058 PrefsManager* PrefsManager::_instance = 0;
00059 
00060 PrefsManager::PrefsManager(QObject *parent)
00061  : QObject(parent)
00062 {
00063 }
00064 
00065 PrefsManager::~PrefsManager()
00066 {
00067     appPrefs.AvailFonts.clear();
00068     delete prefsFile;
00069 }
00070 
00071 PrefsManager* PrefsManager::instance()
00072 {
00073     if (_instance == 0)
00074         _instance = new PrefsManager();
00075 
00076     return _instance;
00077 }
00078 
00079 void PrefsManager::deleteInstance()
00080 {
00081     if (_instance)
00082         delete _instance;
00083     _instance = 0;
00084 }
00085 
00086 
00087 ApplicationPrefs* PrefsManager::applicationPrefs()
00088 {
00089     return &appPrefs;
00090 }
00091 
00092 PrefsFile* PrefsManager::applicationPrefsFile()
00093 {
00094     return prefsFile;
00095 }
00096 
00097 bool PrefsManager::importingFrom12x()
00098 {
00099     return importingFrom12;
00100 }
00101 
00102 
00103 void PrefsManager::setup()
00104 {
00105     setupPreferencesLocation();
00106 
00107     importingFrom12=copyOldPreferences();
00108     prefsFile = new PrefsFile( prefsLocation + "/prefs135.xml" );
00109     if (importingFrom12)
00110         convert12Preferences();
00111     //<<CB TODO Reset keyboard shortcuts of all 1.3 users as too many
00112     //     have conflicts if they dont nuke their settings.
00113     // - Remove for 1.3.0 release: importingFrom12=true;
00114     //>>CB
00115 }
00116 
00117 void PrefsManager::initDefaults()
00118 {
00120     SCFontsIterator it(appPrefs.AvailFonts);
00121     bool goodFont = false;
00122     for ( SCFontsIterator itf(appPrefs.AvailFonts); itf.hasNext(); itf.next())
00123     {
00124         if ((itf.currentKey() == "Arial Regular") || (itf.currentKey() == "Times New Roman Regular"))
00125         {
00126             appPrefs.toolSettings.defFont = itf.currentKey();
00127             goodFont = true;
00128             break;
00129         }
00130     }
00131     if (!goodFont)
00132         appPrefs.toolSettings.defFont = it.currentKey();
00133     appPrefs.toolSettings.defSize = 120;
00134 
00136     appPrefs.DColors.clear();
00137     
00138     ColorSetManager csm;
00139     csm.initialiseDefaultPrefs(appPrefs);
00140     csm.findPaletteLocations();
00141     csm.findPalettes();
00142     /*
00143     QString pfadC = ScPaths::instance().libDir()+"swatches/";
00144     QString pfadC2 = pfadC + "Scribus_X11.txt";
00145     QFile fiC(pfadC2);
00146     if (!fiC.exists())
00147     {
00148         appPrefs.DColors.insert("White", ScColor(0, 0, 0, 0));
00149         appPrefs.DColors.insert("Black", ScColor(0, 0, 0, 255));
00150         appPrefs.DColors.insert("Blue", ScColor(255, 255, 0, 0));
00151         appPrefs.DColors.insert("Cyan", ScColor(255, 0, 0, 0));
00152         appPrefs.DColors.insert("Green", ScColor(255, 0, 255, 0));
00153         appPrefs.DColors.insert("Red", ScColor(0, 255, 255, 0));
00154         appPrefs.DColors.insert("Yellow", ScColor(0, 0, 255, 0));
00155         appPrefs.DColors.insert("Magenta", ScColor(0, 255, 0, 0));
00156         appPrefs.DColorSet = "Scribus-Small";
00157     }
00158     else
00159     {
00160         if (fiC.open(IO_ReadOnly))
00161         {
00162             QString ColorEn, Cname;
00163             int Rval, Gval, Bval;
00164             QTextStream tsC(&fiC);
00165             ColorEn = tsC.readLine();
00166             while (!tsC.atEnd())
00167             {
00168                 ColorEn = tsC.readLine();
00169                 QTextStream CoE(&ColorEn, IO_ReadOnly);
00170                 CoE >> Rval;
00171                 CoE >> Gval;
00172                 CoE >> Bval;
00173                 CoE >> Cname;
00174                 ScColor tmp;
00175                 tmp.setColorRGB(Rval, Gval, Bval);
00176                 appPrefs.DColors.insert(Cname, tmp);
00177             }
00178             fiC.close();
00179         }
00180         appPrefs.DColorSet = "X11 RGB-Set";
00181     }
00182     */
00183 
00184     appPrefs.Wheelval = 40;
00186     appPrefs.mainWinSettings.xPosition = 0;
00187     appPrefs.mainWinSettings.yPosition = 0;
00188     appPrefs.mainWinSettings.width = 640;
00189     appPrefs.mainWinSettings.height = 480;
00190     appPrefs.mainWinSettings.maximized = false;
00191     appPrefs.mainWinState = QByteArray();
00192     appPrefs.guidesSettings.marginsShown = true;
00193     appPrefs.guidesSettings.framesShown = true;
00194     appPrefs.guidesSettings.layerMarkersShown = false;
00195     appPrefs.guidesSettings.gridShown = false;
00196     appPrefs.guidesSettings.guidesShown = true;
00197     appPrefs.guidesSettings.colBordersShown = false;
00198     appPrefs.guidesSettings.baseShown = false;
00199     appPrefs.guidesSettings.showPic = true;
00200     appPrefs.guidesSettings.showControls = false;
00201     appPrefs.guidesSettings.linkShown = false;
00202     appPrefs.guidesSettings.rulersShown = true;
00203     appPrefs.guidesSettings.showBleed = true;
00204     appPrefs.guidesSettings.rulerMode = true;
00205     appPrefs.guidesSettings.grabRad = 4;
00206     appPrefs.guidesSettings.guideRad = 10;
00207     appPrefs.guidesSettings.minorGrid = 20;
00208     appPrefs.guidesSettings.majorGrid = 100;
00209     appPrefs.guidesSettings.minorColor = QColor(Qt::green);
00210     appPrefs.guidesSettings.majorColor = QColor(Qt::green);
00211     appPrefs.guidesSettings.margColor = QColor(Qt::blue);
00212     appPrefs.guidesSettings.guideColor = QColor(Qt::darkBlue);
00213     appPrefs.guidesSettings.baseColor = QColor(Qt::lightGray);
00214     appPrefs.typographicSettings.valueSuperScript = 33;
00215     appPrefs.typographicSettings.scalingSuperScript = 66;
00216     appPrefs.typographicSettings.valueSubScript = 33;
00217     appPrefs.typographicSettings.scalingSubScript = 66;
00218     appPrefs.typographicSettings.valueSmallCaps = 75;
00219     appPrefs.typographicSettings.autoLineSpacing = 20;
00220     appPrefs.typographicSettings.valueUnderlinePos = -1;
00221     appPrefs.typographicSettings.valueUnderlineWidth = -1;
00222     appPrefs.typographicSettings.valueStrikeThruPos = -1;
00223     appPrefs.typographicSettings.valueStrikeThruWidth = -1;
00224     appPrefs.typographicSettings.valueBaseGrid = 14.4;
00225     appPrefs.typographicSettings.offsetBaseGrid = 0.0;
00226     appPrefs.GUI = "";
00227     appPrefs.grayscaleIcons = false; // can be a little slower on startup.. but its a nice effect to play with
00228     appPrefs.showToolTips = true;
00229     appPrefs.moveTimeout = 150;
00230     appPrefs.stickyTools = false;
00231     //FIXME
00232     //Black here causes issues when a colour set is loaded without "Black" in it.
00233     //"Black" is created with wrong values. Eg SVG colour set
00234     appPrefs.toolSettings.dPen = "Black";
00235     appPrefs.toolSettings.dBrush = "Black";
00236     appPrefs.toolSettings.dShade = 100;
00237     appPrefs.toolSettings.dShade2 = 100;
00238     appPrefs.toolSettings.dLineArt = Qt::SolidLine;
00239     appPrefs.toolSettings.dWidth = 1;
00240     appPrefs.toolSettings.dPenLine = "Black";
00241     appPrefs.toolSettings.dPenText = "Black";
00242     appPrefs.toolSettings.dStrokeText = "Black";
00243     appPrefs.toolSettings.dTextBackGround = CommonStrings::None;
00244     appPrefs.toolSettings.dTextLineColor = CommonStrings::None;
00245     appPrefs.toolSettings.dTextBackGroundShade = 100;
00246     appPrefs.toolSettings.dTextLineShade = 100;
00247     appPrefs.toolSettings.dTextPenShade = 100;
00248     appPrefs.toolSettings.dTextStrokeShade = 100;
00249     appPrefs.toolSettings.tabFillChar = "";
00250     appPrefs.toolSettings.dTabWidth = 36.0;
00251     appPrefs.toolSettings.dispX = 10.0;
00252     appPrefs.toolSettings.dispY = 10.0;
00253     appPrefs.toolSettings.constrain = 15.0;
00254     appPrefs.DpapColor = QColor(Qt::white);
00255     appPrefs.DFrameColor = QColor(Qt::red);
00256     appPrefs.DFrameNormColor = QColor(Qt::black);
00257     appPrefs.DFrameGroupColor = QColor(Qt::darkCyan);
00258     appPrefs.DFrameLockColor = QColor(Qt::darkRed);
00259     appPrefs.DFrameLinkColor = QColor(Qt::red);
00260     appPrefs.DFrameAnnotationColor = QColor(Qt::blue);
00261     appPrefs.DPageBorderColor = QColor(Qt::red);
00262     appPrefs.DControlCharColor = QColor(Qt::darkRed);
00263     appPrefs.toolSettings.dCols = 1;
00264     appPrefs.toolSettings.dGap = 0.0;
00265     appPrefs.toolSettings.dShadeLine = 100;
00266     appPrefs.toolSettings.dLstyleLine = Qt::SolidLine;
00267     appPrefs.toolSettings.dWidthLine = 1;
00268     appPrefs.toolSettings.dStartArrow = 0;
00269     appPrefs.toolSettings.dEndArrow = 0;
00270     appPrefs.toolSettings.magMin = 10;
00271     appPrefs.toolSettings.magMax = 3200;
00272     appPrefs.toolSettings.magStep = 200;
00273     appPrefs.toolSettings.dBrushPict = CommonStrings::None;
00274     appPrefs.toolSettings.shadePict = 100;
00275     appPrefs.toolSettings.scaleX = 1;
00276     appPrefs.toolSettings.scaleY = 1;
00277     appPrefs.guidesSettings.before = true;
00278     appPrefs.docUnitIndex = 0;
00279     appPrefs.toolSettings.polyC = 4;
00280     appPrefs.toolSettings.polyF = 0.5;
00281     appPrefs.toolSettings.polyS = false;
00282     appPrefs.toolSettings.polyFd = 0;
00283     appPrefs.toolSettings.polyR = 0;
00284 //  appPrefs.PSize = 40;
00285     appPrefs.ClipMargin = false;
00286     appPrefs.GCRMode = false;
00287     appPrefs.doOverprint = false;
00288     appPrefs.RecentDocs.clear();
00289     appPrefs.RecentScrapbooks.clear();
00290     appPrefs.RecentDCount = 5;
00291     appPrefs.doCopyToScrapbook = true;
00292     appPrefs.persistentScrapbook = false;
00293     appPrefs.numScrapbookCopies = 10;
00294     appPrefs.marginColored = false;
00295     appPrefs.pageSize = "A4";
00296     appPrefs.pageOrientation = 0;
00297     PageSize a4("A4");
00298     appPrefs.PageWidth = a4.width();
00299     appPrefs.PageHeight = a4.height();
00300     appPrefs.margins.Top = 40;
00301     appPrefs.margins.Bottom = 40;
00302     appPrefs.margins.Left = 40;
00303     appPrefs.margins.Right = 40;
00304     appPrefs.bleeds.Top = 0;
00305     appPrefs.bleeds.Left = 0;
00306     appPrefs.bleeds.Right = 0;
00307     appPrefs.bleeds.Bottom = 0;
00308     appPrefs.toolSettings.scaleType = true;
00309     appPrefs.toolSettings.aspectRatio = true;
00310     appPrefs.toolSettings.lowResType = 1;
00311     appPrefs.toolSettings.useEmbeddedPath = false;
00312     appPrefs.MinWordLen = 3;
00313     appPrefs.HyCount = 2;
00314     appPrefs.Language = "";
00315     appPrefs.specialWords.clear();
00316     appPrefs.ignoredWords.clear();
00317     appPrefs.Automatic = true;
00318     appPrefs.AutoCheck = false;
00319     appPrefs.AutoSave = true;
00320     appPrefs.AutoSaveTime = 600000;
00321     appPrefs.DisScale = 1.0;
00322     appPrefs.DocDir = ScPaths::getUserDocumentDir();
00323     appPrefs.ProfileDir = "";
00324     appPrefs.ScriptDir = "";
00325     appPrefs.documentTemplatesDir = "";
00326     appPrefs.CustomColorSets.clear();
00327     appPrefs.PrPr_Mode = false;
00328     appPrefs.Gcr_Mode = true;
00329     appPrefs.PrPr_AntiAliasing = false;
00330     appPrefs.PrPr_Transparency = false;
00331     appPrefs.PrPr_C = true;
00332     appPrefs.PrPr_M = true;
00333     appPrefs.PrPr_Y = true;
00334     appPrefs.PrPr_K = true;
00335     appPrefs.imageEditorExecutable = "gimp";
00336     appPrefs.extBrowserExecutable = "";
00337     appPrefs.latexConfigs = LatexConfigCache::defaultConfigs();
00338     appPrefs.latexEditorExecutable = "";
00339     appPrefs.latexResolution = 72;
00340     appPrefs.latexForceDpi = true;
00341     appPrefs.latexUseEmbeddedEditor = true;
00342     appPrefs.latexStartWithEmptyFrames = false;
00343     appPrefs.gs_AntiAliasGraphics = true;
00344     appPrefs.gs_AntiAliasText = true;
00345     appPrefs.gs_exe = getGSDefaultExeName();
00346     appPrefs.gs_Resolution = 72;
00347     appPrefs.STEcolor = QColor(Qt::white);
00348     appPrefs.DCMSset.DefaultMonitorProfile = "";
00349     appPrefs.DCMSset.DefaultPrinterProfile = "";
00350     appPrefs.DCMSset.DefaultImageRGBProfile = "";
00351     appPrefs.DCMSset.DefaultSolidColorRGBProfile = "";
00352     appPrefs.DCMSset.DefaultSolidColorCMYKProfile = "";
00353     appPrefs.DCMSset.CMSinUse = false;
00354     appPrefs.DCMSset.SoftProofOn = false;
00355     appPrefs.DCMSset.SoftProofFullOn = false;
00356     appPrefs.DCMSset.GamutCheck = false;
00357     appPrefs.DCMSset.BlackPoint = true;
00358     appPrefs.DCMSset.DefaultIntentColors = 1;
00359     appPrefs.DCMSset.DefaultIntentImages = 0;
00360     appPrefs.GFontSub.clear();
00361     appPrefs.scratch.Left = 100;
00362     appPrefs.scratch.Right = 100;
00363     appPrefs.scratch.Top = 20;
00364     appPrefs.scratch.Bottom = 20;
00365     appPrefs.GapHorizontal = 0.0;
00366     appPrefs.GapVertical = 40.0;
00367     struct PageSet pageS;
00368     pageS.Name = CommonStrings::pageSet1;
00369     pageS.FirstPage = 0;
00370     pageS.Rows = 1;
00371     pageS.Columns = 1;
00372 //  pageS.GapHorizontal = 0.0;
00373 //  pageS.GapVertical = 0.0;
00374 //  pageS.GapBelow = 40.0;
00375     pageS.pageNames.clear();
00376     appPrefs.pageSets.append(pageS);
00377     pageS.Name = CommonStrings::pageSet2;
00378     pageS.FirstPage = 1;
00379     pageS.Columns = 2;
00380     pageS.pageNames.clear();
00381     pageS.pageNames.append(CommonStrings::pageLocLeft);
00382     pageS.pageNames.append(CommonStrings::pageLocRight);
00383     appPrefs.pageSets.append(pageS);
00384     pageS.Name = CommonStrings::pageSet3;
00385     pageS.FirstPage = 0;
00386     pageS.Columns = 3;
00387     pageS.pageNames.clear();
00388     pageS.pageNames.append(CommonStrings::pageLocLeft);
00389     pageS.pageNames.append(CommonStrings::pageLocMiddle);
00390     pageS.pageNames.append(CommonStrings::pageLocRight);
00391     appPrefs.pageSets.append(pageS);
00392     pageS.Name = CommonStrings::pageSet4;
00393     pageS.FirstPage = 0;
00394     pageS.Columns = 4;
00395     pageS.pageNames.clear();
00396     pageS.pageNames.append(CommonStrings::pageLocLeft);
00397     pageS.pageNames.append(CommonStrings::pageLocMiddleLeft);
00398     pageS.pageNames.append(CommonStrings::pageLocMiddleRight);
00399     pageS.pageNames.append(CommonStrings::pageLocRight);
00400     appPrefs.pageSets.append(pageS);
00401     appPrefs.FacingPages = singlePage;
00402     appPrefs.askBeforeSubstituite = true;
00403     appPrefs.haveStylePreview = true;
00404     // lorem ipsum defaults
00405     appPrefs.useStandardLI = false;
00406     appPrefs.paragraphsLI = 10;
00407     appPrefs.showStartupDialog = true;
00408     appPrefs.useSmallWidgets = false;
00409     initDefaultCheckerPrefs(&appPrefs.checkerProfiles);
00410     appPrefs.curCheckProfile = CommonStrings::PostScript;
00411     appPrefs.PDF_Options.Thumbnails = false;
00412     appPrefs.PDF_Options.Articles = false;
00413     appPrefs.PDF_Options.useLayers = false;
00414     appPrefs.PDF_Options.Compress = true;
00415     appPrefs.PDF_Options.CompressMethod = PDFOptions::Compression_Auto;
00416     appPrefs.PDF_Options.Quality = 0;
00417     appPrefs.PDF_Options.RecalcPic = false;
00418     appPrefs.PDF_Options.Bookmarks = false;
00419     appPrefs.PDF_Options.PicRes = 300;
00420     appPrefs.PDF_Options.Version = PDFOptions::PDFVersion_14;
00421     appPrefs.PDF_Options.Resolution = 300;
00422     appPrefs.PDF_Options.Binding = 0;
00423     appPrefs.PDF_Options.EmbedList.clear();
00424     appPrefs.PDF_Options.SubsetList.clear();
00425     appPrefs.PDF_Options.MirrorH = false;
00426     appPrefs.PDF_Options.MirrorV = false;
00427     appPrefs.PDF_Options.doClip = false;
00428     appPrefs.PDF_Options.RotateDeg = 0;
00429     appPrefs.PDF_Options.PresentMode = false;
00430     appPrefs.PDF_Options.Datei = "";
00431     appPrefs.PDF_Options.PresentVals.clear();
00432     appPrefs.PDF_Options.isGrayscale = false;
00433     appPrefs.PDF_Options.UseRGB = true;
00434     appPrefs.PDF_Options.UseProfiles = false;
00435     appPrefs.PDF_Options.UseProfiles2 = false;
00436     appPrefs.PDF_Options.SolidProf = "";
00437     appPrefs.PDF_Options.SComp = 3;
00438     appPrefs.PDF_Options.ImageProf = "";
00439     appPrefs.PDF_Options.PrintProf = "";
00440     appPrefs.PDF_Options.Info = "";
00441     appPrefs.PDF_Options.Intent = 0;
00442     appPrefs.PDF_Options.Intent2 = 0;
00443     appPrefs.PDF_Options.bleeds.Top = 0;
00444     appPrefs.PDF_Options.bleeds.Left = 0;
00445     appPrefs.PDF_Options.bleeds.Right = 0;
00446     appPrefs.PDF_Options.bleeds.Bottom = 0;
00447     appPrefs.PDF_Options.useDocBleeds = true;
00448     appPrefs.PDF_Options.cropMarks = false;
00449     appPrefs.PDF_Options.bleedMarks = false;
00450     appPrefs.PDF_Options.registrationMarks = false;
00451     appPrefs.PDF_Options.colorMarks = false;
00452     appPrefs.PDF_Options.docInfoMarks = false;
00453     appPrefs.PDF_Options.markOffset = 0;
00454     appPrefs.PDF_Options.EmbeddedI = false;
00455     appPrefs.PDF_Options.Encrypt = false;
00456     appPrefs.PDF_Options.PassOwner = "";
00457     appPrefs.PDF_Options.PassUser = "";
00458     appPrefs.PDF_Options.Permissions = -4;
00459     appPrefs.PDF_Options.UseLPI = false;
00460     appPrefs.PDF_Options.LPISettings.clear();
00461     appPrefs.PDF_Options.UseSpotColors = true;
00462     appPrefs.PDF_Options.doOverprint = false;
00463     appPrefs.PDF_Options.doMultiFile = false;
00464     appPrefs.PDF_Options.displayBookmarks = false;
00465     appPrefs.PDF_Options.displayFullscreen = false;
00466     appPrefs.PDF_Options.displayLayers = false;
00467     appPrefs.PDF_Options.displayThumbs = false;
00468