Add a progress bar.
authorSoren Stoutner <soren@stoutner.com>
Wed, 30 Mar 2022 23:25:09 +0000 (16:25 -0700)
committerSoren Stoutner <soren@stoutner.com>
Wed, 30 Mar 2022 23:25:09 +0000 (16:25 -0700)
src/BrowserView.ui
src/views/BrowserView.cpp
src/views/BrowserView.h
src/windows/BrowserWindow.cpp
src/windows/BrowserWindow.h

index 9d7a535b5b942e224563c4a1e2ac9cebe7773293..11219fafbe48bd6b31d6160dc7f3f408bfd78b10 100644 (file)
@@ -20,9 +20,9 @@
 
 <ui version="4.0">
     <class>BrowserView</class>
-
+    <!-- Main widget. -->
     <widget class="QWidget" name="BrowserView">
-        <!-- Main widget. -->
+        <!-- Main layout. -->
         <layout class="QVBoxLayout">
             <!-- Set the spacing between items to 0. -->
             <property name="spacing">
index d190dbec3bcdc4ab4525bf48b19e9a93d32a20c7..21e1493aaa63c7482314936ac664e85f889d8825 100644 (file)
@@ -49,10 +49,13 @@ BrowserView::BrowserView(QWidget *parent) : QWidget(parent)
     webEngineProfilePointer = webEnginePagePointer->profile();
     webEngineSettingsPointer = webEngineViewPointer->settings();
 
-    // Update the URL line edit from the webengine view.
-    connect(webEngineViewPointer, SIGNAL(loadStarted()), this, SLOT(updateInterface()));
-    connect(webEngineViewPointer, SIGNAL(loadProgress(const int)), this, SLOT(updateInterface()));
-    connect(webEngineViewPointer, SIGNAL(loadFinished(const bool)), this, SLOT(updateInterface()));
+    // Update the URL line edit when the URL changes.
+    connect(webEngineViewPointer, SIGNAL(urlChanged(const QUrl)), this, SLOT(updateUrl(const QUrl)));
+
+    // Update the progress bar.
+    connect(webEngineViewPointer, SIGNAL(loadStarted()), this, SLOT(loadStarted()));
+    connect(webEngineViewPointer, SIGNAL(loadProgress(const int)), this, SLOT(loadProgress(const int)));
+    connect(webEngineViewPointer, SIGNAL(loadFinished(const bool)), this, SLOT(loadFinished()));
 
     // Instantiate the mouse event filter pointer.
     MouseEventFilter *mouseEventFilterPointer = new MouseEventFilter(webEngineViewPointer);
@@ -99,8 +102,8 @@ void BrowserView::applyApplicationSettings()
     // Set the search engine URL.
     searchEngineUrl = SearchEngineHelper::getSearchUrl(Settings::searchEngine());
 
-    // Emit the search engine updated signal, which causes the on-the-fly menu to be updated.
-    emit searchEngineUpdated(Settings::searchEngine());
+    // Emit the update search engine actions signal.
+    emit updateSearchEngineActions(Settings::searchEngine());
 }
 
 // This exists as a separate function from `applyDomainSettings()` so it can be listed as a slot and function without the need for a boolean argument.
@@ -198,10 +201,10 @@ void BrowserView::applyDomainSettings(const QString &hostname, const bool reload
         emit updateDomainSettingsIndicator(false);
     }
 
-    // Emit the on-the-fly menu update signals.
+    // Emit the update actions signals.
     emit updateJavaScriptAction(webEngineSettingsPointer->testAttribute(QWebEngineSettings::JavascriptEnabled));
-    emit userAgentUpdated(webEngineProfilePointer->httpUserAgent());
-    emit zoomFactorUpdated(Settings::zoomFactor());
+    emit updateUserAgentActions(webEngineProfilePointer->httpUserAgent());
+    emit updateZoomFactorAction(webEngineViewPointer->zoomFactor());
 
     // Reload the website if requested.
     if (reloadWebsite)
@@ -265,6 +268,12 @@ void BrowserView::home() const
     webEngineViewPointer->load(QUrl::fromUserInput(Settings::homepage()));
 }
 
+void BrowserView::loadFinished() const
+{
+    // Hide the progress bar.
+    emit hideProgressBar();
+}
+
 void BrowserView::loadInitialWebsite()
 {
     // Apply the application settings.
@@ -286,6 +295,18 @@ void BrowserView::loadInitialWebsite()
     }
 }
 
