File indexing completed on 2024-05-12 05:35:51

0001 /*
0002     SPDX-FileCopyrightText: 2008 Albert Astals Cid <aacid@kde.org>
0003     SPDX-FileCopyrightText: 2020 Benjamin Port <benjamin.port@enioka.com>
0004 
0005     SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0006 */
0007 
0008 #include "spellchecking.h"
0009 
0010 #include <QBoxLayout>
0011 #include <QSet>
0012 
0013 #include "spellcheckingdata.h"
0014 #include <KConfigDialogManager>
0015 #include <KPluginFactory>
0016 #include <Sonnet/ConfigView>
0017 #include <Sonnet/Settings>
0018 
0019 K_PLUGIN_FACTORY_WITH_JSON(SpellFactory, "kcmspellchecking.json", registerPlugin<SonnetSpellCheckingModule>(); registerPlugin<SpellCheckingData>();)
0020 
0021 SonnetSpellCheckingModule::SonnetSpellCheckingModule(QObject *parent, const KPluginMetaData &data)
0022     : KCModule(parent, data)
0023     , m_data(new SpellCheckingData(this))
0024 {
0025     QBoxLayout *layout = new QVBoxLayout(widget());
0026     layout->setContentsMargins(0, 0, 0, 0);
0027     m_configWidget = new Sonnet::ConfigView(widget());
0028     m_configWidget->setNoBackendFoundVisible(skeleton()->clients().isEmpty());
0029     layout->addWidget(m_configWidget);
0030     m_managedConfig = addConfig(skeleton(), m_configWidget);
0031     connect(m_configWidget, &Sonnet::ConfigView::configChanged, this, &SonnetSpellCheckingModule::stateChanged);
0032 }
0033 
0034 void SonnetSpellCheckingModule::stateChanged()
0035 {
0036     bool unmanagedChangeState = false;
0037     bool unmanagedDefaultState = true;
0038 
0039     QStringList refIgnoreList(skeleton()->ignoreList());
0040     refIgnoreList.removeDuplicates();
0041     refIgnoreList.sort();
0042 
0043     QStringList currentIgnoreList(m_configWidget->ignoreList());
0044     currentIgnoreList.removeDuplicates();
0045     currentIgnoreList.sort();
0046 
0047     QStringList defaultIgnoreList(Sonnet::Settings::defaultIgnoreList());
0048     defaultIgnoreList.removeDuplicates();
0049     defaultIgnoreList.sort();
0050 
0051     unmanagedChangeState |= currentIgnoreList != refIgnoreList;
0052     unmanagedDefaultState &= currentIgnoreList == defaultIgnoreList;
0053 
0054     QStringList refPreferredLanguagesList(skeleton()->preferredLanguages());
0055     refPreferredLanguagesList.removeDuplicates();
0056     refPreferredLanguagesList.sort();
0057 
0058     QStringList currentPreferredLanguagesList(m_configWidget->preferredLanguages());
0059     currentPreferredLanguagesList.removeDuplicates();
0060     currentPreferredLanguagesList.sort();
0061 
0062     QStringList defaultPreferredLanguagesList(Sonnet::Settings::defaultPreferredLanguages());
0063     defaultPreferredLanguagesList.removeDuplicates();
0064     defaultPreferredLanguagesList.sort();
0065 
0066     unmanagedChangeState |= currentPreferredLanguagesList != refPreferredLanguagesList;
0067     unmanagedDefaultState &= currentPreferredLanguagesList == defaultPreferredLanguagesList;
0068 
0069     unmanagedChangeState |= skeleton()->defaultLanguage() != m_configWidget->language();
0070     unmanagedDefaultState &= m_configWidget->language() == Sonnet::Settings::defaultDefaultLanguage();
0071 
0072     unmanagedWidgetDefaultState(unmanagedDefaultState);
0073     unmanagedWidgetChangeState(unmanagedChangeState);
0074 }
0075 
0076 SonnetSpellCheckingModule::~SonnetSpellCheckingModule()
0077 {
0078 }
0079 
0080 void SonnetSpellCheckingModule::load()
0081 {
0082     KCModule::load();
0083     // Set unmanaged widget value
0084     m_configWidget->setIgnoreList(skeleton()->ignoreList());
0085     m_configWidget->setPreferredLanguages(skeleton()->preferredLanguages());
0086     m_configWidget->setLanguage(skeleton()->defaultLanguage());
0087 }
0088 
0089 void SonnetSpellCheckingModule::save()
0090 {
0091     skeleton()->setIgnoreList(m_configWidget->ignoreList());
0092     skeleton()->setPreferredLanguages(m_configWidget->preferredLanguages());
0093     skeleton()->setDefaultLanguage(m_configWidget->language());
0094 
0095     // with addConfig, save on skeleton will be trigger only if one managed widget changed
0096     if (!m_managedConfig->hasChanged()) {
0097         skeleton()->save();
0098     }
0099     KCModule::save();
0100 }
0101 
0102 void SonnetSpellCheckingModule::defaults()
0103 {
0104     KCModule::defaults();
0105     // set default value for unmanaged widgets
0106     m_configWidget->setIgnoreList(Sonnet::Settings::defaultIgnoreList());
0107     m_configWidget->setPreferredLanguages(Sonnet::Settings::defaultPreferredLanguages());
0108     m_configWidget->setLanguage(Sonnet::Settings::defaultDefaultLanguage());
0109 }
0110 
0111 SpellCheckingSkeleton *SonnetSpellCheckingModule::skeleton() const
0112 {
0113     return m_data->settings();
0114 }
0115 
0116 #include "spellchecking.moc"