Subversion Repositories Scribus

Rev

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

Rev Author Line No. Line
5244 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
*/
7
/***************************************************************************
8
                          pageitem.h  -  description
9
                             -------------------
10
    copyright            : Scribus Team
11
 ***************************************************************************/
12
 
13
/***************************************************************************
14
 *                                                                         *
15
 *   This program is free software; you can redistribute it and/or modify  *
16
 *   it under the terms of the GNU General Public License as published by  *
17
 *   the Free Software Foundation; either version 2 of the License, or     *
18
 *   (at your option) any later version.                                   *
19
 *                                                                         *
20
 ***************************************************************************/
19080 craig 21
 
22
#include "scribuscore.h"
23
 
5721 avox 24
#include <cassert>
25
#include <iostream>
11490 avox 26
#include <QByteArray>
27
#include <QDebug>
10223 cbradney 28
#include <QGlobalStatic>
16546 jghali 29
#include <QMessageBox>
5721 avox 30
 
19080 craig 31
#include "colormgmt/sccolormgmtenginefactory.h"
5244 cbradney 32
#include "commonstrings.h"
33
#include "filewatcher.h"
20185 craig 34
#include "iconmanager.h"
17986 craig 35
#include "localemgr.h"
5244 cbradney 36
#include "pluginmanager.h"
37
#include "prefsmanager.h"
14539 jghali 38
#include "scimagecachemanager.h"
5244 cbradney 39
#include "scpaths.h"
19080 craig 40
#include "scribus.h"
10212 cbradney 41
#include "scribusapp.h"
13551 cbradney 42
#include "ui/splash.h"
5244 cbradney 43
#include "undomanager.h"
19271 craig 44
#include "util_debug.h"
19080 craig 45
#include "util_ghostscript.h"
5244 cbradney 46
 
19080 craig 47
 
22639 craig 48
//extern ScribusQApp* ScQApp;
5244 cbradney 49
 
22607 craig 50
ScribusCore::ScribusCore() : defaultEngine(colorMgmtEngineFactory.createDefaultEngine())
5244 cbradney 51
{
20779 jghali 52
        m_ScribusInitialized = false;
53
        m_currScMW = 0;
54
 
22607 craig 55
        pluginManager = nullptr;
56
        fileWatcher = nullptr;
20779 jghali 57
 
22607 craig 58
        m_SplashScreen = nullptr;
59
        m_iconManager = nullptr;
60
        m_undoManager = nullptr;
61
        m_prefsManager = nullptr;
20779 jghali 62
 
63
        m_UseGUI = false;
64
        m_HaveCMS = false;
65
        m_HaveGS = false;
66
        m_HavePngAlpha = false;
67
        m_HaveTiffSep = false;
68
 
14491 jghali 69
        ScColorMgmtStrategy strategy;
14170 jghali 70
        strategy.useBlackPointCompensation = true;
71
        strategy.useBlackPreservation      = false;
72
        defaultEngine.setStrategy(strategy);
5244 cbradney 73
}
74
 
75
ScribusCore::~ScribusCore()
5257 cbradney 76
{
20691 craig 77
        while (m_ScMWList.count() > 0)
18646 jghali 78
        {
20691 craig 79
                ScribusMainWindow *mainWindow = m_ScMWList.takeAt(0);
18646 jghali 80
                delete mainWindow;
81
        }
21516 craig 82
        delete pluginManager;
5257 cbradney 83
}
5244 cbradney 84
 
5721 avox 85
#ifndef NDEBUG
20103 avox 86
static void abort_on_error(QtMsgType t, const QMessageLogContext&, const QString & m)
5721 avox 87
{
20103 avox 88
        std::cerr << m.toLocal8Bit().data() << "\n";
5721 avox 89
        if(t==QtFatalMsg) assert(false);
5980 avox 90
//      if(t!=QtDebugMsg) assert(false);
5721 avox 91
}
92
#endif
93
 
19608 craig 94
int ScribusCore::init(bool useGUI, const QList<QString>& filesToUse)
5244 cbradney 95
{
96
        m_UseGUI=useGUI;
13335 cbradney 97
        m_Files=filesToUse;
10363 jghali 98
#if !defined(NDEBUG) && !defined(_WIN32)
20103 avox 99
        qInstallMessageHandler( & abort_on_error );
5721 avox 100
#endif
5244 cbradney 101
        return 0;
102
}
103
 
