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"