+void BrowserView::loadProgress(const int &progress) const
+{
+    // Show the progress bar.
+    emit showProgressBar(progress);
+}
+
+void BrowserView::loadStarted() const
+{
+    // Show the progress bar.
+    emit showProgressBar(0);
+}
+
 void BrowserView::loadUrlFromLineEdit(QString url) const
 {
     // Decide if the text is more likely to be a URL or a search.
@@ -337,10 +358,10 @@ void BrowserView::toggleJavaScript() const
     webEngineViewPointer->reload();
 }
 
-void BrowserView::updateInterface() const
+void BrowserView::updateUrl(const QUrl &url) const
 {
     // Update the URL line edit.
-    emit updateUrlLineEdit(webEngineViewPointer->url().toString());
+    emit updateUrlLineEdit(url.toString());
 
     // Update the status of the forward and back buttons.
     emit updateBackAction(webEngineHistoryPointer->canGoBack());
index 6088a6384cf85e79f497045c2fdd0a87bf463e73..143db41d166d1c3e50a22394114fcaca41a86148 100644 (file)
 #ifndef BROWSERVIEW_H
 #define BROWSERVIEW_H
 
+// KDE Framework headers.
+#include <KLineEdit>
+
 // Qt framework headers.
 #include <QPushButton>
 #include <QWebEngineHistory>
 #include <QWebEngineSettings>
 #include <QWebEngineView>
 
-// KDE Framework headers.
-#include <KLineEdit>
-
 class BrowserView : public QWidget
 {
     // Include the Q_OBJECT macro.
@@ -44,15 +44,17 @@ public:
 
 signals:
     // The signals.
+    void hideProgressBar() const;
     void linkHovered(const QString &linkUrl) const;
-    void userAgentUpdated(const QString &userAgent) const;  // TODO.  Possibly rename.
-    void searchEngineUpdated(const QString &searchEngine) const;  //TODO.  Possibly rename.
+    void showProgressBar(const int &progress) const;
     void updateBackAction(const bool &isEnabled) const;
     void updateDomainSettingsIndicator(const bool status) const;
     void updateForwardAction(const bool &isEnabled) const;
     void updateJavaScriptAction(const bool &isEnabled) const;
+    void updateSearchEngineActions(const QString &searchEngine) const;
     void updateUrlLineEdit(const QString &newUrl) const;
-    void zoomFactorUpdated(const double &zoomFactor) const;  //TODO.  Possibly rename.
+    void updateUserAgentActions(const QString &userAgent) const;
+    void updateZoomFactorAction(const double &zoomFactor) const;
 
 public Q_SLOTS:
     // The public slots.
@@ -70,8 +72,11 @@ public Q_SLOTS:
 
 private Q_SLOTS:
     // The private slots.
+    void loadFinished() const;
+    void loadProgress(const int &progress) const;
+    void loadStarted() const;
     void pageLinkHovered(const QString &linkUrl) const;
-    void updateInterface() const;
+    void updateUrl(const QUrl &url) const;
 
 private:
     // The private variables.
index 2d647948f21f8663a2b23d4aa3e5aa67860c479f..03ababcb877893de2941c9cd409d92bd4d8d45e3 100644 (file)
@@ -149,9 +149,9 @@ BrowserWindow::BrowserWindow() : KXmlGuiWindow()
     domainSettingsActionPointer->setIcon(QIcon::fromTheme(QStringLiteral("network-server-symbolic")));
 
     // Update the on-the-fly menus.
-    connect(browserViewPointer, SIGNAL(userAgentUpdated(QString)), this, SLOT(updateOnTheFlyUserAgent(QString)));
-    connect(browserViewPointer, SIGNAL(zoomFactorUpdated(double)), this, SLOT(updateOnTheFlyZoomFactor(double)));
-    connect(browserViewPointer, SIGNAL(searchEngineUpdated(QString)), this, SLOT(updateOnTheFlySearchEngine(QString)));
+    connect(browserViewPointer, SIGNAL(updateUserAgentActions(QString)), this, SLOT(updateUserAgentActions(QString)));
+    connect(browserViewPointer, SIGNAL(updateZoomFactorAction(double)), this, SLOT(updateZoomFactorAction(double)));
+    connect(browserViewPointer, SIGNAL(updateSearchEngineActions(QString)), this, SLOT(updateSearchEngineActions(QString)));
 
     // Apply the on-the-fly settings when selected.
     connect(userAgentActionGroupPointer, SIGNAL(triggered(QAction*)), browserViewPointer, SLOT(applyOnTheFlyUserAgent(QAction*)));
@@ -192,9 +192,19 @@ BrowserWindow::BrowserWindow() : KXmlGuiWindow()
     // Get a handle for the status bar.
     QStatusBar *statusBarPointer = statusBar();
 
+    // Create a progress bar.
+    progressBarPointer = new QProgressBar();
+
+    // Add the progress bar to to the status bar.
+    statusBarPointer->addPermanentWidget(progressBarPointer);
+
     // Update the status bar with the URL when a link is hovered.
     connect(browserViewPointer, SIGNAL(linkHovered(QString)), statusBarPointer, SLOT(showMessage(QString)));
 
+    // Update the progress bar.
+    connect(browserViewPointer, SIGNAL(showProgressBar(const int)), this, SLOT(showProgressBar(const int)));
+    connect(browserViewPointer, SIGNAL(hideProgressBar()), progressBarPointer, SLOT(hide()));
+
     // Get the URL line edit palettes.
     noDomainSettingsPalette = urlLineEditPointer->palette();
     domainSettingsPalette = urlLineEditPointer->palette();
@@ -253,7 +263,7 @@ void BrowserWindow::getZoomFactorFromUser()
         browserViewPointer->applyOnTheFlyZoomFactor(newZoomFactor);
 
         // Update the on-the-fly action text.
-        updateOnTheFlyZoomFactor(newZoomFactor);
+        updateZoomFactorAction(newZoomFactor);
     }
 }
 