10112 jghali 104
const QString& ScribusCore::getGuiLanguage() const
105
{
106
        return ScQApp->currGUILanguage();
107
}
108
 
22607 craig 109
int ScribusCore::startGUI(bool showSplash, bool showFontInfo, bool showProfileInfo, const QString& newGuiLanguage)
5244 cbradney 110
{
5418 cbradney 111
        ScribusMainWindow* scribus = new ScribusMainWindow();
5257 cbradney 112
        Q_CHECK_PTR(scribus);
113
        if (!scribus)
114
                return(EXIT_FAILURE);
20691 craig 115
        m_ScMWList.append(scribus);
5418 cbradney 116
        m_currScMW=0;
21532 craig 117
        int retVal=initScribusCore(showSplash, showFontInfo, showProfileInfo,newGuiLanguage);
20193 craig 118
        if (retVal == EXIT_FAILURE)
5257 cbradney 119
                return(EXIT_FAILURE);
10977 cbradney 120
 
5257 cbradney 121
        retVal = scribus->initScMW(true);
20193 craig 122
        if (retVal == EXIT_FAILURE)
5257 cbradney 123
                return(EXIT_FAILURE);
10977 cbradney 124
 
5257 cbradney 125
        closeSplash();
126
        m_ScribusInitialized=true;
127
        connect(ScQApp, SIGNAL(lastWindowClosed()), ScQApp, SLOT(quit()));
5244 cbradney 128
 
5257 cbradney 129
        scribus->show();
21098 fschmid 130
        QStringList recoverFiles = scribus->findRecoverableFile();
16185 craig 131
        int subsRet=scribus->ShowSubs();
132
        if (subsRet==0)
13335 cbradney 133
        {
16185 craig 134
                if (!m_Files.isEmpty())
135
                {
136
                        for (int i = 0; i < m_Files.size(); ++i)
137
                                scribus->loadDoc(m_Files.at(i));
138
                }
21098 fschmid 139
                else if ((recoverFiles.count() > 0) && usingGUI())
140
                {
21120 fschmid 141
                        if (!scribus->recoverFile(recoverFiles))
142
                        {
143
                                if (PrefsManager::instance()->appPrefs.uiPrefs.showStartupDialog)
144
                                        scribus->startUpDialog();
145
                        }
21098 fschmid 146
                }
16185 craig 147
                else
148
                {
21098 fschmid 149
                        if (PrefsManager::instance()->appPrefs.uiPrefs.showStartupDialog && usingGUI())
16185 craig 150
                                scribus->startUpDialog();
151
                        else
152
                                scribus->setFocus();
153
                }
13335 cbradney 154
        }
16185 craig 155
        else if (subsRet==QMessageBox::Help)
5257 cbradney 156
        {
16185 craig 157
                scribus->slotRaiseOnlineHelp();
5257 cbradney 158
        }
159
        return EXIT_SUCCESS;
5244 cbradney 160
}
161
 
