#ifndef WEBVIEWHANDLER_H
|
#define WEBVIEWHANDLER_H
|
#include <iostream>
|
#include <wx/log.h>
|
#include <wx/webview.h>
|
|
class WebViewHandler {
|
|
public:
|
enum class CallbackType {
|
OnNavigating,
|
OnNavigated,
|
OnLoaded,
|
OnError,
|
OnNewWindow,
|
OnTitleChanged,
|
};
|
|
typedef std::function<void(CallbackType, const wxString, WebViewHandler *)>
|
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
|