#pragma once #include "WebViewData.hpp" #include "widgets/EdgeDecoration.hpp" #include "widgets/IWebViewMediator.hpp" #include "widgets/WebView.hpp" #include #include #include #include /// @see DecorationType in ./lua/null-browser/api.lua enum DecorationType : uint8_t { DecorationTop = 1, DecorationBottom = 2, DecorationLeft = 3, DecorationRight = 4, }; class Decorations : public QWidget, public IWebViewMediator { Q_OBJECT public: Decorations(QWidget *content_widget, QWebEngineProfile *profile, QWidget *parent = nullptr); void set_enabled(DecorationType type, bool enabled); bool get_enabled(DecorationType type); std::optional get_view_id(DecorationType type); bool has_webview(WebViewId view_id) override; void open_url(const QUrl &url, OpenType open_type, WebViewId view_id) override; void set_html(const QString &html, WebViewId view_id) override; void run_javascript(const QString &js_code, WebViewId webview_id, const JsOnResultFunc &on_result) override; void expose_rpc_function(const QString &name, const RpcFunc &action, WebViewId webview_id) override; void reload(WebViewId webview_id) override; private: EdgeDecoration *decoration_top; EdgeDecoration *decoration_bottom; EdgeDecoration *decoration_left; EdgeDecoration *decoration_right; std::vector decorations() { return { decoration_top, decoration_bottom, decoration_left, decoration_right, }; } std::optional get_decoration_widget_type(DecorationType type); std::optional get_decoration_widget_by_view_id(WebViewId view_id); };