From 425fed98271cd951cddef9904e5e271f0fb76fc1 Mon Sep 17 00:00:00 2001 From: Soren Stoutner Date: Wed, 19 Jul 2023 15:54:18 -0700 Subject: [PATCH] Add a default zoom action. https://redmine.stoutner.com/issues/1044 --- src/dialogs/DomainSettingsDialog.cpp | 10 +- src/privacybrowser.1 | 6 +- src/ui.rcs/browserwindowui.rc | 2 + src/widgets/PrivacyWebEngineView.cpp | 13 ++- src/widgets/PrivacyWebEngineView.h | 1 + src/widgets/TabWidget.cpp | 12 ++- src/widgets/TabWidget.h | 3 +- src/windows/BrowserWindow.cpp | 152 +++++++++++++++++---------- src/windows/BrowserWindow.h | 10 +- 9 files changed, 134 insertions(+), 75 deletions(-) diff --git a/src/dialogs/DomainSettingsDialog.cpp b/src/dialogs/DomainSettingsDialog.cpp index 4aef5ce..82f0f64 100644 --- a/src/dialogs/DomainSettingsDialog.cpp +++ b/src/dialogs/DomainSettingsDialog.cpp @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with Privacy Browser PC. If not, see . - */ + // */ // Application headers. #include "DomainSettingsDialog.h" @@ -322,11 +322,17 @@ void DomainSettingsDialog::domainSelected(const QModelIndex &modelIndex) const { // Display the default zoom factor. customZoomFactorSpinBoxPointer->setValue(Settings::zoomFactor()); + + // Use the default palette. + zoomFactorWidgetPointer->setPalette(defaultPalette); } else // Custom zoom factor is selected. { // Display the custom zoom factor from the domain settings. customZoomFactorSpinBoxPointer->setValue(modelIndex.siblingAtColumn(domainsTableModelPointer->fieldIndex(DomainsDatabase::CUSTOM_ZOOM_FACTOR)).data().toDouble()); + + // Use the highlighted palette. + zoomFactorWidgetPointer->setPalette(highlightedPalette); } // Set the initial status of the custom zoom factor spin box. @@ -672,7 +678,7 @@ void DomainSettingsDialog::zoomFactorComboBoxChanged(const int &newIndex) const // Display the custom zoom factor from the domain settings. customZoomFactorSpinBoxPointer->setValue(modelIndex.siblingAtColumn(domainsTableModelPointer->fieldIndex(DomainsDatabase::CUSTOM_ZOOM_FACTOR)).data().toDouble()); - // Set the palette. + // Use the highlighted palette. zoomFactorWidgetPointer->setPalette(highlightedPalette); } diff --git a/src/privacybrowser.1 b/src/privacybrowser.1 index d43f399..19f6e78 100644 --- a/src/privacybrowser.1 +++ b/src/privacybrowser.1 @@ -51,12 +51,12 @@ Privacy Browser is a web browser focused on user privacy. It uses Qt WebEngine .\" Help. `.TP` is "Tag Paragraph". `.BR` is "Bold alternating Roman (not bold)". .TP .BR -h ", " --help -Displays help on commandline options. +Displays help for command line options. .\" Help all. `.TP` is "Tag Paragraph". `.B` is "Bold". .TP .B --help-all -Displays help including Qt specific options. +Displays help, including Qt specific options. .\" Version. `.TP` is "Tag Paragraph". `.BR` is "Bold alternating Roman (not bold)". .TP @@ -73,7 +73,7 @@ Show author information. .B --license Show license information. -.\" Desktop File Name. `.TP` is "Tag Paragraph". `.Bi` is "Bold alternating Italic (underlined)". +.\" Desktop File Name. `.TP` is "Tag Paragraph". `.BI` is "Bold alternating Italic (underlined)". .TP .BI --desktopfile " file" The base file name of the desktop entry for this application. diff --git a/src/ui.rcs/browserwindowui.rc b/src/ui.rcs/browserwindowui.rc index a1f54df..7a9e090 100644 --- a/src/ui.rcs/browserwindowui.rc +++ b/src/ui.rcs/browserwindowui.rc @@ -38,6 +38,8 @@ + + diff --git a/src/widgets/PrivacyWebEngineView.cpp b/src/widgets/PrivacyWebEngineView.cpp index 37c26bf..38b03c3 100644 --- a/src/widgets/PrivacyWebEngineView.cpp +++ b/src/widgets/PrivacyWebEngineView.cpp @@ -180,12 +180,12 @@ void PrivacyWebEngineView::applyDomainSettings(const QString &hostname, const bo if (domainQuery.value(DomainsDatabase::ZOOM_FACTOR).toInt()) { // Store the current zoom factor. - setZoomFactor(domainQuery.value(DomainsDatabase::CUSTOM_ZOOM_FACTOR).toDouble()); + defaultZoomFactor = domainQuery.value(DomainsDatabase::CUSTOM_ZOOM_FACTOR).toDouble(); } else { - // Reset the current zoom factor. - setZoomFactor(Settings::zoomFactor()); + // Store the current zoom factor. + defaultZoomFactor = Settings::zoomFactor(); } } else // The hostname does not have domain settings. @@ -205,10 +205,13 @@ void PrivacyWebEngineView::applyDomainSettings(const QString &hostname, const bo // Set the user agent. webEngineProfilePointer->setHttpUserAgent(UserAgentHelper::getUserAgentFromDatabaseName(Settings::userAgent())); - // Set the zoom factor. - setZoomFactor(Settings::zoomFactor()); + // Store the zoom factor. + defaultZoomFactor = Settings::zoomFactor(); } + // Set the current zoom factor. + setZoomFactor(defaultZoomFactor); + // Reload the website if requested. if (reloadWebsite) reload(); diff --git a/src/widgets/PrivacyWebEngineView.h b/src/widgets/PrivacyWebEngineView.h index 061f657..c0c4713 100644 --- a/src/widgets/PrivacyWebEngineView.h +++ b/src/widgets/PrivacyWebEngineView.h @@ -37,6 +37,7 @@ public: // The public variables. std::list *cookieListPointer = new std::list; + double defaultZoomFactor = 1.00; QString domainSettingsName = QStringLiteral(""); QIcon favoriteIcon = QIcon::fromTheme(QStringLiteral("globe")); bool findCaseSensitive = false; diff --git a/src/widgets/TabWidget.cpp b/src/widgets/TabWidget.cpp index 2b14018..dd11a67 100644 --- a/src/widgets/TabWidget.cpp +++ b/src/widgets/TabWidget.cpp @@ -344,12 +344,12 @@ PrivacyWebEngineView* TabWidget::addTab(const bool removeUrlLineEditFocus, const } }); - // Update the zoom factor when changed by CTRL-Scrolling. This can be modified when is fixed. + // Update the zoom actions when changed by CTRL-Scrolling. This can be modified when is fixed. connect(webEnginePagePointer, &QWebEnginePage::contentsSizeChanged, [webEnginePagePointer, this] () { - // Only update the zoom factor action text if this is the current tab. + // Only update the zoom actions if this is the current tab. if (webEnginePagePointer == currentWebEnginePagePointer) - emit updateZoomFactorAction(webEnginePagePointer->zoomFactor()); + emit updateZoomActions(webEnginePagePointer->zoomFactor()); }); // Display find text results. @@ -1071,12 +1071,13 @@ void TabWidget::updateUiFromWebEngineView(const PrivacyWebEngineView *privacyWeb if (privacyWebEngineViewPointer == currentPrivacyWebEngineViewPointer) { // Update the UI. + emit updateDefaultZoomFactor(currentPrivacyWebEngineViewPointer->defaultZoomFactor); emit updateDomainSettingsIndicator(currentPrivacyWebEngineViewPointer->domainSettingsName != QLatin1String("")); emit updateJavaScriptAction(currentWebEngineSettingsPointer->testAttribute(QWebEngineSettings::JavascriptEnabled)); emit updateLocalStorageAction(currentPrivacyWebEngineViewPointer->localStorageEnabled); emit updateDomStorageAction(currentWebEngineSettingsPointer->testAttribute(QWebEngineSettings::LocalStorageEnabled)); emit updateUserAgentActions(currentWebEngineProfilePointer->httpUserAgent(), true); - emit updateZoomFactorAction(currentPrivacyWebEngineViewPointer->zoomFactor()); + emit updateZoomActions(currentPrivacyWebEngineViewPointer->zoomFactor()); } } @@ -1094,6 +1095,7 @@ void TabWidget::updateUiWithTabSettings() emit clearUrlLineEditFocus(); // Update the actions. + emit updateDefaultZoomFactor(currentPrivacyWebEngineViewPointer->defaultZoomFactor); emit updateBackAction(currentWebEngineHistoryPointer->canGoBack()); emit updateCookiesAction(currentPrivacyWebEngineViewPointer->cookieListPointer->size()); emit updateDomStorageAction(currentWebEngineSettingsPointer->testAttribute(QWebEngineSettings::LocalStorageEnabled)); @@ -1101,7 +1103,7 @@ void TabWidget::updateUiWithTabSettings() emit updateJavaScriptAction(currentWebEngineSettingsPointer->testAttribute(QWebEngineSettings::JavascriptEnabled)); emit updateLocalStorageAction(currentPrivacyWebEngineViewPointer->localStorageEnabled); emit updateUserAgentActions(currentWebEngineProfilePointer->httpUserAgent(), true); - emit updateZoomFactorAction(currentPrivacyWebEngineViewPointer->zoomFactor()); + emit updateZoomActions(currentPrivacyWebEngineViewPointer->zoomFactor()); // Update the URL. emit updateWindowTitle(currentPrivacyWebEngineViewPointer->title()); diff --git a/src/widgets/TabWidget.h b/src/widgets/TabWidget.h index ab21a4c..8af3113 100644 --- a/src/widgets/TabWidget.h +++ b/src/widgets/TabWidget.h @@ -78,6 +78,7 @@ signals: void showProgressBar(const int &progress) const; void updateBackAction(const bool &isEnabled) const; void updateCookiesAction(const int numberOfCookies) const; + void updateDefaultZoomFactor(const double newDefaultZoomFactor) const; void updateDomStorageAction(const bool &isEnabled) const; void updateDomainSettingsIndicator(const bool status) const; void updateFindText(const QString &text, const bool findCaseSensitive) const; @@ -89,7 +90,7 @@ signals: void updateUrlLineEdit(const QUrl &newUrl) const; void updateUserAgentActions(const QString &userAgent, const bool &updateCustomUserAgentStatus) const; void updateWindowTitle(const QString &title) const; - void updateZoomFactorAction(const double &zoomFactor) const; + void updateZoomActions(const double &zoomFactor) const; public Q_SLOTS: // The public slots. diff --git a/src/windows/BrowserWindow.cpp b/src/windows/BrowserWindow.cpp index 236b8b4..1277e77 100644 --- a/src/windows/BrowserWindow.cpp +++ b/src/windows/BrowserWindow.cpp @@ -62,8 +62,8 @@ BrowserWindow::BrowserWindow(bool firstWindow) : KXmlGuiWindow() KStandardAction::print(tabWidgetPointer, SLOT(print()), actionCollectionPointer); QAction *printPreviewActionPointer = KStandardAction::printPreview(tabWidgetPointer, SLOT(printPreview()), actionCollectionPointer); KStandardAction::quit(qApp, SLOT(closeAllWindows()), actionCollectionPointer); - KStandardAction::zoomIn(this, SLOT(incrementZoom()), actionCollectionPointer); - KStandardAction::zoomOut(this, SLOT(decrementZoom()), actionCollectionPointer); + zoomInActionPointer = KStandardAction::zoomIn(this, SLOT(incrementZoom()), actionCollectionPointer); + zoomOutActionPointer = KStandardAction::zoomOut(this, SLOT(decrementZoom()), actionCollectionPointer); KStandardAction::redisplay(this, SLOT(refresh()), actionCollectionPointer); fullScreenActionPointer = KStandardAction::fullScreen(this, SLOT(toggleFullScreen()), this, actionCollectionPointer); QAction *backActionPointer = KStandardAction::back(this, SLOT(back()), actionCollectionPointer); @@ -77,6 +77,7 @@ BrowserWindow::BrowserWindow(bool firstWindow) : KXmlGuiWindow() // Add the custom actions. QAction *newTabActionPointer = actionCollectionPointer->addAction(QLatin1String("new_tab")); QAction *newWindowActionPointer = actionCollectionPointer->addAction(QLatin1String("new_window")); + zoomDefaultActionPointer = actionCollectionPointer->addAction(QLatin1String("zoom_default")); QAction *reloadAndBypassCacheActionPointer = actionCollectionPointer->addAction(QLatin1String("reload_and_bypass_cache")); viewSourceActionPointer = actionCollectionPointer->addAction(QLatin1String("view_source")); viewSourceInNewTabActionPointer = actionCollectionPointer->addAction(QLatin1String("view_source_in_new_tab")); @@ -158,6 +159,7 @@ BrowserWindow::BrowserWindow(bool firstWindow) : KXmlGuiWindow() viewSourceInNewTabActionPointer->setText(i18nc("View source in new tab action", "View Source in New Tab")); newTabActionPointer->setText(i18nc("New tab action", "New Tab")); newWindowActionPointer->setText(i18nc("New window action", "New Window")); + zoomDefaultActionPointer->setText(i18nc("Zoom default action", "Zoom Default")); reloadAndBypassCacheActionPointer->setText(i18nc("Reload and bypass cache action", "Reload and Bypass Cache")); userAgentPrivacyBrowserActionPointer->setText(userAgentHelperPointer->PRIVACY_BROWSER_TRANSLATED); userAgentWebEngineDefaultActionPointer->setText(userAgentHelperPointer->WEB_ENGINE_DEFAULT_TRANSLATED); @@ -185,6 +187,7 @@ BrowserWindow::BrowserWindow(bool firstWindow) : KXmlGuiWindow() // The toolbar icons don't pick up unless the size is explicit, probably because the toolbar ends up being an intermediate size. newTabActionPointer->setIcon(QIcon::fromTheme(QLatin1String("tab-new"))); newWindowActionPointer->setIcon(QIcon::fromTheme(QLatin1String("window-new"))); + zoomDefaultActionPointer->setIcon(QIcon::fromTheme(QLatin1String("zoom-fit-best"))); reloadAndBypassCacheActionPointer->setIcon(QIcon::fromTheme(QLatin1String("view-refresh"))); viewSourceActionPointer->setIcon(QIcon::fromTheme(QLatin1String("view-choose"), QIcon::fromTheme(QLatin1String("accessories-text-editor")))); viewSourceInNewTabActionPointer->setIcon(QIcon::fromTheme(QLatin1String("view-choose"), QIcon::fromTheme(QLatin1String("accessories-text-editor")))); @@ -216,6 +219,7 @@ BrowserWindow::BrowserWindow(bool firstWindow) : KXmlGuiWindow() // Create the key sequences. QKeySequence ctrlTKeySequence = QKeySequence(i18nc("The open new tab key sequence.", "Ctrl+T")); QKeySequence ctrlNKeySequence = QKeySequence(i18nc("The open new window key sequence.", "Ctrl+N")); + QKeySequence ctrl0KeySequence = QKeySequence(i18nc("The zoom default key sequence.", "Ctrl+0")); QKeySequence ctrlF5KeySequence = QKeySequence(i18nc("The reload and bypass cache key sequence.", "Ctrl+F5")); QKeySequence ctrlUKeySequence = QKeySequence(i18nc("The view source key sequence.", "Ctrl+U")); QKeySequence ctrlShiftUKeySequence = QKeySequence(i18nc("The view source in new tab key sequence.", "Ctrl+Shift+U")); @@ -243,6 +247,7 @@ BrowserWindow::BrowserWindow(bool firstWindow) : KXmlGuiWindow() // Set the action key sequences. actionCollectionPointer->setDefaultShortcut(newTabActionPointer, ctrlTKeySequence); actionCollectionPointer->setDefaultShortcut(newWindowActionPointer, ctrlNKeySequence); + actionCollectionPointer->setDefaultShortcut(zoomDefaultActionPointer, ctrl0KeySequence); actionCollectionPointer->setDefaultShortcut(reloadAndBypassCacheActionPointer, ctrlF5KeySequence); actionCollectionPointer->setDefaultShortcut(viewSourceActionPointer, ctrlUKeySequence); actionCollectionPointer->setDefaultShortcut(viewSourceInNewTabActionPointer, ctrlShiftUKeySequence); @@ -270,6 +275,7 @@ BrowserWindow::BrowserWindow(bool firstWindow) : KXmlGuiWindow() // Execute the actions. connect(newTabActionPointer, SIGNAL(triggered()), tabWidgetPointer, SLOT(addTab())); connect(newWindowActionPointer, SIGNAL(triggered()), this, SLOT(newWindow())); + connect(zoomDefaultActionPointer, SIGNAL(triggered()), this, SLOT(zoomDefault())); connect(reloadAndBypassCacheActionPointer, SIGNAL(triggered()), this, SLOT(reloadAndBypassCache())); connect(viewSourceActionPointer, SIGNAL(triggered()), this, SLOT(toggleViewSource())); connect(viewSourceInNewTabActionPointer, SIGNAL(triggered()), this, SLOT(toggleViewSourceInNewTab())); @@ -279,7 +285,7 @@ BrowserWindow::BrowserWindow(bool firstWindow) : KXmlGuiWindow() // Update the on-the-fly menus. connect(tabWidgetPointer, SIGNAL(updateUserAgentActions(QString, bool)), this, SLOT(updateUserAgentActions(QString, bool))); - connect(tabWidgetPointer, SIGNAL(updateZoomFactorAction(double)), this, SLOT(updateZoomFactorAction(double))); + connect(tabWidgetPointer, SIGNAL(updateZoomActions(double)), this, SLOT(updateZoomActions(double))); connect(tabWidgetPointer, SIGNAL(updateSearchEngineActions(QString, bool)), this, SLOT(updateSearchEngineActions(QString, bool))); // Apply the on-the-fly settings when selected. @@ -289,6 +295,9 @@ BrowserWindow::BrowserWindow(bool firstWindow) : KXmlGuiWindow() // Process cookie changes. connect(tabWidgetPointer, SIGNAL(updateCookiesAction(int)), this, SLOT(updateCookiesAction(int))); + // Store the default zoom factor. + connect(tabWidgetPointer, SIGNAL(updateDefaultZoomFactor(double)), this, SLOT(updateDefaultZoomFactor(double))); + // Connect the URL toolbar actions. connect(javaScriptActionPointer, SIGNAL(triggered()), this, SLOT(toggleJavaScript())); connect(localStorageActionPointer, SIGNAL(triggered()), this, SLOT(toggleLocalStorage())); @@ -403,9 +412,9 @@ BrowserWindow::BrowserWindow(bool firstWindow) : KXmlGuiWindow() // Create the status bar widgets. progressBarPointer = new QProgressBar(); - QPushButton *zoomMinusButtonPointer = new QPushButton(); + zoomMinusButtonPointer = new QPushButton(); currentZoomButtonPointer = new QPushButton(); - QPushButton *zoomPlusButtonPointer = new QPushButton(); + zoomPlusButtonPointer = new QPushButton(); // Set the button icons. zoomMinusButtonPointer->setIcon(QIcon::fromTheme(QStringLiteral("list-remove-symbolic"))); @@ -469,7 +478,7 @@ BrowserWindow::BrowserWindow(bool firstWindow) : KXmlGuiWindow() updateLocalStorageAction(Settings::localStorageEnabled()); updateDomStorageAction(Settings::domStorageEnabled()); updateUserAgentActions(UserAgentHelper::getUserAgentFromDatabaseName(Settings::userAgent()), true); - updateZoomFactorAction(Settings::zoomFactor()); + updateZoomActions(Settings::zoomFactor()); // Load the initial website if this is the first window. if (firstWindow) @@ -534,7 +543,7 @@ void BrowserWindow::decrementZoom() tabWidgetPointer->applyOnTheFlyZoomFactor(currentZoomFactor); // Update the on-the-fly action text. - updateZoomFactorAction(currentZoomFactor); + updateZoomActions(currentZoomFactor); } void BrowserWindow::escape() const @@ -635,7 +644,7 @@ void BrowserWindow::getZoomFactorFromUser() tabWidgetPointer->applyOnTheFlyZoomFactor(newZoomFactor); // Update the on-the-fly action text. - updateZoomFactorAction(newZoomFactor); + updateZoomActions(newZoomFactor); } } @@ -672,7 +681,7 @@ void BrowserWindow::incrementZoom() tabWidgetPointer->applyOnTheFlyZoomFactor(currentZoomFactor); // Update the on-the-fly action text. - updateZoomFactorAction(currentZoomFactor); + updateZoomActions(currentZoomFactor); } void BrowserWindow::loadUrlFromLineEdit(const QString &url) const @@ -1098,6 +1107,12 @@ void BrowserWindow::updateCookiesAction(const int numberOfCookies) const cookiesActionPointer->setText(i18nc("The Cookies action, which also displays the number of cookies", "Cookies - %1", numberOfCookies)); } +void BrowserWindow::updateDefaultZoomFactor(const double newDefaultZoomFactor) +{ + // Store the new default zoom factor. + defaultZoomFactor = newDefaultZoomFactor; +} + void BrowserWindow::updateDomStorageAction(const bool &isEnabled) const { // Set the action checked status. @@ -1281,6 +1296,50 @@ void BrowserWindow::updateSearchEngineActions(const QString &searchEngine, const } } +void BrowserWindow::updateSearchEngineLabel(const QString &searchEngineString) const +{ + // Update the search engine label. + searchEngineLabelPointer->setText(SearchEngineHelper::getSearchUrl(searchEngineString)); +} + +void BrowserWindow::updateUrlLineEdit(const QUrl &newUrl) +{ + // Get the new URL string. + QString newUrlString = newUrl.toString(); + + // Update the view source actions. + if (newUrlString.startsWith(QLatin1String("view-source:"))) // The source is currently being viewed. + { + // Mark the view source checkbox. + viewSourceActionPointer->setChecked(true); + + // Update the view in new tab action text. + viewSourceInNewTabActionPointer->setText(i18nc("View rendered website in new tab action", "View Rendered Website in New Tab")); + } + else // The source is not currently being viewed. + { + // Unmark the view source checkbox. + viewSourceActionPointer->setChecked(false); + + // Update the view in new tab action text. + viewSourceInNewTabActionPointer->setText(i18nc("View source in new tab action", "View Source in New Tab")); + } + + // Update the URL line edit if it does not have focus. + if (!urlLineEditPointer->hasFocus()) + { + // Update the URL line edit. + urlLineEditPointer->setText(newUrlString); + + // Set the focus if the new URL is blank. + if (newUrlString == QStringLiteral("")) + urlLineEditPointer->setFocus(); + } + + // Store the current URL. + currentUrl = newUrl; +} + void BrowserWindow::updateUserAgentActions(const QString &userAgent, const bool &updateCustomUserAgentStatus) { // Initialize the custom user agent flag. @@ -1415,70 +1474,47 @@ void BrowserWindow::updateUserAgentActions(const QString &userAgent, const bool } } -void BrowserWindow::updateZoomFactorAction(const double &zoomFactor) +void BrowserWindow::updateUserAgentLabel(const QString &userAgentDatabaseName) const { - // Set the current zoom factor. - currentZoomFactor = zoomFactor; - - // Update the zoom factor action text, formatting the double with 2 decimal places. `0` specifies no extra field width. `'0'` sets the format to not use scientific notation. - zoomFactorActionPointer->setText(ki18nc("The zoom factor action", "Zoom Factor - %1").subs(zoomFactor, 0, '0', 2).toString()); - - // Update the status bar zoom factor label. - currentZoomButtonPointer->setText(ki18nc("The status bar zoom, which is just the formatted zoom factor", "%1").subs(zoomFactor, 0, '0', 2).toString()); + // Update the user agent label. + userAgentLabelPointer->setText(UserAgentHelper::getUserAgentFromDatabaseName(userAgentDatabaseName)); } -void BrowserWindow::updateSearchEngineLabel(const QString &searchEngineString) const +void BrowserWindow::updateWindowTitle(const QString &title) { - // Update the search engine label. - searchEngineLabelPointer->setText(SearchEngineHelper::getSearchUrl(searchEngineString)); + // Update the window title. + setWindowTitle(title); } -void BrowserWindow::updateUrlLineEdit(const QUrl &newUrl) +void BrowserWindow::updateZoomActions(const double &zoomFactor) { - // Get the new URL string. - QString newUrlString = newUrl.toString(); + // Set the current zoom factor. + currentZoomFactor = zoomFactor; - // Update the view source actions. - if (newUrlString.startsWith(QLatin1String("view-source:"))) // The source is currently being viewed. - { - // Mark the view source checkbox. - viewSourceActionPointer->setChecked(true); + // Set the status of the default zoom action. + zoomDefaultActionPointer->setEnabled(currentZoomFactor != defaultZoomFactor); - // Update the view in new tab action text. - viewSourceInNewTabActionPointer->setText(i18nc("View rendered website in new tab action", "View Rendered Website in New Tab")); - } - else // The source is not currently being viewed. - { - // Unmark the view source checkbox. - viewSourceActionPointer->setChecked(false); + // Set the status of the zoom in action and button. + zoomInActionPointer->setEnabled(currentZoomFactor <= 4.99); + zoomPlusButtonPointer->setEnabled(currentZoomFactor <= 4.99); - // Update the view in new tab action text. - viewSourceInNewTabActionPointer->setText(i18nc("View source in new tab action", "View Source in New Tab")); - } + // Set the status of the zoom out action and button. + zoomMinusButtonPointer->setEnabled(currentZoomFactor > 0.25); + zoomOutActionPointer->setEnabled(currentZoomFactor > 0.25); - // Update the URL line edit if it does not have focus. - if (!urlLineEditPointer->hasFocus()) - { - // Update the URL line edit. - urlLineEditPointer->setText(newUrlString); - // Set the focus if the new URL is blank. - if (newUrlString == QStringLiteral("")) - urlLineEditPointer->setFocus(); - } + // Update the zoom factor action text, formatting the double with 2 decimal places. `0` specifies no extra field width. `'0'` sets the format to not use scientific notation. + zoomFactorActionPointer->setText(ki18nc("The zoom factor action", "Zoom Factor - %1").subs(zoomFactor, 0, '0', 2).toString()); - // Store the current URL. - currentUrl = newUrl; + // Update the status bar zoom factor label. + currentZoomButtonPointer->setText(ki18nc("The status bar zoom, which is just the formatted zoom factor", "%1").subs(zoomFactor, 0, '0', 2).toString()); } -void BrowserWindow::updateUserAgentLabel(const QString &userAgentDatabaseName) const +void BrowserWindow::zoomDefault() { - // Update the user agent label. - userAgentLabelPointer->setText(UserAgentHelper::getUserAgentFromDatabaseName(userAgentDatabaseName)); -} + // Set the new zoom factor. + tabWidgetPointer->applyOnTheFlyZoomFactor(defaultZoomFactor); -void BrowserWindow::updateWindowTitle(const QString &title) -{ - // Update the window title. - setWindowTitle(title); + // Update the on-the-fly action text. + updateZoomActions(defaultZoomFactor); } diff --git a/src/windows/BrowserWindow.h b/src/windows/BrowserWindow.h index 94afae9..a7b78d6 100644 --- a/src/windows/BrowserWindow.h +++ b/src/windows/BrowserWindow.h @@ -81,6 +81,7 @@ private Q_SLOTS: void toggleViewSource() const; void toggleViewSourceInNewTab() const; void updateCookiesAction(const int numberOfCookies) const; + void updateDefaultZoomFactor(const double newDefaultZoomFactor); void updateDomStorageAction(const bool &isEnabled) const; void updateDomainSettingsIndicator(const bool status); void updateFindText(const QString &text, const bool findCaseSensitive) const; @@ -89,11 +90,12 @@ private Q_SLOTS: void updateLocalStorageAction(const bool &isEnabled); void updateSearchEngineActions(const QString &searchEngine, const bool &updateCustomSearchEngineStatus); void updateUserAgentActions(const QString &userAgent, const bool &updateCustomUserAgentStatus); - void updateZoomFactorAction(const double &zoomFactor); + void updateZoomActions(const double &zoomFactor); void updateSearchEngineLabel(const QString &searchEngineString) const; void updateUrlLineEdit(const QUrl &newUrl); void updateUserAgentLabel(const QString &userAgentDatabaseName) const; void updateWindowTitle(const QString &title); + void zoomDefault(); private: // The private variables. @@ -104,6 +106,7 @@ private: double currentZoomFactor; bool customSearchEngineEnabled; bool customUserAgentEnabled; + double defaultZoomFactor; QAction *domStorageActionPointer; QComboBox *downloadLocationComboBoxPointer; QAction *findCaseSensitiveActionPointer; @@ -148,6 +151,11 @@ private: KToolBar *urlToolBarPointer; QAction *viewSourceActionPointer; QAction *viewSourceInNewTabActionPointer; + QAction *zoomDefaultActionPointer; QAction *zoomFactorActionPointer; + QAction *zoomInActionPointer; + QPushButton *zoomMinusButtonPointer; + QAction *zoomOutActionPointer; + QPushButton *zoomPlusButtonPointer; }; #endif -- 2.43.0