X-Git-Url: https://gitweb.stoutner.com/?p=PrivacyBrowserPC.git;a=blobdiff_plain;f=src%2FBrowserWindow.cpp;h=a2eda98e36b5a23aefcc2ca5bcb8c9ef329bf02a;hp=29fe4644feb31db29f80f92ea8bdd798e82d7862;hb=ed23757527d2d80102f87f6446b73d890a169fb4;hpb=68167c0aba46c4bd4c859b176824873ffd14a3e7 diff --git a/src/BrowserWindow.cpp b/src/BrowserWindow.cpp index 29fe464..a2eda98 100644 --- a/src/BrowserWindow.cpp +++ b/src/BrowserWindow.cpp @@ -30,6 +30,7 @@ #include // Qt framework headers. +#include #include BrowserWindow::BrowserWindow() : KXmlGuiWindow() @@ -48,6 +49,96 @@ BrowserWindow::BrowserWindow() : KXmlGuiWindow() KStandardAction::quit(qApp, SLOT(closeAllWindows()), actionCollectionPointer); KStandardAction::preferences(this, SLOT(settingsConfigure()), actionCollectionPointer); + // Add the custom actions. + userAgentPrivacyBrowserActionPointer = actionCollectionPointer->addAction(QStringLiteral("user_agent_privacy_browser")); + userAgentFirefoxLinuxActionPointer = actionCollectionPointer->addAction(QStringLiteral("user_agent_firefox_linux")); + userAgentChromiumLinuxActionPointer = actionCollectionPointer->addAction(QStringLiteral("user_agent_chromium_linux")); + userAgentFirefoxWindowsActionPointer = actionCollectionPointer->addAction(QStringLiteral("user_agent_firefox_windows")); + userAgentChromeWindowsActionPointer = actionCollectionPointer->addAction(QStringLiteral("user_agent_chrome_windows")); + userAgentEdgeWindowsActionPointer = actionCollectionPointer->addAction(QStringLiteral("user_agent_edge_windows")); + userAgentSafariMacosActionPointer = actionCollectionPointer->addAction(QStringLiteral("user_agent_safari_macos")); + userAgentCustomActionPointer = actionCollectionPointer->addAction(QStringLiteral("user_agent_custom")); + zoomFactorActionPointer = actionCollectionPointer->addAction(QStringLiteral("zoom_factor")); + searchEngineMojeekActionPointer = actionCollectionPointer->addAction(QStringLiteral("search_engine_mojeek")); + searchEngineMonoclesActionPointer = actionCollectionPointer->addAction(QStringLiteral("search_engine_monocles")); + searchEngineMetagerActionPointer = actionCollectionPointer->addAction(QStringLiteral("search_engine_metager")); + searchEngineGoogleActionPointer = actionCollectionPointer->addAction(QStringLiteral("search_engine_google")); + searchEngineBingActionPointer = actionCollectionPointer->addAction(QStringLiteral("search_engine_bing")); + searchEngineYahooActionPointer = actionCollectionPointer->addAction(QStringLiteral("search_engine_yahoo")); + searchEngineCustomActionPointer = actionCollectionPointer->addAction(QStringLiteral("search_engine_custom")); + + // Create the action groups + QActionGroup *userAgentActionGroupPointer = new QActionGroup(this); + QActionGroup *searchEngineActionGroupPointer = new QActionGroup(this); + + // Add the actions to the groups. + userAgentActionGroupPointer->addAction(userAgentPrivacyBrowserActionPointer); + userAgentActionGroupPointer->addAction(userAgentFirefoxLinuxActionPointer); + userAgentActionGroupPointer->addAction(userAgentChromiumLinuxActionPointer); + userAgentActionGroupPointer->addAction(userAgentFirefoxWindowsActionPointer); + userAgentActionGroupPointer->addAction(userAgentChromeWindowsActionPointer); + userAgentActionGroupPointer->addAction(userAgentEdgeWindowsActionPointer); + userAgentActionGroupPointer->addAction(userAgentSafariMacosActionPointer); + userAgentActionGroupPointer->addAction(userAgentCustomActionPointer); + searchEngineActionGroupPointer->addAction(searchEngineMojeekActionPointer); + searchEngineActionGroupPointer->addAction(searchEngineMonoclesActionPointer); + searchEngineActionGroupPointer->addAction(searchEngineMetagerActionPointer); + searchEngineActionGroupPointer->addAction(searchEngineGoogleActionPointer); + searchEngineActionGroupPointer->addAction(searchEngineBingActionPointer); + searchEngineActionGroupPointer->addAction(searchEngineYahooActionPointer); + searchEngineActionGroupPointer->addAction(searchEngineCustomActionPointer); + + // Set some actions to be checkable. + userAgentPrivacyBrowserActionPointer->setCheckable(true); + userAgentFirefoxLinuxActionPointer->setCheckable(true); + userAgentChromiumLinuxActionPointer->setCheckable(true); + userAgentFirefoxWindowsActionPointer->setCheckable(true); + userAgentChromeWindowsActionPointer->setCheckable(true); + userAgentEdgeWindowsActionPointer->setCheckable(true); + userAgentSafariMacosActionPointer->setCheckable(true); + userAgentCustomActionPointer->setCheckable(true); + searchEngineMojeekActionPointer->setCheckable(true); + searchEngineMonoclesActionPointer->setCheckable(true); + searchEngineMetagerActionPointer->setCheckable(true); + searchEngineGoogleActionPointer->setCheckable(true); + searchEngineBingActionPointer->setCheckable(true); + searchEngineYahooActionPointer->setCheckable(true); + searchEngineCustomActionPointer->setCheckable(true); + + // Set the non-mutable action names. + userAgentPrivacyBrowserActionPointer->setText(i18nc("@action", "Privacy Browser")); + userAgentFirefoxLinuxActionPointer->setText(i18nc("@action", "Firefox Linux")); + userAgentChromiumLinuxActionPointer->setText(i18nc("@action", "Chromium Linux")); + userAgentFirefoxWindowsActionPointer->setText(i18nc("@action", "Firefox Windows")); + userAgentChromeWindowsActionPointer->setText(i18nc("@action", "Chrome Windows")); + userAgentEdgeWindowsActionPointer->setText(i18nc("@action", "Edge Windows")); + userAgentSafariMacosActionPointer->setText(i18nc("@action", "Safari macOS")); + searchEngineMojeekActionPointer->setText(i18nc("@action", "Mojeek")); + searchEngineMonoclesActionPointer->setText(i18nc("@action", "Monocles")); + searchEngineMetagerActionPointer->setText(i18nc("@action", "MetaGer")); + searchEngineGoogleActionPointer->setText(i18nc("@action", "Google")); + searchEngineBingActionPointer->setText(i18nc("@action", "Bing")); + searchEngineYahooActionPointer->setText(i18nc("@action", "Yahoo")); + + // Update the on-the-fly menus. + connect(mainViewPointer, SIGNAL(userAgentUpdated(QString)), this, SLOT(updateOnTheFlyUserAgent(QString))); + connect(mainViewPointer, SIGNAL(zoomFactorUpdated(double)), this, SLOT(updateOnTheFlyZoomFactor(double))); + connect(mainViewPointer, SIGNAL(searchEngineUpdated(QString)), this, SLOT(updateOnTheFlySearchEngine(QString))); + + // Apply the on-the-fly settings when selected. + connect(userAgentActionGroupPointer, SIGNAL(triggered(QAction*)), mainViewPointer, SLOT(applyOnTheFlyUserAgent(QAction*))); + connect(searchEngineActionGroupPointer, SIGNAL(triggered(QAction*)), mainViewPointer, SLOT(applyOnTheFlySearchEngine(QAction*))); + + // Display dialogs. + connect(zoomFactorActionPointer, SIGNAL(triggered()), this, SLOT(getZoomFactorFromUser())); + + // Set the current zoom factor. + currentZoomFactor = Settings::zoomFactor(); + + // Initialize the on-the-fly menus, as the slot connections had not been created when MainView was constructed. + updateOnTheFlyZoomFactor(currentZoomFactor); + updateOnTheFlySearchEngine(Settings::searchEngine()); + // Update the status bar with the URL when a link is hovered. connect(mainViewPointer, SIGNAL(linkHovered(QString)), this, SLOT(updateStatusBar(QString))); @@ -61,6 +152,29 @@ void BrowserWindow::fileNew() const (new BrowserWindow)->show(); } +void BrowserWindow::getZoomFactorFromUser() +{ + // Create an OK flag. + bool okClicked; + + // Display a dialog to get the new zoom factor from the user. Format the double to display two decimals and have a 0.25 step. + double newZoomFactor = QInputDialog::getDouble(this, i18nc("The tile of the on-the-fly zoom factor dialog", "On-The-Fly Zoom Factor"), + i18nc("The instruction text of the on-the-fly zoom factor dialog", "Enter a zoom factor between 0.25 and 5.00"), + currentZoomFactor, .025, 5.00, 2, &okClicked, Qt::WindowFlags(), 0.25); + + if (okClicked) + { + // Update the current zoom factor. + currentZoomFactor = newZoomFactor; + + // Set the new zoom factor. + mainViewPointer->applyOnTheFlyZoomFactor(newZoomFactor); + + // Update the on-the-fly action text. + updateOnTheFlyZoomFactor(newZoomFactor); + } +} + void BrowserWindow::settingsConfigure() { // Check to make sure the dialog box isn't already displayed. @@ -114,6 +228,133 @@ void BrowserWindow::settingsConfigure() } } +void BrowserWindow::updateOnTheFlySearchEngine(const QString &searchEngine) const +{ + // Initialize the custom search engine flag. + bool customSearchEngine = false; + + if (searchEngine == "Mojeek") // Mojeek. + { + searchEngineMojeekActionPointer->setChecked(true); + } + else if (searchEngine == "Monocles") // Monocles. + { + searchEngineMonoclesActionPointer->setChecked(true); + } + else if (searchEngine == "MetaGer") // MetaGer. + { + searchEngineMetagerActionPointer->setChecked(true); + } + else if (searchEngine == "Google") // Google. + { + searchEngineGoogleActionPointer->setChecked(true); + } + else if (searchEngine == "Bing") // Bing. + { + searchEngineBingActionPointer->setChecked(true); + } + else if (searchEngine == "Yahoo") // Yahoo. + { + searchEngineYahooActionPointer->setChecked(true); + } + else // Custom search engine. + { + // Check the user agent. + searchEngineCustomActionPointer->setChecked(true); + + // Set the custom search engine flag. + customSearchEngine = true; + } + + + // Format the custom search engine. + if (customSearchEngine) + { + // Enable the custom search engine. + searchEngineCustomActionPointer->setEnabled(true); + + // Set the custom search engine text. + searchEngineCustomActionPointer->setText(searchEngine); + } + else + { + // Disable the custom search engine. + searchEngineCustomActionPointer->setEnabled(false); + + // Reset the custom search engine text. + searchEngineCustomActionPointer->setText(i18nc("@action", "Custom")); + } +} + +void BrowserWindow::updateOnTheFlyUserAgent(const QString &userAgent) const +{ + // Initialize the custom user agent flag. + bool customUserAgent = false; + + // Check the indicated on-the-fly user agent. + if (userAgent == "Privacy Browser") // Privacy Browser. + { + userAgentPrivacyBrowserActionPointer->setChecked(true); + } + else if (userAgent == "Firefox Linux") // Firefox Linux. + { + userAgentFirefoxLinuxActionPointer->setChecked(true); + } + else if (userAgent == "Chromium Linux") // Chromium Linux. + { + userAgentChromiumLinuxActionPointer->setChecked(true); + } + else if (userAgent == "Firefox Windows") // Firefox Windows. + { + userAgentFirefoxWindowsActionPointer->setChecked(true); + } + else if (userAgent == "Chrome Windows") // Chrome Windows. + { + userAgentChromeWindowsActionPointer->setChecked(true); + } + else if (userAgent == "Edge Windows") // Edge Windows. + { + userAgentEdgeWindowsActionPointer->setChecked(true); + } + else if (userAgent == "Safari macOS") // Safari macOS. + { + userAgentSafariMacosActionPointer->setChecked(true); + } + else // Custom user agent. + { + // Check the user agent. + userAgentCustomActionPointer->setChecked(true); + + // Set the custom user agent flag. + customUserAgent = true; + } + + + // Format the custom user agent. + if (customUserAgent) + { + // Enable the custom user agent. + userAgentCustomActionPointer->setEnabled(true); + + // Set the custom user agent text. + userAgentCustomActionPointer->setText(userAgent); + } + else + { + // Disable the custom user agent. + userAgentCustomActionPointer->setEnabled(false); + + // Reset the custom user agent text. + userAgentCustomActionPointer->setText(i18nc("@action", "Custom")); + } +} + +void BrowserWindow::updateOnTheFlyZoomFactor(const double &zoomFactor) const +{ + // Update the zoom factor action text, formatting the double with 2 decimal places. + zoomFactorActionPointer->setText(ki18nc("@action", "Zoom Factor - %1").subs(zoomFactor, 0, '0', 2).toString()); +} + void BrowserWindow::updateSearchEngineLabel(const QString &searchEngineString) const { // Update the search engine label.