]> gitweb.stoutner.com Git - PrivacyBrowserPC.git/blobdiff - src/BrowserWindow.cpp
Add on-the-fly zoom factor.
[PrivacyBrowserPC.git] / src / BrowserWindow.cpp
index 29fe4644feb31db29f80f92ea8bdd798e82d7862..a2eda98e36b5a23aefcc2ca5bcb8c9ef329bf02a 100644 (file)
@@ -30,6 +30,7 @@
 #include <KConfigDialog>
 
 // Qt framework headers.
+#include <QInputDialog>
 #include <QStatusBar>
 
 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.