22607 craig 162
int ScribusCore::initScribusCore(bool showSplash, bool showFontInfo, bool showProfileInfo, const QString newGuiLanguage)
5244 cbradney 163
{
164
        CommonStrings::languageChange();
20691 craig 165
        m_iconManager = IconManager::instance();
166
        if (!m_iconManager->setup())
20193 craig 167
                return EXIT_FAILURE;
20185 craig 168
 
19584 jghali 169
        // FIXME: Splash needs the prefs loaded by initDefaults() to know if it must force the image to grayscale
5244 cbradney 170
        initSplash(showSplash);
17986 craig 171
        LocaleManager::instance();
20691 craig 172
        m_prefsManager = PrefsManager::instance();
173
        m_prefsManager->setup();
6699 cbradney 174
        //CB #4428 Get fonts before prefs are set to default
175
        bool haveFonts=false;
176
        haveFonts=ScCore->initFonts(showFontInfo);
177
        if (!haveFonts)
20193 craig 178
                return EXIT_FAILURE;
20691 craig 179
        m_prefsManager->initDefaults();
180
        m_prefsManager->initDefaultGUIFont(qApp->font());
181
        m_prefsManager->initArrowStyles();
182
        m_undoManager = UndoManager::instance();
5244 cbradney 183
        fileWatcher = new FileWatcher(this);
184
        pluginManager = new PluginManager();
19830 craig 185
 
5244 cbradney 186
        setSplashStatus( tr("Initializing Keyboard Shortcuts") );
20691 craig 187
        m_prefsManager->initDefaultActionKeys();
5244 cbradney 188
        setSplashStatus( tr("Reading Preferences") );
21532 craig 189
        m_prefsManager->ReadPrefs();
20691 craig 190
        m_prefsManager->appPrefs.uiPrefs.showSplashOnStartup=showSplash;
191
        if (!m_iconManager->setActiveFromPrefs(m_prefsManager->appPrefs.uiPrefs.iconSet))
20193 craig 192
        {
193
                //reset prefs name to chosen name based on version, when prefs is empty or not found
20691 craig 194
                m_prefsManager->appPrefs.uiPrefs.iconSet=m_iconManager->activeSetBasename();
20193 craig 195
        }
196
 
5244 cbradney 197
        m_HaveGS = testGSAvailability();
198
        m_HavePngAlpha = testGSDeviceAvailability("pngalpha");
199
        m_HaveTiffSep = testGSDeviceAvailability("tiffsep");
18273 fschmid 200
        setSplashStatus( tr("Initializing Plugins") );
201
        pluginManager->initPlugs();
5244 cbradney 202
 
10435 cbradney 203
        ScCore->setSplashStatus( tr("Reading Color Profiles") );
5880 jghali 204
        m_HaveCMS = false;
7330 jghali 205
        getCMSProfiles(showProfileInfo);
5244 cbradney 206
        initCMS();
14539 jghali 207
 
208
        setSplashStatus( tr("Initializing Image Cache") );
209
        ScImageCacheManager & icm = ScImageCacheManager::instance();
20691 craig 210
        icm.setEnabled(m_prefsManager->appPrefs.imageCachePrefs.cacheEnabled);
211
        icm.setMaxCacheSizeMiB(m_prefsManager->appPrefs.imageCachePrefs.maxCacheSizeMiB);
212
        icm.setMaxCacheEntries(m_prefsManager->appPrefs.imageCachePrefs.maxCacheEntries);
213
        icm.setCompressionLevel(m_prefsManager->appPrefs.imageCachePrefs.compressionLevel);
14539 jghali 214
        icm.initialize();
19830 craig 215
        return 0;
5244 cbradney 216
}
217
 
218
void ScribusCore::initSplash(bool showSplash)
219
{
22516 craig 220
        m_SplashScreen = nullptr;
19830 craig 221
        if (!showSplash)
222
                return;
20185 craig 223
        QPixmap pix = IconManager::instance()->loadPixmap("scribus_splash.png", true);
19830 craig 224
        m_SplashScreen = new ScSplashScreen(pix, Qt::WindowStaysOnTopHint);
22516 craig 225
        if (m_SplashScreen != nullptr)
19830 craig 226
                m_SplashScreen->show();
22516 craig 227
        if (m_SplashScreen != nullptr && m_SplashScreen->isVisible())
19830 craig 228
                setSplashStatus(QObject::tr("Initializing..."));
5244 cbradney 229
}
230
 
231
void ScribusCore::setSplashStatus(const QString& newText)
232
{
22516 craig 233
        if (m_SplashScreen != nullptr)
19830 craig 234
                m_SplashScreen->setStatus( newText );
5244 cbradney 235
}
236
 
237
void ScribusCore::showSplash(bool shown)
238
{
22516 craig 239
        if (m_SplashScreen!=nullptr && shown!=m_SplashScreen->isVisible())
10571 fschmid 240
                m_SplashScreen->setVisible(shown);
5244 cbradney 241
}
242
 
243
bool ScribusCore::splashShowing() const
244
{
22516 craig 245
        if (m_SplashScreen == nullptr)
19830 craig 246
                return false;
247
        return m_SplashScreen->isVisible();
5244 cbradney 248
}
249
 
250
void ScribusCore::closeSplash()
251
{
22516 craig 252
        if (m_SplashScreen==nullptr)
19830 craig 253
                return;
254
        m_SplashScreen->close();
255
        delete m_SplashScreen;
22516 craig 256
        m_SplashScreen = nullptr;
5244 cbradney 257
}
258
 
