// Purpose: Common interface and events for web view component
// Author: Marianne Gagnon
// Id: $Id$
-// Copyright: (c) 2010 Marianne Gagnon
+// Copyright: (c) 2010 Marianne Gagnon, 2011 Steven Lamerton
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
-#if wxUSE_WEB
+#if wxUSE_WEBVIEW
#if defined(__BORLANDC__)
#pragma hdrstop
#include "wx/webview.h"
+#if defined(__WXOSX_COCOA__) || defined(__WXOSX_CARBON__)
#include "wx/osx/webview_webkit.h"
+#elif defined(__WXGTK__)
#include "wx/gtk/webview_webkit.h"
+#elif defined(__WXMSW__)
#include "wx/msw/webview_ie.h"
-#include "wx/filesys.h"
-#include "wx/tokenzr.h"
+#endif
// DLL options compatibility check:
#include "wx/app.h"
-WX_CHECK_BUILD_OPTIONS("wxWEB")
-
-extern WXDLLIMPEXP_DATA_WEB(const char) wxWebViewNameStr[] = "wxWebView";
-extern WXDLLIMPEXP_DATA_WEB(const char) wxWebViewDefaultURLStr[] = "about:blank";
-
-IMPLEMENT_DYNAMIC_CLASS(wxWebNavigationEvent, wxCommandEvent)
-
-wxDEFINE_EVENT( wxEVT_COMMAND_WEB_VIEW_NAVIGATING, wxWebNavigationEvent );
-wxDEFINE_EVENT( wxEVT_COMMAND_WEB_VIEW_NAVIGATED, wxWebNavigationEvent );
-wxDEFINE_EVENT( wxEVT_COMMAND_WEB_VIEW_LOADED, wxWebNavigationEvent );
-wxDEFINE_EVENT( wxEVT_COMMAND_WEB_VIEW_ERROR, wxWebNavigationEvent );
-wxDEFINE_EVENT( wxEVT_COMMAND_WEB_VIEW_NEWWINDOW, wxWebNavigationEvent );
-
-//Taken from wx/filesys.cpp
-static wxString EscapeFileNameCharsInURL(const char *in)
-{
- wxString s;
-
- for ( const unsigned char *p = (const unsigned char*)in; *p; ++p )
- {
- const unsigned char c = *p;
-
- if ( c == '/' || c == '-' || c == '.' || c == '_' || c == '~' ||
- (c >= '0' && c <= '9') ||
- (c >= 'a' && c <= 'z') ||
- (c >= 'A' && c <= 'Z') )
- {
- s << c;
- }
- else
- {
- s << wxString::Format("%%%02x", c);
- }
- }
-
- return s;
-}
-
-wxWebFileProtocolHandler::wxWebFileProtocolHandler()
-{
- m_protocol = "test";
- m_fileSystem = new wxFileSystem();
-}
+WX_CHECK_BUILD_OPTIONS("wxWEBVIEW")
-wxFSFile* wxWebFileProtocolHandler::GetFile(const wxString &uri)
-{
- size_t pos = uri.find('?');
- //There is no query string so we can load the file directly
- if(pos == wxString::npos)
- {
- size_t doubleslash = uri.find("//");
- //The path is incorrectly formed without // after the first protocol
- if(doubleslash == wxString::npos)
- return NULL;
+extern WXDLLIMPEXP_DATA_WEBVIEW(const char) wxWebViewNameStr[] = "wxWebView";
+extern WXDLLIMPEXP_DATA_WEBVIEW(const char) wxWebViewDefaultURLStr[] = "about:blank";
- wxString fspath = "file:" +
- EscapeFileNameCharsInURL(uri.substr(doubleslash + 2));
- return m_fileSystem->OpenFile(fspath);
- }
- //Otherwise we have a query string of some kind that we need to extract
- else{
- //First we extract the query string, this should have two parameters,
- //protocol=type and path=path
- wxString query = uri.substr(pos + 1), protocol, path;
- //We also trim the query off the end as we handle it alone
- wxString lefturi = uri.substr(0, pos);
- wxStringTokenizer tokenizer(query, ";");
- while(tokenizer.HasMoreTokens() && (protocol == "" || path == ""))
- {
- wxString token = tokenizer.GetNextToken();
- if(token.substr(0, 9) == "protocol=")
- {
- protocol = token.substr(9);
- }
- else if(token.substr(0, 5) == "path=")
- {
- path = token.substr(5);
- }
- }
- if(protocol == "" || path == "")
- return NULL;
+wxIMPLEMENT_ABSTRACT_CLASS(wxWebView, wxControl);
+wxIMPLEMENT_DYNAMIC_CLASS(wxWebViewEvent, wxCommandEvent);
- //We now have the path and the protocol and so can format a correct uri
- //to pass to wxFileSystem to get a wxFSFile
- size_t doubleslash = uri.find("//");
- //The path is incorrectly formed without // after the first protocol
- if(doubleslash == wxString::npos)
- return NULL;
-
- wxString fspath = "file:" +
- EscapeFileNameCharsInURL(lefturi.substr(doubleslash + 2))
- + "#" + protocol +":" + path;
- return m_fileSystem->OpenFile(fspath);
- }
-}
-
-wxString wxWebFileProtocolHandler::CombineURIs(const wxString &baseuri,
- const wxString &newuri)
-{
- //Still need to be implemented correctly
- return newuri;
-}
+wxDEFINE_EVENT( wxEVT_COMMAND_WEB_VIEW_NAVIGATING, wxWebViewEvent );
+wxDEFINE_EVENT( wxEVT_COMMAND_WEB_VIEW_NAVIGATED, wxWebViewEvent );
+wxDEFINE_EVENT( wxEVT_COMMAND_WEB_VIEW_LOADED, wxWebViewEvent );
+wxDEFINE_EVENT( wxEVT_COMMAND_WEB_VIEW_ERROR, wxWebViewEvent );
+wxDEFINE_EVENT( wxEVT_COMMAND_WEB_VIEW_NEWWINDOW, wxWebViewEvent );
+wxDEFINE_EVENT( wxEVT_COMMAND_WEB_VIEW_TITLE_CHANGED, wxWebViewEvent );
// static
wxWebView* wxWebView::New(wxWebViewBackend backend)
}
}
-#endif // wxUSE_WEB
+#endif // wxUSE_WEBVIEW