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