259
bool ScribusCore::usingGUI() const
260
{
261
        return m_UseGUI;
262
}
263
 
264
bool ScribusCore::isMacGUI() const
265
{
266
        // Do it statically for now
18204 fschmid 267
#if defined(Q_OS_MAC)
5244 cbradney 268
        return true;
269
#else
270
        return false;
271
#endif
272
}
273
 
274
bool ScribusCore::isWinGUI() const
275
{
276
        // Do it statically for now
277
#if defined(_WIN32)
278
        return true;
279
#else
280
        return false;
281
#endif
282
}
283
 
284
//Returns false when there are no fonts
285
bool ScribusCore::initFonts(bool showFontInfo)
286
{
287
        setSplashStatus( tr("Searching for Fonts") );
20691 craig 288
        bool haveFonts=m_prefsManager->GetAllFonts(showFontInfo);
5244 cbradney 289
        if (!haveFonts)
290
        {
291
                closeSplash();
292
                QString mess = tr("There are no fonts found on your system.");
293
                mess += "\n" + tr("Exiting now.");
22607 craig 294
                ScMessageBox::critical(nullptr, tr("Fatal Error"), mess);
5244 cbradney 295
        }
296
        else
297
                setSplashStatus( tr("Font System Initialized") );
298
        return haveFonts;
299
}
300
 
301
 
7330 jghali 302
void ScribusCore::getCMSProfiles(bool showInfo)
5244 cbradney 303
{
304
        QString profDir;
305
        QStringList profDirs;
306
        MonitorProfiles.clear();
307
        PrinterProfiles.clear();
308
        InputProfiles.clear();
309
        InputProfilesCMYK.clear();
20632 fschmid 310
        LabProfiles.clear();
21526 craig 311
        profDirs = ScPaths::systemProfilesDirs();
20691 craig 312
        profDirs.prepend( m_prefsManager->appPrefs.pathPrefs.colorProfiles );
19830 craig 313
        profDirs.prepend( ScPaths::instance().shareDir()+"profiles/");
22723 jghali 314
        for (int i = 0; i < profDirs.count(); i++)
5244 cbradney 315
        {
316
                profDir = profDirs[i];
317
                if(!profDir.isEmpty())
318
                {
319
                        if(profDir.right(1) != "/")
320
                                profDir += "/";
7330 jghali 321
                        getCMSProfilesDir(profDir, showInfo, true);
5244 cbradney 322
                }
323
        }
324
        if ((!PrinterProfiles.isEmpty()) && (!InputProfiles.isEmpty()) && (!MonitorProfiles.isEmpty()))
5880 jghali 325
                m_HaveCMS = true;
5244 cbradney 326
        else
5880 jghali 327
                m_HaveCMS = false;
5244 cbradney 328
}
329
 
