X-Git-Url: https://gitweb.stoutner.com/?a=blobdiff_plain;f=src%2Fwindows%2FBrowserWindow.cpp;h=efa87ab0ea6fe57d710ea04a6984251a93cec00c;hb=22e1626444752f99e32b8c85b27c7b9e2054a96e;hp=5960393f1da4b4fb535b4383463ce4ff46f08a3c;hpb=5f747e35e3555da6a0f89f0444163d578ab1db22;p=PrivacyBrowserPC.git diff --git a/src/windows/BrowserWindow.cpp b/src/windows/BrowserWindow.cpp index 5960393..efa87ab 100644 --- a/src/windows/BrowserWindow.cpp +++ b/src/windows/BrowserWindow.cpp @@ -1,5 +1,5 @@ /* - * Copyright © 2022 Soren Stoutner . + * Copyright 2022-2023 Soren Stoutner . * * This file is part of Privacy Browser PC . * @@ -20,8 +20,9 @@ // Application headers. #include "BrowserWindow.h" #include "Settings.h" -#include "ui_SettingsPrivacy.h" #include "ui_SettingsGeneral.h" +#include "ui_SettingsPrivacy.h" +#include "ui_SettingsSpellCheck.h" #include "dialogs/CookiesDialog.h" #include "dialogs/DomainSettingsDialog.h" #include "helpers/SearchEngineHelper.h" @@ -631,14 +632,17 @@ void BrowserWindow::showSettingsDialog() // Create the settings widgets. QWidget *privacySettingsWidgetPointer = new QWidget; QWidget *generalSettingsWidgetPointer = new QWidget; + QWidget *spellCheckSettingsWidgetPointer = new QWidget; // Instantiate the settings UI. Ui::PrivacySettings privacySettingsUi; Ui::GeneralSettings generalSettingsUi; + Ui::SpellCheckSettings spellCheckSettingsUi; // Setup the UI to display the settings widgets. privacySettingsUi.setupUi(privacySettingsWidgetPointer); generalSettingsUi.setupUi(generalSettingsWidgetPointer); + spellCheckSettingsUi.setupUi(spellCheckSettingsWidgetPointer); // Get handles for the widgets. QComboBox *userAgentComboBoxPointer = privacySettingsUi.kcfg_userAgent; @@ -647,6 +651,7 @@ void BrowserWindow::showSettingsDialog() searchEngineLabelPointer = generalSettingsUi.searchEngineLabel; downloadLocationComboBoxPointer = generalSettingsUi.kcfg_downloadLocation; QPushButton *browseButtonPointer = generalSettingsUi.browseButton; + QListWidget *spellCheckListWidgetPointer = spellCheckSettingsUi.spellCheckListWidget; // Populate the combo box labels. updateUserAgentLabel(userAgentComboBoxPointer->currentText()); @@ -659,12 +664,51 @@ void BrowserWindow::showSettingsDialog() // Connect the download location directory browse button. connect(browseButtonPointer, SIGNAL(clicked()), this, SLOT(showDownloadLocationBrowseDialog())); + // Create a dictionaries QDir from the `QTWEBENGINE_DICTIONARIES_PATH` environment variable. + QDir dictionariesDir = QDir(qEnvironmentVariable("QTWEBENGINE_DICTIONARIES_PATH")); + + // Get a dictionaries string list. + QStringList dictionariesStringList = dictionariesDir.entryList(QStringList(QLatin1String("*.bdic")), QDir::Files | QDir::NoSymLinks); + + // Remove the `.bdic` file extensions from the dictionaries list. + dictionariesStringList.replaceInStrings(QLatin1String(".bdic"), QLatin1String("")); + + // Get a list of the enabled spell check languages. + QStringList enabledSpellCheckLanguagesList = Settings::spellCheckLanguages(); + + // Add each dictionary to the spell check list widget. + foreach(QString dictionaryString, dictionariesStringList) + { + // Create a new list widget item pointer named after the dictionary string. + QListWidgetItem *listWidgetItemPointer = new QListWidgetItem(dictionaryString, spellCheckListWidgetPointer); + + // 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, QStringLiteral("settings"), Settings::self()); + configDialogPointer = new KConfigDialog(this, QLatin1String("settings"), kConfigSkeletonPointer); // Add the settings widgets as config dialog pages. - configDialogPointer->addPage(privacySettingsWidgetPointer, i18nc("@title:tab", "Privacy"), QStringLiteral("privacy-browser")); - configDialogPointer->addPage(generalSettingsWidgetPointer, i18nc("@title:tab", "General"), QStringLiteral("breeze-settings")); + 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); @@ -681,7 +725,44 @@ void BrowserWindow::showSettingsDialog() // Expand the config dialog. configDialogPointer->resize(1000, 500); - // Apply the settings when they are updated. + // 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())); }