@@ -305,6 +315,15 @@ void BrowserWindow::refresh() const
     browserViewPointer->refresh();
 }
 
+void BrowserWindow::showProgressBar(const int &progress) const
+{
+    // Set the progress bar value.
+    progressBarPointer->setValue(progress);
+
+    // Show the progress bar.
+    progressBarPointer->show();
+}
+
 void BrowserWindow::toggleJavaScript() const
 {
     // Remove the focus from the URL line edit.
@@ -409,7 +428,7 @@ void BrowserWindow::updateJavaScriptAction(const bool &isEnabled) const
     else javaScriptActionPointer->setIcon(QIcon(":/icons/privacy-mode"));
 }
 
-void BrowserWindow::updateOnTheFlySearchEngine(const QString &searchEngine) const
+void BrowserWindow::updateSearchEngineActions(const QString &searchEngine) const
 {
     // Initialize the custom search engine flag.
     bool customSearchEngine = false;
@@ -466,7 +485,7 @@ void BrowserWindow::updateOnTheFlySearchEngine(const QString &searchEngine) cons
     }
 }
 
-void BrowserWindow::updateOnTheFlyUserAgent(const QString &userAgent) const
+void BrowserWindow::updateUserAgentActions(const QString &userAgent) const
 {
     // Initialize the custom user agent flag.
     bool customUserAgent = false;
@@ -508,7 +527,7 @@ void BrowserWindow::updateOnTheFlyUserAgent(const QString &userAgent) const
     }
 }
 
-void BrowserWindow::updateOnTheFlyZoomFactor(const double &zoomFactor)
+void BrowserWindow::updateZoomFactorAction(const double &zoomFactor)
 {
     // Set the current zoom factor.
     currentZoomFactor = zoomFactor;
index 4099d8da32ab6dc81df25821d6fefa583bc996b1..02978d45add29c8cee51e4bc49cec670ee387e3b 100644 (file)
@@ -29,6 +29,7 @@
 
 // Qt toolkit headers.
 #include <QLabel>
+#include <QProgressBar>
 
 class BrowserWindow : public KXmlGuiWindow
 {
@@ -53,12 +54,13 @@ private Q_SLOTS:
     void openDomainSettings() const;
     void refresh() const;
     void settingsConfigure();
+    void showProgressBar(const int &progress) const;
     void toggleJavaScript() const;
     void updateDomainSettingsIndicator(const bool &status) const;
     void updateJavaScriptAction(const bool &isEnabled) const;
-    void updateOnTheFlySearchEngine(const QString &searchEngine) const;
-    void updateOnTheFlyUserAgent(const QString &userAgent) const;
-    void updateOnTheFlyZoomFactor(const double &zoomFactor);
+    void updateSearchEngineActions(const QString &searchEngine) const;
+    void updateUserAgentActions(const QString &userAgent) const;
+    void updateZoomFactorAction(const double &zoomFactor);
     void updateSearchEngineLabel(const QString &searchEngineString) const;
     void updateUrlLineEdit(const QString &newUrl) const;
     void updateUserAgentLabel(const QString &userAgentDatabaseName) const;
@@ -72,6 +74,7 @@ private:
     double currentZoomFactor;
     QAction *javaScriptActionPointer;
     QPalette noDomainSettingsPalette;
+    QProgressBar *progressBarPointer;
     QLabel *searchEngineLabelPointer;
     QAction *searchEngineMojeekActionPointer;
     QAction *searchEngineMonoclesActionPointer;