22607 craig 330
void ScribusCore::getCMSProfilesDir(const QString& pfad, bool showInfo, bool recursive)
5244 cbradney 331
{
14170 jghali 332
        QString profileName;
333
        QList<ScColorProfileInfo> profileInfos = defaultEngine.getAvailableProfileInfo(pfad, recursive);
334
        for (int i = 0; i < profileInfos.count(); ++i)
5244 cbradney 335
        {
14170 jghali 336
                const ScColorProfileInfo& profInfo = profileInfos.at(i);
337
                profileName = profInfo.description;
338
                if (profileName.isEmpty())
5244 cbradney 339
                {
14170 jghali 340
                        if (showInfo)
16039 jghali 341
                                sDebug(QString("Color profile %1 is broken : no valid description").arg(profInfo.file));
14170 jghali 342
                        continue;
343
                }
344
                if (!profInfo.debug.isEmpty())
345
                {
346
                        if (showInfo)
347
                                sDebug(profInfo.debug);
348
                        continue;
349
                }
350
                switch (static_cast<int>(profInfo.deviceClass))
351
                {
14772 jghali 352
                case Class_Input:
353
                        if (profInfo.colorSpace == ColorSpace_Rgb)
5244 cbradney 354
                        {
14170 jghali 355
                                if (!InputProfiles.contains(profileName))
356
                                        InputProfiles.insert(profileName, profInfo.file);
5244 cbradney 357
                        }
14170 jghali 358
                        break;
14772 jghali 359
                case Class_ColorSpace:
360
                        if (profInfo.colorSpace == ColorSpace_Rgb)
14170 jghali 361
                        {
362
                                if (!InputProfiles.contains(profileName))
363
                                        InputProfiles.insert(profileName, profInfo.file);
5244 cbradney 364
                        }
14772 jghali 365
                        if (profInfo.colorSpace == ColorSpace_Cmyk)
5244 cbradney 366
                        {
14170 jghali 367
                                if (!InputProfilesCMYK.contains(profileName))
368
                                        InputProfilesCMYK.insert(profileName, profInfo.file);
5244 cbradney 369
                        }
20632 fschmid 370
                        if (profInfo.colorSpace == ColorSpace_Lab)
371
                        {
372
                                if (!LabProfiles.contains(profileName))
373
                                        LabProfiles.insert(profileName, profInfo.file);
374
                        }
14170 jghali 375
                        break;
14772 jghali 376
                case Class_Display:
377
                        if (profInfo.colorSpace == ColorSpace_Rgb)
14170 jghali 378
                        {
379
                                if (!MonitorProfiles.contains(profileName))
380
                                        MonitorProfiles.insert(profileName, profInfo.file);
381
                                if (!InputProfiles.contains(profileName))
382
                                        InputProfiles.insert(profileName, profInfo.file);
383
                        }
14772 jghali 384
                        if (profInfo.colorSpace == ColorSpace_Cmyk)
14170 jghali 385
                        {
386
                                if (!InputProfilesCMYK.contains(profileName))
387
                                        InputProfilesCMYK.insert(profileName, profInfo.file);
388
                        }
20632 fschmid 389
                        if (profInfo.colorSpace == ColorSpace_Lab)
390
                        {
391
                                if (!LabProfiles.contains(profileName))
392
                                        LabProfiles.insert(profileName, profInfo.file);
393
                        }
14170 jghali 394
                        break;
14772 jghali 395
                case Class_Output:
14170 jghali 396
                        // Disable rgb printer profile detection until effective support
397
                        // PrinterProfiles.insert(nam, pfad + d[dc], false);
14772 jghali 398
                        if (profInfo.colorSpace == ColorSpace_Cmyk)
14170 jghali 399
                        {
400
                                if (!PDFXProfiles.contains(profileName))
401
                                        PDFXProfiles.insert(profileName, profInfo.file);
402
                                if (!InputProfilesCMYK.contains(profileName))
403
                                        InputProfilesCMYK.insert(profileName, profInfo.file);
404
                                if (!PrinterProfiles.contains(profileName))
405
                                        PrinterProfiles.insert(profileName, profInfo.file);
406
                        }
407
                        break;
5244 cbradney 408
                }
14170 jghali 409
                if (showInfo)
22638 craig 410
                        sDebug( QString("Color profile %1 loaded from %2").arg(profileName, profInfo.file) );
5244 cbradney 411
        }
412
}
413
 
