--- /dev/null
+/////////////////////////////////////////////////////////////////////////////
+// Name: webkit.h
+// Purpose: wxWebKitCtrl - embeddable web kit control
+// Author: Jethro Grassie / Kevin Ollivier
+// Modified by:
+// Created: 2004-4-16
+// RCS-ID: $Id$
+// Copyright: (c) Jethro Grassie / Kevin Ollivier
+// Licence: wxWindows licence
+/////////////////////////////////////////////////////////////////////////////
+
+#ifndef _WX_WEBKIT_H
+#define _WX_WEBKIT_H
+
+#ifdef __GNUG__
+#pragma interface "webkit.h"
+#endif
+
+#if !defined(__WXMAC__) && !defined(__WXCOCOA__)
+#error "wxWebKitCtrl not implemented for this platform"
+#endif
+
+#ifdef __WXCOCOA
+#include <WebKit/WebKit.h>
+#endif
+#include "wx/control.h"
+
+// ----------------------------------------------------------------------------
+// Web Kit Control
+// ----------------------------------------------------------------------------
+
+class wxWebKitCtrl : public wxControl
+{
+public:
+ DECLARE_DYNAMIC_CLASS(wxWebKitCtrl)
+
+ wxWebKitCtrl() {};
+ wxWebKitCtrl(wxWindow *parent,
+ wxWindowID winID,
+ const wxString& strURL,
+ const wxPoint& pos = wxDefaultPosition,
+ const wxSize& size = wxDefaultSize, long style = 0,
+ const wxValidator& validator = wxDefaultValidator,
+ const wxString& name = wxString("default_webkit_name"))
+ {
+ Create(parent, winID, strURL, pos, size, style, validator, name);
+ };
+ bool Create(wxWindow *parent,
+ wxWindowID winID,
+ const wxString& strURL,
+ const wxPoint& pos = wxDefaultPosition,
+ const wxSize& size = wxDefaultSize, long style = 0,
+ const wxValidator& validator = wxDefaultValidator,
+ const wxString& name = wxString("default_webkit_name"));
+ virtual ~wxWebKitCtrl();
+
+ void LoadURL(const wxString &url);
+
+ bool CanGoBack();
+ bool CanGoForward();
+ bool GoBack();
+ bool GoForward();
+ void Reload();
+ void Stop();
+ bool CanGetPageSource();
+ wxString GetPageSource();
+ void SetPageSource(wxString& source, const wxString& baseUrl = wxString(""));
+
+ //we need to resize the webview when the control size changes
+ //void OnSize(wxSizeEvent &event);
+protected:
+ DECLARE_EVENT_TABLE()
+
+private:
+ wxWindow *m_parent;
+ wxWindowID m_windowID;
+ wxString m_currentURL;
+ wxString m_pageTitle;
+ void* m_webView;
+ //It should be WebView, but WebView is Cocoa only, so any class which included
+ //this header would have to link to Cocoa, so for now use void* instead.
+};
+
+// ----------------------------------------------------------------------------
+// Web Kit Events
+// ----------------------------------------------------------------------------
+
+enum {
+ wxWEBKIT_STATE_START = 1,
+ wxWEBKIT_STATE_NEGOTIATING = 2,
+ wxWEBKIT_STATE_REDIRECTING = 4,
+ wxWEBKIT_STATE_TRANSFERRING = 8,
+ wxWEBKIT_STATE_STOP = 16,
+ wxWEBKIT_STATE_FAILED = 32
+};
+
+class wxWebKitStateChangedEvent : public wxCommandEvent
+{
+ DECLARE_DYNAMIC_CLASS( wxWebKitStateChangedEvent )
+
+public:
+ int GetState() { return m_state; }
+ void SetState(const int state) { m_state = state; }
+ wxString GetURL() { return m_url; }
+ void SetURL(const wxString& url) { m_url = url; }
+
+ wxWebKitStateChangedEvent( wxWindow* win = (wxWindow*) NULL );
+ wxEvent *Clone(void) const { return new wxWebKitStateChangedEvent(*this); }
+
+protected:
+ int m_state;
+ wxString m_url;
+};
+
+typedef void (wxEvtHandler::*wxWebKitStateChangedEventFunction)(wxWebKitStateChangedEvent&);
+
+BEGIN_DECLARE_EVENT_TYPES()
+ DECLARE_LOCAL_EVENT_TYPE(wxEVT_WEBKIT_STATE_CHANGED, -1)
+END_DECLARE_EVENT_TYPES()
+
+#define EVT_WEBKIT_STATE_CHANGED(func) \
+ DECLARE_EVENT_TABLE_ENTRY( wxEVT_WEBKIT_STATE_CHANGED, \
+ -1, \
+ -1, \
+ (wxObjectEventFunction) \
+ (wxWebKitStateChangedEventFunction) & func, \
+ (wxObject *) NULL ),
+
+#endif // _WX_WEBKIT_H_
--- /dev/null
+# =========================================================================
+# This makefile was generated by
+# Bakefile 0.1.4 (http://bakefile.sourceforge.net)
+# Do not modify, all changes will be overwritten!
+# =========================================================================
+
+
+@MAKE_SET@
+
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+INSTALL = @INSTALL@
+EXEEXT = @EXEEXT@
+RESCOMP = @RESCOMP@
+SETFILE = @SETFILE@
+NM = @NM@
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+top_builddir = @top_builddir@
+LDFLAGS_GUI = @LDFLAGS_GUI@
+CXX = @CXX@
+CXXFLAGS = @CXXFLAGS@
+CPPFLAGS = @CPPFLAGS@
+LDFLAGS = @LDFLAGS@
+TOOLKIT = @TOOLKIT@
+TOOLKIT_LOWERCASE = @TOOLKIT_LOWERCASE@
+TOOLKIT_VERSION = @TOOLKIT_VERSION@
+TOOLCHAIN_NAME = @TOOLCHAIN_NAME@
+EXTRALIBS = @EXTRALIBS@
+EXTRALIBS_GUI = @EXTRALIBS_GUI@
+HOST_SUFFIX = @HOST_SUFFIX@
+SAMPLES_RPATH_FLAG = @SAMPLES_RPATH_FLAG@
+SAMPLES_RPATH_POSTLINK = @SAMPLES_RPATH_POSTLINK@
+
+### Variables: ###
+
+DESTDIR =
+WX_VERSION = 2.5.1
+LIBDIRNAME = $(top_builddir)lib
+HTMLCTRL_CXXFLAGS = -D__WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p) -I$(srcdir) \
+ $(__DLLFLAG_p) -I$(srcdir)/../../../samples $(CPPFLAGS) $(CXXFLAGS)
+HTMLCTRL_OBJECTS = \
+ $(__htmlctrl___win32rc) \
+ $(__htmlctrl_os2_lib_res) \
+ htmlctrl_htmlctrl.o
+
+### Conditionally set variables: ###
+
+@COND_DEPS_TRACKING_0@CXXC = $(CXX)
+@COND_DEPS_TRACKING_1@CXXC = $(top_builddir)./bk-deps $(CXX)
+@COND_USE_GUI_0@PORTNAME = base
+@COND_USE_GUI_1@PORTNAME = $(TOOLKIT_LOWERCASE)$(TOOLKIT_VERSION)
+@COND_TOOLKIT_MAC@WXBASEPORT = _carbon
+@COND_BUILD_DEBUG_DEBUG_FLAG_DEFAULT@WXDEBUGFLAG = d
+@COND_DEBUG_FLAG_1@WXDEBUGFLAG = d
+@COND_UNICODE_1@WXUNICODEFLAG = u
+@COND_WXUNIV_1@WXUNIVNAME = univ
+@COND_PLATFORM_MAC_1@__htmlctrl___mac_setfilecmd = \
+@COND_PLATFORM_MAC_1@ $(SETFILE) -a C htmlctrl$(EXEEXT)
+@COND_PLATFORM_MAC_1@__htmlctrl___mac_rezcmd = $(__MACOSX_RESOURCES_p_1)
+@COND_WXUNIV_1@__WXUNIV_DEFINE_p = -D__WXUNIVERSAL__
+@COND_WXUNIV_1@__WXUNIV_DEFINE_p_1 = -d __WXUNIVERSAL__
+@COND_WXUNIV_1@__WXUNIV_DEFINE_p_2 = --define __WXUNIVERSAL__
+@COND_SHARED_1@__DLLFLAG_p = -DWXUSINGDLL
+@COND_SHARED_1@__DLLFLAG_p_1 = -d WXUSINGDLL
+@COND_SHARED_1@__DLLFLAG_p_2 = --define WXUSINGDLL
+COND_PLATFORM_OS2_1___htmlctrl___os2_emxbindcmd = $(NM) htmlctrl$(EXEEXT) | if \
+ grep -q pmwin.763 ; then emxbind -ep htmlctrl$(EXEEXT) ; fi
+@COND_PLATFORM_OS2_1@__htmlctrl___os2_emxbindcmd = $(COND_PLATFORM_OS2_1___htmlctrl___os2_emxbindcmd)
+@COND_PLATFORM_WIN32_1@__htmlctrl___win32rc = htmlctrl_sample_rc.o
+@COND_PLATFORM_OS2_1@__htmlctrl_os2_lib_res = \
+@COND_PLATFORM_OS2_1@ $(top_srcdir)/include/wx/os2/wx.res
+@COND_PLATFORM_MACOSX_1@__htmlctrl_bundle___depname = htmlctrl_bundle
+@COND_TOOLKIT_COCOA@____htmlctrl_BUNDLE_TGT_REF_DEP = \
+@COND_TOOLKIT_COCOA@ htmlctrl.app/Contents/PkgInfo
+@COND_TOOLKIT_MAC@____htmlctrl_BUNDLE_TGT_REF_DEP = \
+@COND_TOOLKIT_MAC@ htmlctrl.app/Contents/PkgInfo
+COND_MONOLITHIC_0___WXLIB_CORE_p = \
+ -lwx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)_core-2.5$(HOST_SUFFIX)
+@COND_MONOLITHIC_0@__WXLIB_CORE_p = $(COND_MONOLITHIC_0___WXLIB_CORE_p)
+@COND_MONOLITHIC_0@__WXLIB_BASE_p = \
+@COND_MONOLITHIC_0@ -lwx_base$(WXBASEPORT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)-2.5$(HOST_SUFFIX)
+COND_MONOLITHIC_1___WXLIB_MONO_p = \
+ -lwx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)-2.5$(HOST_SUFFIX)
+@COND_MONOLITHIC_1@__WXLIB_MONO_p = $(COND_MONOLITHIC_1___WXLIB_MONO_p)
+@COND_USE_GUI_1_WXUSE_LIBTIFF_BUILTIN@__LIB_TIFF_p \
+@COND_USE_GUI_1_WXUSE_LIBTIFF_BUILTIN@ = \
+@COND_USE_GUI_1_WXUSE_LIBTIFF_BUILTIN@ -lwxtiff$(WXDEBUGFLAG)$(HOST_SUFFIX)
+@COND_USE_GUI_1_WXUSE_LIBJPEG_BUILTIN@__LIB_JPEG_p \
+@COND_USE_GUI_1_WXUSE_LIBJPEG_BUILTIN@ = \
+@COND_USE_GUI_1_WXUSE_LIBJPEG_BUILTIN@ -lwxjpeg$(WXDEBUGFLAG)$(HOST_SUFFIX)
+@COND_USE_GUI_1_WXUSE_LIBPNG_BUILTIN@__LIB_PNG_p \
+@COND_USE_GUI_1_WXUSE_LIBPNG_BUILTIN@ = \
+@COND_USE_GUI_1_WXUSE_LIBPNG_BUILTIN@ -lwxpng$(WXDEBUGFLAG)$(HOST_SUFFIX)
+@COND_WXUSE_ZLIB_BUILTIN@__LIB_ZLIB_p = \
+@COND_WXUSE_ZLIB_BUILTIN@ -lwxzlib$(WXDEBUGFLAG)$(HOST_SUFFIX)
+@COND_WXUSE_ODBC_BUILTIN@__LIB_ODBC_p = \
+@COND_WXUSE_ODBC_BUILTIN@ -lwxodbc$(WXDEBUGFLAG)$(HOST_SUFFIX)
+@COND_WXUSE_REGEX_BUILTIN@__LIB_REGEX_p = \
+@COND_WXUSE_REGEX_BUILTIN@ -lwxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(HOST_SUFFIX)
+@COND_WXUSE_EXPAT_BUILTIN@__LIB_EXPAT_p = \
+@COND_WXUSE_EXPAT_BUILTIN@ -lwxexpat$(WXDEBUGFLAG)$(HOST_SUFFIX)
+COND_TOOLKIT_MAC___MACOSX_RESOURCES_p_1 = $(RESCOMP) -d __DARWIN__ -t APPL -d \
+ __WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p_1) -i $(srcdir) $(__DLLFLAG_p_1) -i \
+ $(srcdir)/../../../samples -i $(top_srcdir)/include -o htmlctrl$(EXEEXT) \
+ Carbon.r $(LIBDIRNAME)/libwx_$(TOOLCHAIN_NAME).1.r sample.r
+@COND_TOOLKIT_MAC@__MACOSX_RESOURCES_p_1 = $(COND_TOOLKIT_MAC___MACOSX_RESOURCES_p_1)
+
+### Targets: ###
+
+all: htmlctrl$(EXEEXT) $(__htmlctrl_bundle___depname)
+
+install: all
+
+uninstall:
+
+install-strip: install
+
+clean:
+ rm -rf ./.deps ./.pch
+ rm -f ./*.o
+ rm -f htmlctrl$(EXEEXT)
+ rm -rf htmlctrl.app
+
+distclean: clean
+ rm -f configure config.cache config.log config.status bk-deps bk-make-pch shared-ld-sh Makefile
+
+htmlctrl$(EXEEXT): $(HTMLCTRL_OBJECTS) $(__htmlctrl___win32rc)
+ $(CXX) -o $@ $(HTMLCTRL_OBJECTS) $(LDFLAGS) -L$(LIBDIRNAME) $(LDFLAGS_GUI) $(SAMPLES_RPATH_FLAG) $(__WXLIB_CORE_p) $(__WXLIB_BASE_p) $(__WXLIB_MONO_p) $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p) $(__LIB_ZLIB_p) $(__LIB_ODBC_p) $(__LIB_REGEX_p) $(__LIB_EXPAT_p) $(EXTRALIBS) $(EXTRALIBS_GUI)
+ $(__htmlctrl___mac_rezcmd)
+ $(__htmlctrl___mac_setfilecmd)
+ $(__htmlctrl___os2_emxbindcmd)
+ $(SAMPLES_RPATH_POSTLINK)
+
+htmlctrl.app/Contents/PkgInfo: htmlctrl$(EXEEXT) $(top_srcdir)/src/mac/carbon/Info.plist.in $(LIBDIRNAME)/libwx_$(TOOLCHAIN_NAME).1.rsrc $(top_srcdir)/src/mac/carbon/wxmac.icns
+ mkdir -p htmlctrl.app/Contents
+ mkdir -p htmlctrl.app/Contents/MacOS
+ mkdir -p htmlctrl.app/Contents/Resources
+
+
+ sed -e "s/IDENTIFIER/`echo $(srcdir) | sed -e 's,\.\./,,g' | sed -e 's,/,.,g'`/" \
+ -e "s/EXECUTABLE/htmlctrl/" \
+ -e "s/VERSION/$(WX_VERSION)/" \
+ $(top_srcdir)/src/mac/carbon/Info.plist.in >htmlctrl.app/Contents/Info.plist
+
+
+ echo -n "APPL????" >htmlctrl.app/Contents/PkgInfo
+
+
+ ln -f htmlctrl$(EXEEXT) htmlctrl.app/Contents/MacOS/htmlctrl
+
+
+ cp -f $(LIBDIRNAME)/libwx_$(TOOLCHAIN_NAME).1.rsrc htmlctrl.app/Contents/Resources/htmlctrl.rsrc
+ cp -f $(top_srcdir)/src/mac/carbon/wxmac.icns htmlctrl.app/Contents/Resources/wxmac.icns
+
+@COND_PLATFORM_MACOSX_1@htmlctrl_bundle: $(____htmlctrl_BUNDLE_TGT_REF_DEP)
+
+htmlctrl_sample_rc.o: $(srcdir)/../../../samples/sample.rc
+ $(RESCOMP) -i$< -o$@ --define __WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p_2) --include-dir $(srcdir) $(__DLLFLAG_p_2) --include-dir $(srcdir)/../../../samples --include-dir $(top_srcdir)/include
+
+htmlctrl_htmlctrl.o: $(srcdir)/htmlctrl.cpp
+ $(CXXC) -c -o $@ $(HTMLCTRL_CXXFLAGS) $<
+
+
+# Include dependency info, if present:
+@IF_GNU_MAKE@-include .deps/*.d
+
+.PHONY: all install uninstall clean distclean htmlctrl_bundle
--- /dev/null
+<?xml version="1.0" ?>
+<!-- $Id$ -->
+
+<makefile>
+
+ <include file="../../../build/bakefiles/common_samples.bkl"/>
+
+ <exe id="htmlctrl" template="wx_sample" template_append="wx_append">
+ <sources>htmlctrl.cpp</sources>
+ <wx-lib>core</wx-lib>
+ <wx-lib>base</wx-lib>
+ </exe>
+
+</makefile>
--- /dev/null
+/////////////////////////////////////////////////////////////////////////////
+// Name: htmlctrl.cpp
+// Purpose: HtmlCtrl sample
+// Author: Julian Smart / Kevin Ollivier
+// Modified by:
+// Created: 04/16/2004
+// RCS-ID: $Id$
+// Copyright: (c) Julian Smart / Kevin Ollivier
+// Licence: wxWindows licence
+/////////////////////////////////////////////////////////////////////////////
+
+// ============================================================================
+// declarations
+// ============================================================================
+
+// ----------------------------------------------------------------------------
+// headers
+// ----------------------------------------------------------------------------
+
+// For compilers that support precompilation, includes "wx/wx.h".
+#include "wx/wxprec.h"
+
+#ifdef __BORLANDC__
+ #pragma hdrstop
+#endif
+
+// for all others, include the necessary headers (this file is usually all you
+// need because it includes almost all "standard" wxWindows headers)
+#ifndef WX_PRECOMP
+ #include "wx/wx.h"
+#endif
+
+#include "wx/html/wxWebKit.h"
+
+// ----------------------------------------------------------------------------
+// resources
+// ----------------------------------------------------------------------------
+
+// the application icon (under Windows and OS/2 it is in resources and even
+// though we could still include the XPM here it would be unused)
+#if !defined(__WXMSW__) && !defined(__WXPM__)
+ #include "../../sample.xpm"
+#endif
+
+enum {
+ ID_BACK = wxID_HIGHEST + 1,
+ ID_NEXT = wxID_HIGHEST + 2,
+ ID_RELOAD = wxID_HIGHEST + 3,
+ ID_URLLIST = wxID_HIGHEST + 4,
+ ID_STOP = wxID_HIGHEST + 5,
+ ID_WEBKIT = wxID_HIGHEST + 6,
+ ID_VIEW_SOURCE = wxID_HIGHEST + 7,
+ ID_OPEN = wxID_HIGHEST + 8,
+ ID_SAVE = wxID_HIGHEST + 9,
+ ID_SET_SOURCE = wxID_HIGHEST + 10
+ };
+
+// ----------------------------------------------------------------------------
+// private classes
+// ----------------------------------------------------------------------------
+
+// Define a new application type, each program should derive a class from wxApp
+class MyApp : public wxApp
+{
+public:
+ // override base class virtuals
+ // ----------------------------
+
+ // this one is called on application startup and is a good place for the app
+ // initialization (doing it here and not in the ctor allows to have an error
+ // return: if OnInit() returns false, the application terminates)
+ virtual bool OnInit();
+};
+
+// Define a new frame type: this is going to be our main frame
+class MyFrame : public wxFrame
+{
+public:
+ // ctor(s)
+ MyFrame(const wxString& title);
+ void OnBackButton(wxCommandEvent& myEvent);
+ void OnNextButton(wxCommandEvent& myEvent);
+ void OnURLEnter(wxCommandEvent& myEvent);
+ void OnStopButton(wxCommandEvent& myEvent);
+ void OnReloadButton(wxCommandEvent& myEvent);
+ void OnViewSource(wxCommandEvent& myEvent);
+ void OnSetSource(wxCommandEvent& myEvent);
+ void OnStateChanged(wxWebKitStateChangedEvent& myEvent);
+ wxWebKitControl* mySafari;
+ wxTextCtrl* urlText;
+private:
+ // any class wishing to process wxWindows events must use this macro
+ DECLARE_EVENT_TABLE()
+};
+
+// ----------------------------------------------------------------------------
+// event tables and other macros for wxWindows
+// ----------------------------------------------------------------------------
+
+// the event tables connect the wxWindows events with the functions (event
+// handlers) which process them. It can be also done at run-time, but for the
+// simple menu events like this the static method is much simpler.
+BEGIN_EVENT_TABLE(MyFrame, wxFrame)
+ EVT_BUTTON(ID_BACK, MyFrame::OnBackButton)
+ EVT_BUTTON(ID_NEXT, MyFrame::OnNextButton)
+ EVT_BUTTON(ID_STOP, MyFrame::OnStopButton)
+ EVT_BUTTON(ID_RELOAD, MyFrame::OnReloadButton)
+ EVT_MENU(ID_VIEW_SOURCE, MyFrame::OnViewSource)
+ EVT_MENU(ID_SET_SOURCE, MyFrame::OnSetSource)
+ EVT_TEXT_ENTER(ID_URLLIST, MyFrame::OnURLEnter)
+ EVT_WEBKIT_STATE_CHANGED(MyFrame::OnStateChanged)
+ //EVT_MENU(Minimal_Quit, MyFrame::OnQuit)
+ //EVT_MENU(Minimal_About, MyFrame::OnAbout)
+END_EVENT_TABLE()
+
+// Create a new application object: this macro will allow wxWindows to create
+// the application object during program execution (it's better than using a
+// static object for many reasons) and also implements the accessor function
+// wxGetApp() which will return the reference of the right type (i.e. MyApp and
+// not wxApp)
+IMPLEMENT_APP(MyApp)
+
+// ============================================================================
+// implementation
+// ============================================================================
+
+// ----------------------------------------------------------------------------
+// the application class
+// ----------------------------------------------------------------------------
+
+// 'Main program' equivalent: the program execution "starts" here
+bool MyApp::OnInit()
+{
+ // create the main application window
+ MyFrame *frame = new MyFrame(_T("wxWebKit Sample"));
+
+ // and show it (the frames, unlike simple controls, are not shown when
+ // created initially)
+ frame->Show(true);
+
+ // success: wxApp::OnRun() will be called which will enter the main message
+ // loop and the application will run. If we returned false here, the
+ // application would exit immediately.
+ return true;
+}
+
+// ----------------------------------------------------------------------------
+// main frame
+// ----------------------------------------------------------------------------
+
+// frame constructor
+MyFrame::MyFrame(const wxString& title)
+ : wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, wxSize(500,500))
+{
+ wxMenuBar* myBar = new wxMenuBar();
+ wxMenu* fileMenu = new wxMenu(_("&File"));
+ fileMenu->Append(ID_OPEN, _("Open"));
+ fileMenu->Append(ID_SAVE, _("Save"));
+ myBar->Append(fileMenu, _("File"));
+
+ wxMenu* editMenu = new wxMenu(_("Edit"));
+ editMenu->Append(ID_SET_SOURCE, _("Set Page Source"));
+ myBar->Append(editMenu, _("Edit"));
+
+ //wxMenu* viewMenu = new wxMenu(_("View"));
+ //viewMenu->Append(ID_VIEW_SOURCE, _("View Source"));
+ //myBar->Append(viewMenu, _("View"));
+
+ SetMenuBar(myBar);
+
+ wxToolBar* myToolbar = CreateToolBar();
+ wxButton* btnBack = new wxButton(myToolbar, ID_BACK, _("Back"));
+ myToolbar->AddControl(btnBack);
+ myToolbar->AddSeparator();
+ wxButton* btnNext = new wxButton(myToolbar, ID_NEXT, _("Next"));
+ myToolbar->AddControl(btnNext);
+ myToolbar->AddSeparator();
+ wxButton* btnStop = new wxButton(myToolbar, ID_STOP, _("Stop"));
+ myToolbar->AddControl(btnStop);
+ myToolbar->AddSeparator();
+ wxButton* btnReload = new wxButton(myToolbar, ID_RELOAD, _("Reload"));
+ myToolbar->AddControl(btnReload);
+ myToolbar->AddSeparator();
+ urlText = new wxTextCtrl(myToolbar, ID_URLLIST, _T("http://www.wxwidgets.org"), wxDefaultPosition, wxSize(220, -1), wxTE_PROCESS_ENTER);
+ myToolbar->AddControl(urlText);
+ myToolbar->AddSeparator();
+ myToolbar->Realize();
+
+ mySafari = new wxWebKitControl(this, ID_WEBKIT, _T("http://www.wxwidgets.org"), wxDefaultPosition, wxSize(200, 200));
+
+#if wxUSE_STATUSBAR
+ CreateStatusBar(2);
+#endif // wxUSE_STATUSBAR
+}
+
+void MyFrame::OnBackButton(wxCommandEvent& myEvent){
+ if (mySafari->CanGoBack())
+ mySafari->GoBack();
+}
+
+void MyFrame::OnNextButton(wxCommandEvent& myEvent){
+ if (mySafari->CanGoForward())
+ mySafari->GoForward();
+}
+
+void MyFrame::OnStopButton(wxCommandEvent& myEvent){
+ mySafari->Stop();
+}
+
+void MyFrame::OnReloadButton(wxCommandEvent& myEvent){
+ mySafari->Reload();
+}
+
+void MyFrame::OnURLEnter(wxCommandEvent& myEvent){
+ mySafari->LoadURL(urlText->GetValue());
+}
+
+void MyFrame::OnStateChanged(wxWebKitStateChangedEvent& myEvent){
+ if (GetStatusBar() != NULL){
+ if (myEvent.GetState() == wxWEBKIT_STATE_NEGOTIATING){
+ GetStatusBar()->SetStatusText(_("Contacting ") + myEvent.GetURL());
+ }
+ else if (myEvent.GetState() == wxWEBKIT_STATE_TRANSFERRING){
+ GetStatusBar()->SetStatusText(_("Loading ") + myEvent.GetURL());
+ }
+ else if (myEvent.GetState() == wxWEBKIT_STATE_STOP){
+ GetStatusBar()->SetStatusText(_("Load complete."));
+ SetTitle(mySafari->GetTitle());
+ }
+ else if (myEvent.GetState() == wxWEBKIT_STATE_FAILED){
+ GetStatusBar()->SetStatusText(_("Failed to load ") + myEvent.GetURL());
+ }
+ }
+
+}
+
+void MyFrame::OnViewSource(wxCommandEvent& myEvent){
+ if (mySafari->CanGetPageSource())
+ wxMessageBox(mySafari->GetPageSource());
+}
+
+void MyFrame::OnSetSource(wxCommandEvent& myEvent){
+ if (mySafari){
+ wxString myText = wxString("<HTML><HEAD></HEAD><BODY><P>Hello world!</P></BODY></HTML>");
+ mySafari->SetPageSource(myText);
+ }
+}
--- /dev/null
+/////////////////////////////////////////////////////////////////////////////
+// Name: webkit.mm
+// Purpose: wxWebKitCtrl - embeddable web kit control
+// Author: Jethro Grassie / Kevin Ollivier
+// Modified by:
+// Created: 2004-4-16
+// RCS-ID: $Id$
+// Copyright: (c) Jethro Grassie / Kevin Ollivier
+// Licence: wxWindows licence
+/////////////////////////////////////////////////////////////////////////////
+
+#ifdef __GNUG__
+ #pragma implementation "wxWebKit.h"
+#endif
+
+// For compilers that support precompilation, includes "wx.h".
+#include "wx/wxprec.h"
+
+#ifdef __BORLANDC__
+ #pragma hdrstop
+#endif
+
+#ifndef WX_PRECOMP
+ #include "wx/wx.h"
+#endif
+
+#ifdef __WXCOCOA__
+#include "wx/cocoa/autorelease.h"
+#else
+#include "wx/mac/uma.h"
+#include <Carbon/Carbon.h>
+#include <WebKit/HIWebView.h>
+#include <WebKit/CarbonUtils.h>
+#endif
+
+#include "wx/html/webkit.h"
+//#include "wx/html/wklisten.h"
+
+
+// ----------------------------------------------------------------------------
+// macros
+// ----------------------------------------------------------------------------
+
+#if !USE_SHARED_LIBRARY
+IMPLEMENT_DYNAMIC_CLASS(wxWebKitCtrl, wxControl)
+#endif
+
+BEGIN_EVENT_TABLE(wxWebKitCtrl, wxControl)
+ //EVT_SIZE(wxWebKitCtrl::OnSize)
+END_EVENT_TABLE()
+
+// ----------------------------------------------------------------------------
+// wxWebKit Events
+// ----------------------------------------------------------------------------
+
+IMPLEMENT_DYNAMIC_CLASS( wxWebKitStateChangedEvent, wxCommandEvent )
+
+DEFINE_EVENT_TYPE( wxEVT_WEBKIT_STATE_CHANGED )
+
+wxWebKitStateChangedEvent::wxWebKitStateChangedEvent( wxWindow* win )
+{
+ SetEventType( wxEVT_WEBKIT_STATE_CHANGED);
+ SetEventObject( win );
+ SetId(win->GetId());
+}
+
+//---------------------------------------------------------
+// helper functions for NSString<->wxString conversion
+//---------------------------------------------------------
+
+inline wxString wxStringWithNSString(NSString *nsstring)
+{
+#if wxUSE_UNICODE
+ return wxString([nsstring UTF8String], wxConvUTF8);
+#else
+ return wxString([nsstring lossyCString]);
+#endif // wxUSE_UNICODE
+}
+
+inline NSString* wxNSStringWithWxString(const wxString &wxstring)
+{
+#if wxUSE_UNICODE
+ return [NSString stringWithUTF8String: wxstring.mb_str(wxConvUTF8)];
+#else
+ return [NSString stringWithCString: wxstring.c_str() length:wxstring.Len()];
+#endif // wxUSE_UNICODE
+}
+
+@interface MyFrameLoadMonitor : NSObject
+{
+ wxWindow* webKitWindow;
+}
+
+- initWithWxWindow: (wxWindow*)inWindow;
+
+@end
+
+// ----------------------------------------------------------------------------
+// creation/destruction
+// ----------------------------------------------------------------------------
+
+bool wxWebKitCtrl::Create(wxWindow *parent,
+ wxWindowID winID,
+ const wxString& strURL,
+ const wxPoint& pos,
+ const wxSize& size, long style,
+ const wxValidator& validator,
+ const wxString& name)
+{
+
+ m_currentURL = strURL;
+ m_pageTitle = "";
+
+ //still needed for wxCocoa??
+/*
+ int width, height;
+ wxSize sizeInstance;
+ if (size.x == -1 || size.y == -1)
+ {
+ m_parent->GetClientSize(&width, &height);
+ sizeInstance.x = width;
+ sizeInstance.y = height;
+ }
+ else
+ {
+ sizeInstance.x = size.x;
+ sizeInstance.y = size.y;
+ }
+*/
+ // now create and attach WebKit view...
+#ifdef __WXCOCOA__
+ wxControl::Create(parent, m_windowID, pos, sizeInstance, style , validator , name);
+ SetSize(pos.x, pos.y, sizeInstance.x, sizeInstance.y);
+
+ wxTopLevelWindowCocoa *topWin = wxDynamicCast(this, wxTopLevelWindowCocoa);
+ NSWindow* nsWin = topWin->GetNSWindow();
+ NSRect rect;
+ rect.origin.x = pos.x;
+ rect.origin.y = pos.y;
+ rect.size.width = sizeInstance.x;
+ rect.size.height = sizeInstance.y;
+ m_webView = (WebView*)[[WebView alloc] initWithFrame:rect frameName:@"webkitFrame" groupName:@"webkitGroup"];
+ SetNSView(m_webView);
+ [m_cocoaNSView release];
+
+ if(m_parent) m_parent->CocoaAddChild(this);
+ SetInitialFrameRect(pos,sizeInstance);
+#else
+ m_macIsUserPane = false;
+ wxControl::Create(parent, m_windowID, pos, size, style , validator , name);
+ WebInitForCarbon();
+ HIWebViewCreate( (HIViewRef*) &m_macControl );
+ MacPostControlCreate(pos, size);
+
+ HIViewSetVisible( (HIViewRef) m_macControl, true );
+
+ m_webView = (WebView*) HIWebViewGetWebView( (HIViewRef) m_macControl );
+#endif
+
+ // Register event listener interfaces
+ MyFrameLoadMonitor* myFrameLoadMonitor = [[MyFrameLoadMonitor alloc] initWithWxWindow: (wxWindow*)this];
+ [m_webView setFrameLoadDelegate:myFrameLoadMonitor];
+ LoadURL(m_currentURL);
+ return true;
+}
+
+wxWebKitCtrl::~wxWebKitCtrl()
+{
+
+}
+
+// ----------------------------------------------------------------------------
+// public methods
+// ----------------------------------------------------------------------------
+
+void wxWebKitCtrl::LoadURL(const wxString &url)
+{
+ if( !m_webView )
+ return;
+
+ [[m_webView mainFrame] loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithCString:url.c_str()]]]];
+
+ m_currentURL = url;
+}
+
+bool wxWebKitCtrl::CanGoBack(){
+ if ( !m_webView )
+ return false;
+
+ return [m_webView canGoBack];
+}
+
+bool wxWebKitCtrl::CanGoForward(){
+ if ( !m_webView )
+ return false;
+
+ return [m_webView canGoForward];
+}
+
+bool wxWebKitCtrl::GoBack(){
+ if ( !m_webView )
+ return false;
+
+ [m_webView goBack];
+ return true;
+}
+
+bool wxWebKitCtrl::GoForward(){
+ if ( !m_webView )
+ return false;
+
+ [m_webView goForward];
+ return true;
+}
+
+void wxWebKitCtrl::Reload(){
+ if ( !m_webView )
+ return;
+
+ [[m_webView mainFrame] reload];
+}
+
+void wxWebKitCtrl::Stop(){
+ if ( !m_webView )
+ return;
+
+ [[m_webView mainFrame] stopLoading];
+}
+
+bool wxWebKitCtrl::CanGetPageSource(){
+ if ( !m_webView )
+ return;
+
+ WebDataSource* dataSource = [[m_webView mainFrame] dataSource];
+ return ( [[dataSource representation] canProvideDocumentSource] );
+}
+
+wxString wxWebKitCtrl::GetPageSource(){
+ if ( !m_webView )
+ return;
+
+ if (CanGetPageSource()){
+ WebDataSource* dataSource = [[m_webView mainFrame] dataSource];
+ return wxStringWithNSString( [[dataSource representation] documentSource] );
+ }
+
+}
+
+void wxWebKitCtrl::SetPageSource(wxString& source, const wxString& baseUrl){
+ if ( !m_webView )
+ return;
+
+ if (CanGetPageSource()){
+ [[m_webView mainFrame] loadHTMLString:(NSString*)wxNSStringWithWxString( source ) baseURL:[NSURL URLWithString:wxNSStringWithWxString( baseUrl )]];
+ }
+
+}
+
+
+//------------------------------------------------------------
+// Listener interfaces
+//------------------------------------------------------------
+
+@implementation MyFrameLoadMonitor
+
+- initWithWxWindow: (wxWindow*)inWindow
+{
+ [super init];
+ webKitWindow = inWindow; // non retained
+ return self;
+}
+
+- (void)webView:(WebView *)sender didStartProvisionalLoadForFrame:(WebFrame *)frame
+{
+ if (frame == [sender mainFrame]){
+ NSString *url = [[[[frame provisionalDataSource] request] URL] absoluteString];
+ wxWebKitStateChangedEvent thisEvent(webKitWindow);
+ thisEvent.SetState(wxWEBKIT_STATE_NEGOTIATING);
+ thisEvent.SetURL( wxStringWithNSString( url ) );
+ webKitWindow->GetEventHandler()->ProcessEvent( thisEvent );
+ }
+}
+
+- (void)webView:(WebView *)sender didCommitLoadForFrame:(WebFrame *)frame
+{
+ if (frame == [sender mainFrame]){
+ NSString *url = [[[[frame provisionalDataSource] request] URL] absoluteString];
+ wxWebKitStateChangedEvent thisEvent(webKitWindow);
+ thisEvent.SetState(wxWEBKIT_STATE_TRANSFERRING);
+ thisEvent.SetURL( wxStringWithNSString( url ) );
+ webKitWindow->GetEventHandler()->ProcessEvent( thisEvent );
+ }
+}
+
+- (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame
+{
+ if (frame == [sender mainFrame]){
+ NSString *url = [[[[frame provisionalDataSource] request] URL] absoluteString];
+ wxWebKitStateChangedEvent thisEvent(webKitWindow);
+ thisEvent.SetState(wxWEBKIT_STATE_STOP);
+ thisEvent.SetURL( wxStringWithNSString( url ) );
+ webKitWindow->GetEventHandler()->ProcessEvent( thisEvent );
+ }
+}
+
+- (void)webView:(WebView *)sender didFailLoadWithError:(NSError*) error forFrame:(WebFrame *)frame
+{
+ if (frame == [sender mainFrame]){
+ NSString *url = [[[[frame provisionalDataSource] request] URL] absoluteString];
+ wxWebKitStateChangedEvent thisEvent(webKitWindow);
+ thisEvent.SetState(wxWEBKIT_STATE_FAILED);
+ thisEvent.SetURL( wxStringWithNSString( url ) );
+ webKitWindow->GetEventHandler()->ProcessEvent( thisEvent );
+ }
+}
+
+- (void)webView:(WebView *)sender didFailProvisionalLoadWithError:(NSError*) error forFrame:(WebFrame *)frame
+{
+ if (frame == [sender mainFrame]){
+ NSString *url = [[[[frame provisionalDataSource] request] URL] absoluteString];
+ wxWebKitStateChangedEvent thisEvent(webKitWindow);
+ thisEvent.SetState(wxWEBKIT_STATE_FAILED);
+ thisEvent.SetURL( wxStringWithNSString( url ) );
+ webKitWindow->GetEventHandler()->ProcessEvent( thisEvent );
+ }
+}
+
+- (void)webView:(WebView *)sender didReceiveTitle:(NSString *)title forFrame:(WebFrame *)frame
+{
+ if (frame == [sender mainFrame]){
+ webKitWindow->SetTitle(wxStringWithNSString( title ));
+ }
+}
+@end
\ No newline at end of file