#ifndef WEBVIEWHANDLER_H #define WEBVIEWHANDLER_H #include #include #include class WebViewHandler { public: enum class CallbackType { OnNavigating, OnNavigated, OnLoaded, OnError, OnNewWindow, OnTitleChanged, }; typedef std::function callback_t; WebViewHandler(wxWebView *webView, callback_t clb = nullptr) : m_webView(webView), callback(clb) { if (m_webView) { m_webView->Bind(wxEVT_WEBVIEW_NAVIGATING, &WebViewHandler::OnNavigating, this); m_webView->Bind(wxEVT_WEBVIEW_NAVIGATED, &WebViewHandler::OnNavigated, this); m_webView->Bind(wxEVT_WEBVIEW_LOADED, &WebViewHandler::OnLoaded, this); m_webView->Bind(wxEVT_WEBVIEW_ERROR, &WebViewHandler::OnError, this); m_webView->Bind(wxEVT_WEBVIEW_NEWWINDOW, &WebViewHandler::OnNewWindow, this); m_webView->Bind(wxEVT_WEBVIEW_TITLE_CHANGED, &WebViewHandler::OnTitleChanged, this); } } virtual ~WebViewHandler() { if (m_webView) { m_webView->Unbind(wxEVT_WEBVIEW_NAVIGATING, &WebViewHandler::OnNavigating, this); m_webView->Unbind(wxEVT_WEBVIEW_NAVIGATED, &WebViewHandler::OnNavigated, this); m_webView->Unbind(wxEVT_WEBVIEW_LOADED, &WebViewHandler::OnLoaded, this); m_webView->Unbind(wxEVT_WEBVIEW_ERROR, &WebViewHandler::OnError, this); m_webView->Unbind(wxEVT_WEBVIEW_NEWWINDOW, &WebViewHandler::OnNewWindow, this); } } wxWebView *GetwebView() { return m_webView; } protected: virtual void OnNavigating(wxWebViewEvent &event) { if (this->callback) { this->callback(CallbackType::OnNavigating, event.GetURL(), this); } std::cout << "Navigating to: " << event.GetURL() << std::endl; } virtual void OnTitleChanged(wxWebViewEvent &event) { wxString title = event.GetString(); if (title.IsEmpty()) { title = m_webView->GetCurrentTitle(); } if (title.IsEmpty()) { return; } if (this->callback) { this->callback(CallbackType::OnTitleChanged, title, this); } std::cout << "Title changed: " << title << std::endl; } virtual void OnNavigated(wxWebViewEvent &event) { if (this->callback) { this->callback(CallbackType::OnNavigated, event.GetURL(), this); } std::cout << "Navigating to: " << event.GetURL() << std::endl; } virtual void OnLoaded(wxWebViewEvent &event) { if (this->callback) { this->callback(CallbackType::OnLoaded, event.GetURL(), this); } std::cout << "Page loaded: " << event.GetURL() << std::endl; } virtual void OnError(wxWebViewEvent &event) { if (this->callback) { this->callback(CallbackType::OnError, event.GetString(), this); } std::cout << "Error loading page: " << event.GetString() << std::endl; } virtual void OnNewWindow(wxWebViewEvent &event) { if (this->callback) { this->callback(CallbackType::OnNewWindow, event.GetURL(), this); } std::cout << "New window requested: " << event.GetURL() << std::endl; } private: wxWebView *m_webView; callback_t callback = nullptr; }; #endif // WEBVIEWHANDLER_H