1 /* ============================================================ 2 * 3 * This file is a part of digiKam project 4 * https://www.digikam.org 5 * 6 * Date : 2010-08-20 7 * Description : central place for MetaEngine settings 8 * 9 * Copyright (C) 2010-2021 by Gilles Caulier <caulier dot gilles at gmail dot com> 10 * 11 * This program is free software; you can redistribute it 12 * and/or modify it under the terms of the GNU General 13 * Public License as published by the Free Software Foundation; 14 * either version 2, or (at your option) 15 * any later version. 16 * 17 * This program is distributed in the hope that it will be useful, 18 * but WITHOUT ANY WARRANTY; without even the implied warranty of 19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 20 * GNU General Public License for more details. 21 * 22 * ============================================================ */ 23 24 #include "metaenginesettings.h" 25 26 // Qt includes 27 28 #include <QDir> 29 #include <QFileInfo> 30 #include <QMutex> 31 32 // KDE includes 33 34 #include <kconfiggroup.h> 35 #include <ksharedconfig.h> 36 37 // Local includes 38 39 #include "digikam_debug.h" 40 41 namespace Digikam 42 { 43 44 class Q_DECL_HIDDEN MetaEngineSettings::Private 45 { 46 public: 47 Private()48 explicit Private() 49 : mutex (), 50 configGroup(QLatin1String("Metadata Settings")) 51 { 52 } 53 54 MetaEngineSettingsContainer settings; 55 QMutex mutex; 56 57 const QString configGroup; 58 59 public: 60 61 MetaEngineSettingsContainer readFromConfig() const; 62 void writeToConfig() const; 63 MetaEngineSettingsContainer setSettings(const MetaEngineSettingsContainer& s); 64 }; 65 readFromConfig() const66MetaEngineSettingsContainer MetaEngineSettings::Private::readFromConfig() const 67 { 68 MetaEngineSettingsContainer s; 69 KSharedConfig::Ptr config = KSharedConfig::openConfig(); 70 KConfigGroup group = config->group(configGroup); 71 s.readFromConfig(group); 72 73 return s; 74 } 75 writeToConfig() const76void MetaEngineSettings::Private::writeToConfig() const 77 { 78 KSharedConfig::Ptr config = KSharedConfig::openConfig(); 79 KConfigGroup group = config->group(configGroup); 80 settings.writeToConfig(group); 81 } 82 setSettings(const MetaEngineSettingsContainer & s)83MetaEngineSettingsContainer MetaEngineSettings::Private::setSettings(const MetaEngineSettingsContainer& s) 84 { 85 QMutexLocker lock(&mutex); 86 MetaEngineSettingsContainer old; 87 old = settings; 88 settings = s; 89 90 return old; 91 } 92 93 // ----------------------------------------------------------------------------------------------- 94 95 class Q_DECL_HIDDEN MetaEngineSettingsCreator 96 { 97 public: 98 99 MetaEngineSettings object; 100 }; 101 Q_GLOBAL_STATIC(MetaEngineSettingsCreator,metaEngineSettingsCreator)102Q_GLOBAL_STATIC(MetaEngineSettingsCreator, metaEngineSettingsCreator) 103 104 // ----------------------------------------------------------------------------------------------- 105 106 MetaEngineSettings* MetaEngineSettings::instance() 107 { 108 return &metaEngineSettingsCreator->object; 109 } 110 MetaEngineSettings()111MetaEngineSettings::MetaEngineSettings() 112 : d(new Private) 113 { 114 readFromConfig(); 115 qRegisterMetaType<MetaEngineSettingsContainer>("MetaEngineSettingsContainer"); 116 } 117 ~MetaEngineSettings()118MetaEngineSettings::~MetaEngineSettings() 119 { 120 delete d; 121 } 122 settings() const123MetaEngineSettingsContainer MetaEngineSettings::settings() const 124 { 125 QMutexLocker lock(&d->mutex); 126 MetaEngineSettingsContainer s(d->settings); 127 128 return s; 129 } 130 exifRotate() const131bool MetaEngineSettings::exifRotate() const 132 { 133 return d->settings.exifRotate; 134 } 135 setSettings(const MetaEngineSettingsContainer & settings)136void MetaEngineSettings::setSettings(const MetaEngineSettingsContainer& settings) 137 { 138 MetaEngineSettingsContainer old = d->setSettings(settings); 139 emit signalMetaEngineSettingsChanged(settings, old); 140 emit signalSettingsChanged(); 141 d->writeToConfig(); 142 } 143 readFromConfig()144void MetaEngineSettings::readFromConfig() 145 { 146 MetaEngineSettingsContainer s = d->readFromConfig(); 147 MetaEngineSettingsContainer old = d->setSettings(s); 148 emit signalMetaEngineSettingsChanged(s, old); 149 emit signalSettingsChanged(); 150 } 151 152 } // namespace Digikam 153 154 #include "moc_metaenginesettings.cpp" 155