File indexing completed on 2025-03-09 03:52:09

0001 /* ============================================================
0002  *
0003  * This file is a part of digiKam project
0004  * https://www.digikam.org
0005  *
0006  * Date        : 2007-02-13
0007  * Description : slide show settings container.
0008  *
0009  * SPDX-FileCopyrightText: 2007-2024 by Gilles Caulier <caulier dot gilles at gmail dot com>
0010  * SPDX-FileCopyrightText: 2019-2020 by Minh Nghia Duong <minhnghiaduong997 at gmail dot com>
0011  *
0012  * SPDX-License-Identifier: GPL-2.0-or-later
0013  *
0014  * ============================================================ */
0015 
0016 #include "slideshowsettings.h"
0017 
0018 // Qt includes
0019 
0020 #include <QFontDatabase>
0021 #include <QRandomGenerator>
0022 
0023 // KDE includes
0024 
0025 #include <kconfiggroup.h>
0026 #include <ksharedconfig.h>
0027 
0028 // Local includes
0029 
0030 #include "metaenginesettings.h"
0031 
0032 using namespace Digikam;
0033 
0034 namespace DigikamGenericSlideShowPlugin
0035 {
0036 
0037 const QString SlideShowSettings::configGroupName(QLatin1String("ImageViewer Settings"));
0038 const QString SlideShowSettings::configSlideShowStartCurrentEntry(QLatin1String("SlideShowStartCurrent"));
0039 const QString SlideShowSettings::configSlideShowDelayEntry(QLatin1String("SlideShowDelay"));
0040 const QString SlideShowSettings::configSlideShowLoopEntry(QLatin1String("SlideShowLoop"));
0041 const QString SlideShowSettings::configSlideShowSuffleEntry(QLatin1String("SlideShowSuffle"));
0042 const QString SlideShowSettings::configSlideShowPrintApertureFocalEntry(QLatin1String("SlideShowPrintApertureFocal"));
0043 const QString SlideShowSettings::configSlideShowPrintCommentEntry(QLatin1String("SlideShowPrintComment"));
0044 const QString SlideShowSettings::configSlideShowPrintTitleEntry(QLatin1String("SlideShowPrintTitle"));
0045 const QString SlideShowSettings::configSlideShowPrintCapIfNoTitleEntry(QLatin1String("SlideShowPrintCapIfNoTitle"));
0046 const QString SlideShowSettings::configSlideShowPrintDateEntry(QLatin1String("SlideShowPrintDate"));
0047 const QString SlideShowSettings::configSlideShowPrintExpoSensitivityEntry(QLatin1String("SlideShowPrintExpoSensitivity"));
0048 const QString SlideShowSettings::configSlideShowPrintMakeModelEntry(QLatin1String("SlideShowPrintMakeModel"));
0049 const QString SlideShowSettings::configSlideShowPrintLensModelEntry(QLatin1String("SlideShowPrintLensModel"));
0050 const QString SlideShowSettings::configSlideShowPrintNameEntry(QLatin1String("SlideShowPrintName"));
0051 const QString SlideShowSettings::configSlideShowPrintTagsEntry(QLatin1String("SlideShowPrintTags"));
0052 const QString SlideShowSettings::configSlideShowPrintLabelsEntry(QLatin1String("SlideShowPrintLabels"));
0053 const QString SlideShowSettings::configSlideShowPrintRatingEntry(QLatin1String("SlideShowPrintRating"));
0054 const QString SlideShowSettings::configSlideShowProgressIndicatorEntry(QLatin1String("SlideShowProgressIndicator"));
0055 const QString SlideShowSettings::configSlideShowCaptionFontEntry(QLatin1String("SlideShowCaptionFont"));
0056 const QString SlideShowSettings::configSlideScreenEntry(QLatin1String("SlideScreen"));
0057 
0058 SlideShowSettings::SlideShowSettings()
0059     : startWithCurrent      (false),
0060       exifRotate            (true),
0061       printName             (true),
0062       printDate             (false),
0063       printApertureFocal    (false),
0064       printMakeModel        (false),
0065       printLensModel        (false),
0066       printExpoSensitivity  (false),
0067       printComment          (false),
0068       printTitle            (false),
0069       printCapIfNoTitle     (false),
0070       printTags             (false),
0071       printLabels           (false),
0072       printRating           (false),
0073       loop                  (false),
0074       suffle                (false),
0075       delay                 (5),
0076       autoPlayEnabled       (true),
0077       slideScreen           (-2),
0078       showProgressIndicator (true),
0079       captionFont           (QFontDatabase::systemFont(QFontDatabase::GeneralFont)),
0080       iface                 (nullptr),
0081       plugin                (nullptr)
0082 {
0083 }
0084 
0085 SlideShowSettings::~SlideShowSettings()
0086 {
0087 }
0088 
0089 void SlideShowSettings::readFromConfig()
0090 {
0091     KSharedConfig::Ptr config = KSharedConfig::openConfig();
0092     KConfigGroup group        = config->group(configGroupName);
0093 
0094     startWithCurrent          = group.readEntry(configSlideShowStartCurrentEntry,         false);
0095     delay                     = group.readEntry(configSlideShowDelayEntry,                5);
0096     loop                      = group.readEntry(configSlideShowLoopEntry,                 false);
0097     suffle                    = group.readEntry(configSlideShowSuffleEntry,               false);
0098     printName                 = group.readEntry(configSlideShowPrintNameEntry,            true);
0099     printDate                 = group.readEntry(configSlideShowPrintDateEntry,            false);
0100     printApertureFocal        = group.readEntry(configSlideShowPrintApertureFocalEntry,   false);
0101     printExpoSensitivity      = group.readEntry(configSlideShowPrintExpoSensitivityEntry, false);
0102     printMakeModel            = group.readEntry(configSlideShowPrintMakeModelEntry,       false);
0103     printLensModel            = group.readEntry(configSlideShowPrintLensModelEntry,       false);
0104     printComment              = group.readEntry(configSlideShowPrintCommentEntry,         false);
0105     printTitle                = group.readEntry(configSlideShowPrintTitleEntry,           false);
0106     printCapIfNoTitle         = group.readEntry(configSlideShowPrintCapIfNoTitleEntry,    false);
0107     printTags                 = group.readEntry(configSlideShowPrintTagsEntry,            false);
0108     printLabels               = group.readEntry(configSlideShowPrintLabelsEntry,          false);
0109     printRating               = group.readEntry(configSlideShowPrintRatingEntry,          false);
0110     showProgressIndicator     = group.readEntry(configSlideShowProgressIndicatorEntry,    true);
0111     captionFont               = group.readEntry(configSlideShowCaptionFontEntry,
0112                                                 QFontDatabase::systemFont(QFontDatabase::GeneralFont));
0113     slideScreen               = group.readEntry(configSlideScreenEntry,                   -2);
0114     exifRotate                = MetaEngineSettings::instance()->settings().exifRotate;
0115 }
0116 
0117 void SlideShowSettings::writeToConfig()
0118 {
0119     KSharedConfig::Ptr config = KSharedConfig::openConfig();
0120     KConfigGroup group        = config->group(configGroupName);
0121 
0122     group.writeEntry(configSlideShowStartCurrentEntry,         startWithCurrent);
0123     group.writeEntry(configSlideShowDelayEntry,                delay);
0124     group.writeEntry(configSlideShowLoopEntry,                 loop);
0125     group.writeEntry(configSlideShowSuffleEntry,               suffle);
0126     group.writeEntry(configSlideShowPrintNameEntry,            printName);
0127     group.writeEntry(configSlideShowPrintDateEntry,            printDate);
0128     group.writeEntry(configSlideShowPrintApertureFocalEntry,   printApertureFocal);
0129     group.writeEntry(configSlideShowPrintExpoSensitivityEntry, printExpoSensitivity);
0130     group.writeEntry(configSlideShowPrintMakeModelEntry,       printMakeModel);
0131     group.writeEntry(configSlideShowPrintLensModelEntry,       printLensModel);
0132     group.writeEntry(configSlideShowPrintCommentEntry,         printComment);
0133     group.writeEntry(configSlideShowPrintTitleEntry,           printTitle);
0134     group.writeEntry(configSlideShowPrintCapIfNoTitleEntry,    printCapIfNoTitle);
0135     group.writeEntry(configSlideShowPrintTagsEntry,            printTags);
0136     group.writeEntry(configSlideShowPrintLabelsEntry,          printLabels);
0137     group.writeEntry(configSlideShowPrintRatingEntry,          printRating);
0138     group.writeEntry(configSlideShowProgressIndicatorEntry,    showProgressIndicator);
0139     group.writeEntry(configSlideShowCaptionFontEntry,          captionFont);
0140     group.writeEntry(configSlideScreenEntry,                   slideScreen);
0141     group.sync();
0142 }
0143 
0144 int SlideShowSettings::indexOf(const QUrl& url) const
0145 {
0146     return fileList.indexOf(url);
0147 }
0148 
0149 int SlideShowSettings::count() const
0150 {
0151     return fileList.count();
0152 }
0153 
0154 void SlideShowSettings::suffleImages()
0155 {
0156     if (suffle && autoPlayEnabled)
0157     {
0158         if (originalFileList.isEmpty())
0159         {
0160             // keep a backup of original file list at the first suffle
0161 
0162             originalFileList         = fileList;
0163 
0164             // suffle
0165 
0166 
0167             QList<QUrl>::iterator it = fileList.begin();
0168             QList<QUrl>::iterator it1;
0169 
0170             for (uint i = 0 ; i < (uint)count() ; ++i)
0171             {
0172                 int inc = QRandomGenerator::global()->bounded(count());
0173 
0174                 it1     = fileList.begin();
0175                 it1    += inc;
0176 
0177                 std::swap(*(it++), *(it1));
0178              }
0179         }
0180     }
0181     else
0182     {
0183         if (!originalFileList.isEmpty())
0184         {
0185             // return to original list
0186 
0187             fileList = originalFileList;
0188             originalFileList.clear();
0189         }
0190     }
0191 }
0192 
0193 } // namespace DigikamGenericSlideShowPlugin