/*
- * Copyright © 2022 Soren Stoutner <soren@stoutner.com>.
+ * Copyright 2022-2023 Soren Stoutner <soren@stoutner.com>.
*
* This file is part of Privacy Browser PC <https://www.stoutner.com/privacy-browser-pc>.
*
// 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"
searchEngineYahooActionPointer->setCheckable(true);
searchEngineCustomActionPointer->setCheckable(true);
+ // Instantiate the user agent helper.
+ UserAgentHelper *userAgentHelperPointer = new UserAgentHelper();
+
// Set the action text.
- userAgentPrivacyBrowserActionPointer->setText(UserAgentHelper::PRIVACY_BROWSER_TRANSLATED);
- userAgentWebEngineDefaultActionPointer->setText(UserAgentHelper::WEB_ENGINE_DEFAULT_TRANSLATED);
- userAgentFirefoxLinuxActionPointer->setText(UserAgentHelper::FIREFOX_LINUX_TRANSLATED);
- userAgentChromiumLinuxActionPointer->setText(UserAgentHelper::CHROMIUM_LINUX_TRANSLATED);
- userAgentFirefoxWindowsActionPointer->setText(UserAgentHelper::FIREFOX_WINDOWS_TRANSLATED);
- userAgentChromeWindowsActionPointer->setText(UserAgentHelper::CHROME_WINDOWS_TRANSLATED);
- userAgentEdgeWindowsActionPointer->setText(UserAgentHelper::EDGE_WINDOWS_TRANSLATED);
- userAgentSafariMacosActionPointer->setText(UserAgentHelper::SAFARI_MACOS_TRANSLATED);
+ userAgentPrivacyBrowserActionPointer->setText(userAgentHelperPointer->PRIVACY_BROWSER_TRANSLATED);
+ userAgentWebEngineDefaultActionPointer->setText(userAgentHelperPointer->WEB_ENGINE_DEFAULT_TRANSLATED);
+ userAgentFirefoxLinuxActionPointer->setText(userAgentHelperPointer->FIREFOX_LINUX_TRANSLATED);
+ userAgentChromiumLinuxActionPointer->setText(userAgentHelperPointer->CHROMIUM_LINUX_TRANSLATED);
+ userAgentFirefoxWindowsActionPointer->setText(userAgentHelperPointer->FIREFOX_WINDOWS_TRANSLATED);
+ userAgentChromeWindowsActionPointer->setText(userAgentHelperPointer->CHROME_WINDOWS_TRANSLATED);
+ userAgentEdgeWindowsActionPointer->setText(userAgentHelperPointer->EDGE_WINDOWS_TRANSLATED);
+ userAgentSafariMacosActionPointer->setText(userAgentHelperPointer->SAFARI_MACOS_TRANSLATED);
searchEngineMojeekActionPointer->setText(i18nc("Search engine", "Mojeek"));
searchEngineMonoclesActionPointer->setText(i18nc("Search engine", "Monocles"));
searchEngineMetagerActionPointer->setText(i18nc("Search engine", "MetaGer"));
connect(findCaseSensitiveActionPointer, SIGNAL(triggered()), this, SLOT(toggleFindCaseSensitive()));
// Setup the GUI based on the browser_window_ui.rc file.
- setupGUI(StandardWindowOption::Default, ("browser_window_ui.rc"));
+ setupGUI(StandardWindowOption::Default, ("browserwindowui.rc"));
// Get lists of the actions' associated widgets.
QList<QWidget*> userAgentAssociatedWidgetsPointerList = userAgentPrivacyBrowserActionPointer->associatedWidgets();
// 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;
searchEngineLabelPointer = generalSettingsUi.searchEngineLabel;
downloadLocationComboBoxPointer = generalSettingsUi.kcfg_downloadLocation;
QPushButton *browseButtonPointer = generalSettingsUi.browseButton;
+ QListWidget *spellCheckListWidgetPointer = spellCheckSettingsUi.spellCheckListWidget;
// Populate the combo box labels.
updateUserAgentLabel(userAgentComboBoxPointer->currentText());
// 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);
// 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()));
}