+ // Set the list widget item pointer to be checkable.
+ listWidgetItemPointer->setFlags(listWidgetItemPointer->flags() | Qt::ItemIsUserCheckable);
+
+ // Check the language if it is currently enabled.
+ if (enabledSpellCheckLanguagesList.contains(dictionaryString))
+ listWidgetItemPointer->setCheckState(Qt::Checked);
+ else
+ listWidgetItemPointer->setCheckState(Qt::Unchecked);
+
+ // Add the list widget item to the widget.
+ spellCheckListWidgetPointer->addItem(listWidgetItemPointer);
+ }
+
+ // Get a handle for the KConfig skeleton.
+ KConfigSkeleton *kConfigSkeletonPointer = Settings::self();
+
+ // Instantiate a settings config dialog from the settings.kcfg file.
+ configDialogPointer = new KConfigDialog(this, QLatin1String("settings"), kConfigSkeletonPointer);
+
+ // Add the settings widgets as config dialog pages.
+ configDialogPointer->addPage(privacySettingsWidgetPointer, i18nc("Settings tab title", "Privacy"), QLatin1String("privacy-browser"));
+ configDialogPointer->addPage(generalSettingsWidgetPointer, i18nc("Settings tab title", "General"), QLatin1String("breeze-settings"));
+ configDialogPointer->addPage(spellCheckSettingsWidgetPointer, i18nc("Settings tab title", "Spell Check"), QLatin1String("tools-check-spelling"));
+
+ // Get handles for the buttons.
+ QPushButton *applyButtonPointer = configDialogPointer->button(QDialogButtonBox::Apply);
+ QPushButton *okButtonPointer = configDialogPointer->button(QDialogButtonBox::Ok);
+
+ // Prevent interaction with the parent window while the dialog is open.
+ configDialogPointer->setWindowModality(Qt::WindowModal);
+
+ // Make it so.
+ configDialogPointer->show();
+
+ // TODO. KConfigDialog does not respect expanding size policies. <https://redmine.stoutner.com/issues/823>
+ //configDialogPointer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
+ //privacySettingsWidgetPointer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
+ //generalSettingsWidgetPointer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
+ //configDialogPointer->adjustSize();
+
+ // Expand the config dialog.
+ configDialogPointer->resize(1000, 500);
+
+ // Create a save spell check languages lambda.
+ auto saveSpellCheckLanguages = [spellCheckListWidgetPointer, kConfigSkeletonPointer, this] ()
+ {
+ // Create a list of enabled languages.
+ QStringList newSpellCheckLanguages = QStringList();
+
+ // Get a count of all the languages.
+ int allLanguagesCount = spellCheckListWidgetPointer->count();
+
+ // Get a list of all the checked languages.
+ for (int i = 0; i < allLanguagesCount; ++i) {
+ // Get the language item.
+ QListWidgetItem *languageItemPointer = spellCheckListWidgetPointer->item(i);
+
+ // Add the item to the enabled languages if it is checked.
+ if (languageItemPointer->checkState() == Qt::Checked)
+ newSpellCheckLanguages.append(languageItemPointer->text());
+ }
+
+ // Update the spell check languages.
+ if (Settings::spellCheckLanguages() != newSpellCheckLanguages)
+ {
+ // Update the spell check languages.
+ Settings::setSpellCheckLanguages(newSpellCheckLanguages);
+
+ // Write the settings to disk.
+ kConfigSkeletonPointer->save();
+ }
+
+ // Apply the spell check languages.
+ tabWidgetPointer->applySpellCheckLanguages();
+ };
+
+ // Process
+ connect(applyButtonPointer, &QPushButton::clicked, this, saveSpellCheckLanguages);
+ connect(okButtonPointer, &QPushButton::clicked, this, saveSpellCheckLanguages);
+
+ // Apply the settings handled by KConfig.
+ connect(configDialogPointer, SIGNAL(settingsChanged(QString)), tabWidgetPointer, SLOT(applyApplicationSettings()));
+ connect(configDialogPointer, SIGNAL(settingsChanged(QString)), tabWidgetPointer, SLOT(applyDomainSettingsAndReload()));