File indexing completed on 2025-04-27 03:58:40

0001 /* ============================================================
0002  *
0003  * This file is a part of digiKam project
0004  * https://www.digikam.org
0005  *
0006  * Date        : 2023-08-16
0007  * Description : central place for Spell-check and localize settings
0008  *
0009  * SPDX-FileCopyrightText: 2021-2024 by Gilles Caulier <caulier dot gilles at gmail dot com>
0010  *
0011  * SPDX-License-Identifier: GPL-2.0-or-later
0012  *
0013  * ============================================================ */
0014 
0015 #include "localizesettings.h"
0016 
0017 // Qt includes
0018 
0019 #include <QMutex>
0020 
0021 // KDE includes
0022 
0023 #include <kconfiggroup.h>
0024 #include <ksharedconfig.h>
0025 
0026 // Local includes
0027 
0028 #include "digikam_debug.h"
0029 
0030 namespace Digikam
0031 {
0032 
0033 class Q_DECL_HIDDEN LocalizeSettings::Private
0034 {
0035 public:
0036 
0037     explicit Private ()
0038         : mutex      (),
0039           configGroup(QLatin1String("Spell Check Settings"))
0040     {
0041     }
0042 
0043     LocalizeContainer settings;
0044     QMutex            mutex;
0045 
0046     const QString     configGroup;
0047 
0048 public:
0049 
0050     LocalizeContainer readFromConfig() const;
0051     void              writeToConfig()  const;
0052     void              setSettings(const LocalizeContainer& s, LocalizeSettings::ConfigPart config);
0053 };
0054 
0055 LocalizeContainer LocalizeSettings::Private::readFromConfig() const
0056 {
0057     LocalizeContainer s;
0058     KSharedConfig::Ptr config = KSharedConfig::openConfig();
0059     KConfigGroup group        = config->group(configGroup);
0060     s.readFromConfig(group);
0061 
0062     return s;
0063 }
0064 
0065 void LocalizeSettings::Private::writeToConfig() const
0066 {
0067     KSharedConfig::Ptr config = KSharedConfig::openConfig();
0068     KConfigGroup group        = config->group(configGroup);
0069     settings.writeToConfig(group);
0070 }
0071 
0072 void LocalizeSettings::Private::setSettings(const LocalizeContainer& s, LocalizeSettings::ConfigPart config)
0073 {
0074     QMutexLocker lock(&mutex);
0075 
0076     switch (config)
0077     {
0078         case LocalizeConfig:
0079         {
0080             settings.translatorEngine = s.translatorEngine;
0081             settings.translatorLang   = s.translatorLang;
0082             settings.alternativeLang  = s.alternativeLang;
0083             break;
0084         }
0085 
0086         case SpellCheckConfig:
0087         {
0088             settings.enableSpellCheck = s.enableSpellCheck;
0089             settings.ignoredWords     = s.ignoredWords;
0090             break;
0091         }
0092 
0093         default:        // AllConfig
0094         {
0095             settings = s;
0096             break;
0097         }
0098     }
0099 }
0100 
0101 // -----------------------------------------------------------------------------------------------
0102 
0103 class Q_DECL_HIDDEN LocalizeSettingsCreator
0104 {
0105 public:
0106 
0107     LocalizeSettings object;
0108 };
0109 
0110 Q_GLOBAL_STATIC(LocalizeSettingsCreator, localizeSettingsCreator)
0111 
0112 // -----------------------------------------------------------------------------------------------
0113 
0114 LocalizeSettings* LocalizeSettings::instance()
0115 {
0116     return &localizeSettingsCreator->object;
0117 }
0118 
0119 LocalizeSettings::LocalizeSettings()
0120     : d(new Private)
0121 {
0122     readFromConfig();
0123     qRegisterMetaType<LocalizeContainer>("LocalizeContainer");
0124 }
0125 
0126 LocalizeSettings::~LocalizeSettings()
0127 {
0128     delete d;
0129 }
0130 
0131 void LocalizeSettings::openLocalizeSetup()
0132 {
0133     Q_EMIT signalOpenLocalizeSetup();
0134 }
0135 
0136 LocalizeContainer LocalizeSettings::settings() const
0137 {
0138     QMutexLocker lock(&d->mutex);
0139     LocalizeContainer s(d->settings);
0140 
0141     return s;
0142 }
0143 
0144 void LocalizeSettings::setSettings(const LocalizeContainer& settings, ConfigPart config)
0145 {
0146     d->setSettings(settings, config);
0147 
0148     Q_EMIT signalSettingsChanged();
0149 
0150     d->writeToConfig();
0151 }
0152 
0153 void LocalizeSettings::readFromConfig()
0154 {
0155     d->settings = d->readFromConfig();
0156 
0157     Q_EMIT signalSettingsChanged();
0158 }
0159 
0160 } // namespace Digikam
0161 
0162 #include "moc_localizesettings.cpp"