/* * This file is part of smolbote. It's copyrighted by the contributors recorded * in the version control history of the file, available from its original * location: https://neueland.iserlohn-fortress.net/smolbote.hg * * SPDX-License-Identifier: GPL-3.0 */ #ifndef SMOLBOTE_WEBVIEW_H #define SMOLBOTE_WEBVIEW_H #include "webpage.h" #include class QMenu; class MainWindow; class WebEngineProfile; class WebView : public QWebEngineView { Q_OBJECT public: enum ViewAction { BookmarkPage }; explicit WebView(MainWindow *parentMainWindow, QWidget *parent = nullptr); ~WebView() override; QMenu *pageMenu(); QMenu *toolsMenu() { Q_CHECK_PTR(m_toolsMenu); return m_toolsMenu; } void setPage(QWebEnginePage *page); bool isLoaded() const; int loadProgress() const; void triggerViewAction(ViewAction action); signals: // loadStarted is always emitted, be it page load or in-page request, // but loadFinished is only emitted when it's a page load // so emit loaded when a load is emitted (progress == 100) void loaded(); void newBookmark(const QString &title, const QUrl &url); protected: WebView *createWindow(QWebEnginePage::WebWindowType type) override; private slots: void handleLinkHovered(const QString &url); private: MainWindow *m_parent = nullptr; QMenu *m_pageMenu = nullptr; QMenu *m_toolsMenu = nullptr; bool m_loaded; int m_loadProgress; }; WebView *createWebView(const QUrl &url, WebEngineProfile *profile, MainWindow *parent); #endif // SMOLBOTE_WEBVIEW_H