22607 craig 414
void ScribusCore::InitDefaultColorTransforms()
10338 jghali 415
{
22842 jghali 416
        QString defaultRGBString;
417
        QString defaultRGBString1  = "sRGB display profile (ICC v2.2)";
418
        QString defaultRGBString2  = "sRGB IEC61966-2.1";
22810 jghali 419
        QString defaultCMYKString1 = "ISO Coated v2 300% (basICColor)";
420
        QString defaultCMYKString2 = "Fogra27L CMYK Coated Press";
14281 jghali 421
 
10493 fschmid 422
        // Ouvre le profile RGB par d�fault
22842 jghali 423
        if (InputProfiles.contains(defaultRGBString1))
424
        {
425
                defaultRGBProfile = defaultEngine.openProfileFromFile(InputProfiles[defaultRGBString1]);
426
                defaultRGBString = defaultRGBString1;
427
        }
428
        else if (InputProfiles.contains(defaultRGBString2))
429
        {
430
                defaultRGBProfile = defaultEngine.openProfileFromFile(InputProfiles[defaultRGBString2]);
431
                defaultRGBString = defaultRGBString2;
432
        }
10338 jghali 433
        else
22842 jghali 434
        {
14170 jghali 435
                defaultRGBProfile = defaultEngine.createProfile_sRGB();
22842 jghali 436
                defaultRGBString = defaultRGBString2;
437
        }
10338 jghali 438
 
10493 fschmid 439
        // Ouvre le profile CMYK par d�faut
22810 jghali 440
        if (InputProfilesCMYK.contains(defaultCMYKString1))
441
                defaultCMYKProfile = defaultEngine.openProfileFromFile(InputProfilesCMYK[defaultCMYKString1]);
442
        else if (InputProfilesCMYK.contains(defaultCMYKString2))
443
                defaultCMYKProfile = defaultEngine.openProfileFromFile(InputProfilesCMYK[defaultCMYKString2]);
10338 jghali 444
 
14281 jghali 445
        // Keep all chance to have monitor profile set
446
        monitorProfile = defaultRGBProfile;
447
 
10338 jghali 448
        if (!defaultRGBProfile || !defaultCMYKProfile)
449
        {
14170 jghali 450
                ResetDefaultColorTransforms();
10338 jghali 451
                return;
452
        }
453
 
14281 jghali 454
        // Default rgb profile may be a memory profile, if it is the case add it to the lists of 
455
        // rgb profiles (input and monitor) so that it can be used later in prefs
456
        if (!InputProfiles.contains(defaultRGBString))
457
                InputProfiles.insert(defaultRGBString, defaultRGBProfile.profilePath());
458
        if (!MonitorProfiles.contains(defaultRGBString))
459
                MonitorProfiles.insert(defaultRGBString, defaultRGBProfile.profilePath());
460
 
461
        // Open monitor profile as defined by user preferences
20691 craig 462
        QString displayProfile = m_prefsManager->appPrefs.colorPrefs.DCMSset.DefaultMonitorProfile;
14491 jghali 463
        if (MonitorProfiles.contains(displayProfile))
464
                monitorProfile = defaultEngine.openProfileFromFile( MonitorProfiles[displayProfile] );
14281 jghali 465
        if (monitorProfile.isNull())
466
        {
20691 craig 467
                m_prefsManager->appPrefs.colorPrefs.DCMSset.DefaultMonitorProfile = defaultRGBString;
14281 jghali 468
                monitorProfile = defaultRGBProfile;
469
        }
470
 
471
        // Now create default color transforms (used mainly when color management is "disabled")
14170 jghali 472
        int dcmsFlags        = Ctf_BlackPointCompensation;
473
        eRenderIntent intent = Intent_Relative_Colorimetric;
20632 fschmid 474
//      if (!LabProfiles.isEmpty())
475
//              defaultLabProfile = defaultEngine.openProfileFromFile(LabProfiles.first());
476
//      else
477
                defaultLabProfile = defaultEngine.createProfile_Lab();
10338 jghali 478
 
20145 fschmid 479
        defaultRGBToScreenSolidTrans  = defaultEngine.createTransform(defaultRGBProfile, Format_RGB_16,  defaultRGBProfile, Format_RGB_16, intent, dcmsFlags);
480
        defaultRGBToScreenImageTrans  = defaultEngine.createTransform(defaultRGBProfile, Format_RGBA_8,  defaultRGBProfile, Format_RGBA_8, intent, dcmsFlags);
481
        defaultCMYKToScreenImageTrans = defaultEngine.createTransform(defaultCMYKProfile, Format_CMYK_8, defaultRGBProfile, Format_RGBA_8, intent, dcmsFlags);
482
        defaultRGBToCMYKTrans         = defaultEngine.createTransform(defaultRGBProfile, Format_RGB_16, defaultCMYKProfile, Format_CMYK_16, intent, dcmsFlags);
483
        defaultCMYKToRGBTrans         = defaultEngine.createTransform(defaultCMYKProfile, Format_CMYK_16, defaultRGBProfile, Format_RGB_16, intent, dcmsFlags);
22473 jghali 484
        defaultLabToRGBTrans          = defaultEngine.createTransform(defaultLabProfile, Format_Lab_Dbl, defaultRGBProfile, Format_RGB_16, Intent_Absolute_Colorimetric, dcmsFlags);
20152 fschmid 485
        defaultLabToCMYKTrans         = defaultEngine.createTransform(defaultLabProfile, Format_Lab_Dbl, defaultCMYKProfile, Format_CMYK_16, Intent_Absolute_Colorimetric, dcmsFlags);
22473 jghali 486
        defaultLabToScreenTrans       = defaultLabToRGBTrans;
10338 jghali 487
        if (!defaultRGBToScreenSolidTrans  || !defaultRGBToScreenImageTrans ||
488
                !defaultCMYKToScreenImageTrans || !defaultRGBToCMYKTrans ||
20145 fschmid 489
                !defaultCMYKToRGBTrans || !defaultLabToRGBTrans|| !defaultLabToCMYKTrans)
10338 jghali 490
        {
14170 jghali 491
                ResetDefaultColorTransforms();
10338 jghali 492
        }
493
}
494
 
