diff options
Diffstat (limited to 'lib/webengine/webview.h')
-rw-r--r-- | lib/webengine/webview.h | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/lib/webengine/webview.h b/lib/webengine/webview.h new file mode 100644 index 0000000..538ffa9 --- /dev/null +++ b/lib/webengine/webview.h @@ -0,0 +1,67 @@ +/* + * 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/gitea/aqua/smolbote + * + * SPDX-License-Identifier: GPL-3.0 + */ + +#ifndef SMOLBOTE_WEBVIEW_H +#define SMOLBOTE_WEBVIEW_H + +#include "smolbote/session.hpp" +#include "webpage.h" +#include <QWebEngineView> +#include <functional> + +class WebProfile; +class WebViewContextMenu; +class WebView final : public QWebEngineView +{ + friend class WebViewContextMenu; + + Q_OBJECT + + explicit WebView(QWidget *parent = nullptr); + +public: + typedef std::function<WebView *(QWebEnginePage::WebWindowType)> cb_createWindow_t; + + WebView(WebProfile *profile, cb_createWindow_t cb, QWidget *parent = nullptr); + WebView(const Session::WebView &webview_data, cb_createWindow_t cb, QWidget *parent = nullptr); + ~WebView() = default; + + [[nodiscard]] WebProfile *profile() const + { + return m_profile; + } + void setProfile(WebProfile *profile); + + [[nodiscard]] Session::WebView serialize() const; + + bool isLoaded() const + { + return m_loaded; + } + +public slots: + void search(const QString &term); + +signals: + void newBookmark(const QString &title, const QUrl &url); + +protected: + WebView *createWindow(QWebEnginePage::WebWindowType type) override + { + return cb_createWindow ? cb_createWindow(type) : nullptr; + } + void contextMenuEvent(QContextMenuEvent *event) override; + +private: + cb_createWindow_t cb_createWindow; + WebProfile *m_profile = nullptr; + + bool m_loaded = false; +}; + +#endif // SMOLBOTE_WEBVIEW_H |