diff options
Diffstat (limited to 'examples/webenginewidgets/simplebrowser/browserwindow.cpp')
| -rw-r--r-- | examples/webenginewidgets/simplebrowser/browserwindow.cpp | 109 | 
1 files changed, 44 insertions, 65 deletions
diff --git a/examples/webenginewidgets/simplebrowser/browserwindow.cpp b/examples/webenginewidgets/simplebrowser/browserwindow.cpp index 0b85e2bb0..43c25e633 100644 --- a/examples/webenginewidgets/simplebrowser/browserwindow.cpp +++ b/examples/webenginewidgets/simplebrowser/browserwindow.cpp @@ -40,12 +40,13 @@  #include "browser.h"  #include "browserwindow.h" +#include "downloadmanagerwidget.h"  #include "tabwidget.h" -#include "urllineedit.h"  #include "webview.h"  #include <QApplication>  #include <QCloseEvent>  #include <QDesktopWidget> +#include <QEvent>  #include <QFileDialog>  #include <QInputDialog>  #include <QMenuBar> @@ -54,9 +55,10 @@  #include <QStatusBar>  #include <QToolBar>  #include <QVBoxLayout> +#include <QWebEngineProfile> -BrowserWindow::BrowserWindow(QWidget *parent, Qt::WindowFlags flags) -    : QMainWindow(parent, flags) +BrowserWindow::BrowserWindow(Browser *browser) +    : m_browser(browser)      , m_tabWidget(new TabWidget(this))      , m_progressBar(new QProgressBar(this))      , m_historyBackAction(nullptr) @@ -64,10 +66,11 @@ BrowserWindow::BrowserWindow(QWidget *parent, Qt::WindowFlags flags)      , m_stopAction(nullptr)      , m_reloadAction(nullptr)      , m_stopReloadAction(nullptr) -    , m_urlLineEdit(new UrlLineEdit(this)) +    , m_urlLineEdit(nullptr) +    , m_favAction(nullptr)  { -    setToolButtonStyle(Qt::ToolButtonFollowStyle);      setAttribute(Qt::WA_DeleteOnClose, true); +    setFocusPolicy(Qt::ClickFocus);      QToolBar *toolbar = createToolBar();      addToolBar(toolbar); @@ -85,7 +88,7 @@ BrowserWindow::BrowserWindow(QWidget *parent, Qt::WindowFlags flags)      m_progressBar->setMaximumHeight(1);      m_progressBar->setTextVisible(false); -    m_progressBar->setStyleSheet(QStringLiteral("QProgressBar {border: 0px } QProgressBar::chunk { background-color: red; }")); +    m_progressBar->setStyleSheet(QStringLiteral("QProgressBar {border: 0px} QProgressBar::chunk {background-color: #da4453}"));      layout->addWidget(m_progressBar);      layout->addWidget(m_tabWidget); @@ -97,15 +100,14 @@ BrowserWindow::BrowserWindow(QWidget *parent, Qt::WindowFlags flags)          statusBar()->showMessage(url);      });      connect(m_tabWidget, &TabWidget::loadProgress, this, &BrowserWindow::handleWebViewLoadProgress); -    connect(m_tabWidget, &TabWidget::urlChanged, this, &BrowserWindow::handleWebViewUrlChanged); -    connect(m_tabWidget, &TabWidget::iconChanged, this, &BrowserWindow::handleWebViewIconChanged);      connect(m_tabWidget, &TabWidget::webActionEnabledChanged, this, &BrowserWindow::handleWebActionEnabledChanged); -    connect(m_urlLineEdit, &QLineEdit::returnPressed, this, [this]() { -        m_urlLineEdit->setFavIcon(QIcon(QStringLiteral(":defaulticon.png"))); -        loadPage(m_urlLineEdit->url()); +    connect(m_tabWidget, &TabWidget::urlChanged, [this](const QUrl &url) { +        m_urlLineEdit->setText(url.toDisplayString()); +    }); +    connect(m_tabWidget, &TabWidget::favIconChanged, m_favAction, &QAction::setIcon); +    connect(m_urlLineEdit, &QLineEdit::returnPressed, [this]() { +        m_tabWidget->setUrl(QUrl::fromUserInput(m_urlLineEdit->text()));      }); - -    m_urlLineEdit->setFavIcon(QIcon(QStringLiteral(":defaulticon.png")));      QAction *focusUrlLineEditAction = new QAction(this);      addAction(focusUrlLineEditAction); @@ -114,14 +116,10 @@ BrowserWindow::BrowserWindow(QWidget *parent, Qt::WindowFlags flags)          m_urlLineEdit->setFocus(Qt::ShortcutFocusReason);      }); -    handleWebViewTitleChanged(tr("Qt Simple Browser")); +    handleWebViewTitleChanged(QString());      m_tabWidget->createTab();  } -BrowserWindow::~BrowserWindow() -{ -} -  QSize BrowserWindow::sizeHint() const  {      QRect desktopRect = QApplication::desktop()->screenGeometry(); @@ -134,18 +132,16 @@ QMenu *BrowserWindow::createFileMenu(TabWidget *tabWidget)      QMenu *fileMenu = new QMenu(tr("&File"));      fileMenu->addAction(tr("&New Window"), this, &BrowserWindow::handleNewWindowTriggered, QKeySequence::New); -    QAction *newTabAction = new QAction(QIcon(QLatin1String(":addtab.png")), tr("New &Tab"), this); +    QAction *newTabAction = new QAction(tr("New &Tab"), this);      newTabAction->setShortcuts(QKeySequence::AddTab); -    newTabAction->setIconVisibleInMenu(false);      connect(newTabAction, &QAction::triggered, tabWidget, &TabWidget::createTab);      fileMenu->addAction(newTabAction);      fileMenu->addAction(tr("&Open File..."), this, &BrowserWindow::handleFileOpenTriggered, QKeySequence::Open);      fileMenu->addSeparator(); -    QAction *closeTabAction = new QAction(QIcon(QLatin1String(":closetab.png")), tr("&Close Tab"), this); +    QAction *closeTabAction = new QAction(tr("&Close Tab"), this);      closeTabAction->setShortcuts(QKeySequence::Close); -    closeTabAction->setIconVisibleInMenu(false);      connect(closeTabAction, &QAction::triggered, [tabWidget]() {          tabWidget->closeTab(tabWidget->currentIndex());      }); @@ -156,8 +152,8 @@ QMenu *BrowserWindow::createFileMenu(TabWidget *tabWidget)      connect(closeAction, &QAction::triggered, this, &QWidget::close);      fileMenu->addAction(closeAction); -    connect(fileMenu, &QMenu::aboutToShow, [closeAction]() { -        if (Browser::instance().windows().count() == 1) +    connect(fileMenu, &QMenu::aboutToShow, [this, closeAction]() { +        if (m_browser->windows().count() == 1)              closeAction->setText(tr("&Quit"));          else              closeAction->setText(tr("&Close Window")); @@ -288,7 +284,7 @@ QMenu *BrowserWindow::createWindowMenu(TabWidget *tabWidget)          menu->addAction(previousTabAction);          menu->addSeparator(); -        QVector<BrowserWindow*> windows = Browser::instance().windows(); +        QVector<BrowserWindow*> windows = m_browser->windows();          int index(-1);          for (auto window : windows) {              QAction *action = menu->addAction(window->windowTitle(), this, &BrowserWindow::handleShowWindowTriggered); @@ -311,7 +307,7 @@ QMenu *BrowserWindow::createHelpMenu()  QToolBar *BrowserWindow::createToolBar()  {      QToolBar *navigationBar = new QToolBar(tr("Navigation")); -    navigationBar->setAllowedAreas(Qt::TopToolBarArea | Qt::BottomToolBarArea); +    navigationBar->setMovable(false);      navigationBar->toggleViewAction()->setEnabled(false);      m_historyBackAction = new QAction(this); @@ -328,6 +324,7 @@ QToolBar *BrowserWindow::createToolBar()      m_historyBackAction->setShortcuts(backShortcuts);      m_historyBackAction->setIconVisibleInMenu(false);      m_historyBackAction->setIcon(QIcon(QStringLiteral(":go-previous.png"))); +    m_historyBackAction->setToolTip(tr("Go back in history"));      connect(m_historyBackAction, &QAction::triggered, [this]() {          m_tabWidget->triggerWebPageAction(QWebEnginePage::Back);      }); @@ -345,6 +342,7 @@ QToolBar *BrowserWindow::createToolBar()      m_historyForwardAction->setShortcuts(fwdShortcuts);      m_historyForwardAction->setIconVisibleInMenu(false);      m_historyForwardAction->setIcon(QIcon(QStringLiteral(":go-next.png"))); +    m_historyForwardAction->setToolTip(tr("Go forward in history"));      connect(m_historyForwardAction, &QAction::triggered, [this]() {          m_tabWidget->triggerWebPageAction(QWebEnginePage::Forward);      }); @@ -355,22 +353,22 @@ QToolBar *BrowserWindow::createToolBar()          m_tabWidget->triggerWebPageAction(QWebEnginePage::WebAction(m_stopReloadAction->data().toInt()));      });      navigationBar->addAction(m_stopReloadAction); + +    m_urlLineEdit = new QLineEdit(this); +    m_favAction = new QAction(this); +    m_urlLineEdit->addAction(m_favAction, QLineEdit::LeadingPosition); +    m_urlLineEdit->setClearButtonEnabled(true);      navigationBar->addWidget(m_urlLineEdit); -    int size = m_urlLineEdit->sizeHint().height(); -    navigationBar->setIconSize(QSize(size, size)); -    return navigationBar; -} -void BrowserWindow::handleWebViewIconChanged(const QIcon &icon) -{ -    m_urlLineEdit->setFavIcon(icon); -} +    auto downloadsAction = new QAction(this); +    downloadsAction->setIcon(QIcon(QStringLiteral(":go-bottom.png"))); +    downloadsAction->setToolTip(tr("Show downloads")); +    navigationBar->addAction(downloadsAction); +    connect(downloadsAction, &QAction::triggered, [this]() { +        m_browser->downloadManagerWidget().show(); +    }); -void BrowserWindow::handleWebViewUrlChanged(const QUrl &url) -{ -    m_urlLineEdit->setUrl(url); -    if (url.isEmpty()) -        m_urlLineEdit->setFocus(); +    return navigationBar;  }  void BrowserWindow::handleWebActionEnabledChanged(QWebEnginePage::WebAction action, bool enabled) @@ -389,7 +387,7 @@ void BrowserWindow::handleWebActionEnabledChanged(QWebEnginePage::WebAction acti          m_stopAction->setEnabled(enabled);          break;      default: -        qWarning("Unhandled webActionChanged singal"); +        qWarning("Unhandled webActionChanged signal");      }  } @@ -403,9 +401,7 @@ void BrowserWindow::handleWebViewTitleChanged(const QString &title)  void BrowserWindow::handleNewWindowTriggered()  { -    BrowserWindow *window = new BrowserWindow(); -    Browser::instance().addWindow(window); -    window->loadHomePage(); +    m_browser->createWindow();  }  void BrowserWindow::handleFileOpenTriggered() @@ -414,7 +410,7 @@ void BrowserWindow::handleFileOpenTriggered()                                                  tr("Web Resources (*.html *.htm *.svg *.png *.gif *.svgz);;All files (*.*)"));      if (file.isEmpty())          return; -    loadPage(file); +    currentTab()->setUrl(file);  }  void BrowserWindow::handleFindActionTriggered() @@ -450,24 +446,6 @@ void BrowserWindow::closeEvent(QCloseEvent *event)      deleteLater();  } -void BrowserWindow::loadHomePage() -{ -    loadPage(QStringLiteral("http://www.qt.io")); -} - -void BrowserWindow::loadPage(const QString &page) -{ -    loadPage(QUrl::fromUserInput(page)); -} - -void BrowserWindow::loadPage(const QUrl &url) -{ -    if (url.isValid()) { -        m_urlLineEdit->setUrl(url); -        m_tabWidget->setUrl(url); -    } -} -  TabWidget *BrowserWindow::tabWidget() const  {      return m_tabWidget; @@ -483,23 +461,24 @@ void BrowserWindow::handleWebViewLoadProgress(int progress)      static QIcon stopIcon(QStringLiteral(":process-stop.png"));      static QIcon reloadIcon(QStringLiteral(":view-refresh.png")); -    if (progress < 100 && progress > 0) { +    if (0 < progress && progress < 100) {          m_stopReloadAction->setData(QWebEnginePage::Stop);          m_stopReloadAction->setIcon(stopIcon);          m_stopReloadAction->setToolTip(tr("Stop loading the current page")); +        m_progressBar->setValue(progress);      } else {          m_stopReloadAction->setData(QWebEnginePage::Reload);          m_stopReloadAction->setIcon(reloadIcon);          m_stopReloadAction->setToolTip(tr("Reload the current page")); +        m_progressBar->setValue(0);      } -    m_progressBar->setValue(progress < 100 ? progress : 0);  }  void BrowserWindow::handleShowWindowTriggered()  {      if (QAction *action = qobject_cast<QAction*>(sender())) {          int offset = action->data().toInt(); -        QVector<BrowserWindow*> windows = Browser::instance().windows(); +        QVector<BrowserWindow*> windows = m_browser->windows();          windows.at(offset)->activateWindow();          windows.at(offset)->currentTab()->setFocus();      }  | 