22607 craig 495
void ScribusCore::ResetDefaultColorTransforms()
10338 jghali 496
{
14170 jghali 497
        defaultRGBProfile  = ScColorProfile();
498
        defaultCMYKProfile = ScColorProfile();
499
        defaultRGBToScreenSolidTrans = ScColorTransform();
500
        defaultRGBToScreenImageTrans = ScColorTransform();
501
        defaultCMYKToScreenImageTrans = ScColorTransform();
502
        defaultRGBToCMYKTrans = ScColorTransform();
503
        defaultCMYKToRGBTrans = ScColorTransform();
20145 fschmid 504
        defaultLabToRGBTrans = ScColorTransform();
505
        defaultLabToCMYKTrans = ScColorTransform();
22473 jghali 506
        defaultLabToScreenTrans = ScColorTransform();
10338 jghali 507
}
508
 
5244 cbradney 509
void ScribusCore::initCMS()
510
{
22811 jghali 511
        if (!m_HaveCMS)
512
                return;
513
 
514
        ProfilesL::Iterator ip;
22842 jghali 515
        QString defaultRGBString1 = "sRGB display profile (ICC v2.2)";
516
        QString defaultRGBString2 = "sRGB IEC61966-2.1";
517
        QString defaultCMYKString1 = "ISO Coated v2 300% (basICColor)";
518
        QString defaultCMYKString2 = "Fogra27L CMYK Coated Press";
519
 
520
        QString defaultImageRGBProfile = m_prefsManager->appPrefs.colorPrefs.DCMSset.DefaultImageRGBProfile;
521
        if ((defaultImageRGBProfile.isEmpty()) || (!InputProfiles.contains(defaultImageRGBProfile)))
5244 cbradney 522
        {
22842 jghali 523
                ip = InputProfiles.find(defaultRGBString1);
22811 jghali 524
                if (ip == InputProfiles.end())
22842 jghali 525
                        ip = InputProfiles.find(defaultRGBString2);
526
                if (ip == InputProfiles.end())
22811 jghali 527
                        ip = InputProfiles.begin();
528
                m_prefsManager->appPrefs.colorPrefs.DCMSset.DefaultImageRGBProfile = ip.key();
5244 cbradney 529
        }
22842 jghali 530
 
531
        QString defaultImageCMYKProfile = m_prefsManager->appPrefs.colorPrefs.DCMSset.DefaultImageCMYKProfile;
532
        if ((defaultImageCMYKProfile.isEmpty()) || (!InputProfilesCMYK.contains(defaultImageCMYKProfile)))
22811 jghali 533
        {
22842 jghali 534
                ip = InputProfilesCMYK.find(defaultCMYKString1);
22811 jghali 535
                if (ip == InputProfilesCMYK.end())
22842 jghali 536
                        ip = InputProfilesCMYK.find(defaultCMYKString2);
22811 jghali 537
                if (ip == InputProfilesCMYK.end())
538
                        ip = InputProfilesCMYK.begin();
539
                m_prefsManager->appPrefs.colorPrefs.DCMSset.DefaultImageCMYKProfile = ip.key();
540
        }
22842 jghali 541
 
542
        QString defaultSolidColorRGBProfile = m_prefsManager->appPrefs.colorPrefs.DCMSset.DefaultSolidColorRGBProfile;
543
        if ((defaultSolidColorRGBProfile.isEmpty()) || (!InputProfiles.contains(defaultSolidColorRGBProfile)))
22811 jghali 544
        {
22842 jghali 545
                ip = InputProfiles.find(defaultRGBString1);
22811 jghali 546
                if (ip == InputProfiles.end())
22842 jghali 547
                        ip = InputProfiles.find(defaultRGBString2);
548
                if (ip == InputProfiles.end())
22811 jghali 549
                        ip = InputProfiles.begin();
550
                m_prefsManager->appPrefs.colorPrefs.DCMSset.DefaultSolidColorRGBProfile = ip.key();
551
        }
22842 jghali 552
 
553
        QString defaultSolidColorCMYKProfile = m_prefsManager->appPrefs.colorPrefs.DCMSset.DefaultSolidColorCMYKProfile;
554
        if ((defaultSolidColorCMYKProfile.isEmpty()) || (!InputProfilesCMYK.contains(defaultSolidColorCMYKProfile)))
22811 jghali 555
        {
22842 jghali 556
                ip = InputProfilesCMYK.find(defaultCMYKString1);
22811 jghali 557
                if (ip == InputProfilesCMYK.end())
22842 jghali 558
                        ip = InputProfilesCMYK.find(defaultCMYKString2);
22811 jghali 559
                if (ip == InputProfilesCMYK.end())
560
                        ip = InputProfilesCMYK.begin();
561
                m_prefsManager->appPrefs.colorPrefs.DCMSset.DefaultSolidColorCMYKProfile = ip.key();
562
        }
22842 jghali 563
 
564
        QString defaultMonitorProfile = m_prefsManager->appPrefs.colorPrefs.DCMSset.DefaultMonitorProfile.isEmpty();
565
        if ((defaultMonitorProfile.isEmpty()) || (!MonitorProfiles.contains(defaultMonitorProfile)))
22811 jghali 566
        {
22842 jghali 567
                ip = MonitorProfiles.find(defaultRGBString1);
22811 jghali 568
                if (ip == MonitorProfiles.end())
22842 jghali 569
                        ip = MonitorProfiles.find(defaultRGBString2);
570
                if (ip == MonitorProfiles.end())
22811 jghali 571
                        ip = MonitorProfiles.begin();
572
                m_prefsManager->appPrefs.colorPrefs.DCMSset.DefaultMonitorProfile = ip.key();
573
        }
22842 jghali 574
 
575
        QString defaultPrinterProfile = m_prefsManager->appPrefs.colorPrefs.DCMSset.DefaultPrinterProfile.isEmpty();
576
        if ((defaultPrinterProfile.isEmpty()) || (!PrinterProfiles.contains(defaultPrinterProfile)))
22811 jghali 577
        {
22842 jghali 578
                ip = PrinterProfiles.find(defaultCMYKString1);
22811 jghali 579
                if (ip == PrinterProfiles.end())
22842 jghali 580
                        ip = PrinterProfiles.find(defaultCMYKString2);
22811 jghali 581
                if (ip == PrinterProfiles.end())
582
                        ip = PrinterProfiles.begin();
583
                m_prefsManager->appPrefs.colorPrefs.DCMSset.DefaultPrinterProfile = ip.key();
584
        }
22842 jghali 585
 
22811 jghali 586
        InitDefaultColorTransforms();
5244 cbradney 587
}
5418 cbradney 588
 
19830 craig 589
ScribusMainWindow * ScribusCore::primaryMainWindow()
5418 cbradney 590
{
20691 craig 591
        if (m_ScMWList.count() == 0 || m_currScMW > m_ScMWList.count())
22607 craig 592
                return nullptr;
20691 craig 593
        ScribusMainWindow* mw=m_ScMWList.at(m_currScMW);
5418 cbradney 594
        if (!mw)
22607 craig 595
                return nullptr;
5418 cbradney 596
        return mw;
597
}
5781 cbradney 598
 
6703 fschmid 599
void ScribusCore::recheckGS()
600
{
601
        m_HaveGS = testGSAvailability();
602
        m_HavePngAlpha = testGSDeviceAvailability("pngalpha");
603
        m_HaveTiffSep = testGSDeviceAvailability("tiffsep");
604
}
5781 cbradney 605
 
606
bool ScribusCore::fileWatcherActive() const
607
{
22516 craig 608
        if (fileWatcher!=nullptr)
5781 cbradney 609
                return fileWatcher->isActive();
610
        return false;
611
}