1 /////////////////////////////////////////////////////////////////////////////
2 // Name: wx/html/webkit.h
3 // Purpose: wxWebKitCtrl - embeddable web kit control
4 // Author: Jethro Grassie / Kevin Ollivier
8 // Copyright: (c) Jethro Grassie / Kevin Ollivier
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
17 #if !defined(__WXMAC__) && !defined(__WXCOCOA__)
18 #error "wxWebKitCtrl not implemented for this platform"
21 #include "wx/control.h"
23 // ----------------------------------------------------------------------------
25 // ----------------------------------------------------------------------------
27 class WXDLLIMPEXP_CORE wxWebKitCtrl
: public wxControl
30 DECLARE_DYNAMIC_CLASS(wxWebKitCtrl
)
33 wxWebKitCtrl(wxWindow
*parent
,
35 const wxString
& strURL
,
36 const wxPoint
& pos
= wxDefaultPosition
,
37 const wxSize
& size
= wxDefaultSize
, long style
= 0,
38 const wxValidator
& validator
= wxDefaultValidator
,
39 const wxString
& name
= wxT("webkitctrl"))
41 Create(parent
, winID
, strURL
, pos
, size
, style
, validator
, name
);
43 bool Create(wxWindow
*parent
,
45 const wxString
& strURL
,
46 const wxPoint
& pos
= wxDefaultPosition
,
47 const wxSize
& size
= wxDefaultSize
, long style
= 0,
48 const wxValidator
& validator
= wxDefaultValidator
,
49 const wxString
& name
= wxT("webkitctrl"));
50 virtual ~wxWebKitCtrl();
52 void LoadURL(const wxString
&url
);
60 bool CanGetPageSource();
61 wxString
GetPageSource();
62 void SetPageSource(const wxString
& source
, const wxString
& baseUrl
= wxEmptyString
);
63 wxString
GetPageURL(){ return m_currentURL
; }
64 void SetPageTitle(const wxString
& title
) { m_pageTitle
= title
; }
65 wxString
GetPageTitle(){ return m_pageTitle
; }
67 // since these worked in 2.6, add wrappers
68 void SetTitle(const wxString
& title
) { SetPageTitle(title
); }
69 wxString
GetTitle() { return GetPageTitle(); }
71 wxString
GetSelection();
73 bool CanIncreaseTextSize();
74 void IncreaseTextSize();
75 bool CanDecreaseTextSize();
76 void DecreaseTextSize();
78 void Print(bool showPrompt
= false);
80 void MakeEditable(bool enable
= true);
83 wxString
RunScript(const wxString
& javascript
);
85 void SetScrollPos(int pos
);
88 // don't hide base class virtuals
89 virtual void SetScrollPos( int orient
, int pos
, bool refresh
= true )
90 { return wxControl::SetScrollPos(orient
, pos
, refresh
); }
91 virtual int GetScrollPos( int orient
) const
92 { return wxControl::GetScrollPos(orient
); }
94 //we need to resize the webview when the control size changes
95 void OnSize(wxSizeEvent
&event
);
96 void OnMove(wxMoveEvent
&event
);
97 void OnMouseEvents(wxMouseEvent
&event
);
100 void MacVisibilityChanged();
104 wxWindowID m_windowID
;
105 wxString m_currentURL
;
106 wxString m_pageTitle
;
108 struct objc_object
*m_webView
;
110 // we may use this later to setup our own mouse events,
111 // so leave it in for now.
112 void* m_webKitCtrlEventHandler
;
113 //It should be WebView*, but WebView is an Objective-C class
114 //TODO: look into using DECLARE_WXCOCOA_OBJC_CLASS rather than this.
117 // ----------------------------------------------------------------------------
119 // ----------------------------------------------------------------------------
122 wxWEBKIT_STATE_START
= 1,
123 wxWEBKIT_STATE_NEGOTIATING
= 2,
124 wxWEBKIT_STATE_REDIRECTING
= 4,
125 wxWEBKIT_STATE_TRANSFERRING
= 8,
126 wxWEBKIT_STATE_STOP
= 16,
127 wxWEBKIT_STATE_FAILED
= 32
131 wxWEBKIT_NAV_LINK_CLICKED
= 1,
132 wxWEBKIT_NAV_BACK_NEXT
= 2,
133 wxWEBKIT_NAV_FORM_SUBMITTED
= 4,
134 wxWEBKIT_NAV_RELOAD
= 8,
135 wxWEBKIT_NAV_FORM_RESUBMITTED
= 16,
136 wxWEBKIT_NAV_OTHER
= 32
142 class WXDLLIMPEXP_CORE wxWebKitBeforeLoadEvent
: public wxCommandEvent
144 DECLARE_DYNAMIC_CLASS( wxWebKitBeforeLoadEvent
)
147 bool IsCancelled() { return m_cancelled
; }
148 void Cancel(bool cancel
= true) { m_cancelled
= cancel
; }
149 wxString
GetURL() { return m_url
; }
150 void SetURL(const wxString
& url
) { m_url
= url
; }
151 void SetNavigationType(int navType
) { m_navType
= navType
; }
152 int GetNavigationType() { return m_navType
; }
154 wxWebKitBeforeLoadEvent( wxWindow
* win
= NULL
);
155 wxEvent
*Clone(void) const { return new wxWebKitBeforeLoadEvent(*this); }
163 class WXDLLIMPEXP_CORE wxWebKitStateChangedEvent
: public wxCommandEvent
165 DECLARE_DYNAMIC_CLASS( wxWebKitStateChangedEvent
)
168 int GetState() { return m_state
; }
169 void SetState(const int state
) { m_state
= state
; }
170 wxString
GetURL() { return m_url
; }
171 void SetURL(const wxString
& url
) { m_url
= url
; }
173 wxWebKitStateChangedEvent( wxWindow
* win
= NULL
);
174 wxEvent
*Clone(void) const { return new wxWebKitStateChangedEvent(*this); }
182 class WXDLLIMPEXP_CORE wxWebKitNewWindowEvent
: public wxCommandEvent
184 DECLARE_DYNAMIC_CLASS( wxWebViewNewWindowEvent
)
186 wxString
GetURL() const { return m_url
; }
187 void SetURL(const wxString
& url
) { m_url
= url
; }
188 wxString
GetTargetName() const { return m_targetName
; }
189 void SetTargetName(const wxString
& name
) { m_targetName
= name
; }
191 wxWebKitNewWindowEvent( wxWindow
* win
= (wxWindow
*)(NULL
));
192 wxEvent
*Clone(void) const { return new wxWebKitNewWindowEvent(*this); }
196 wxString m_targetName
;
199 typedef void (wxEvtHandler::*wxWebKitStateChangedEventFunction
)(wxWebKitStateChangedEvent
&);
200 typedef void (wxEvtHandler::*wxWebKitBeforeLoadEventFunction
)(wxWebKitBeforeLoadEvent
&);
201 typedef void (wxEvtHandler::*wxWebKitNewWindowEventFunction
)(wxWebKitNewWindowEvent
&);
203 #define wxWebKitStateChangedEventHandler( func ) \
204 wxEVENT_HANDLER_CAST( wxWebKitStateChangedEventFunction, func )
206 #define wxWebKitBeforeLoadEventHandler( func ) \
207 wxEVENT_HANDLER_CAST( wxWebKitBeforeLoadEventFunction, func )
209 #define wxWebKitNewWindowEventHandler( func ) \
210 wxEVENT_HANDLER_CAST( wxWebKitNewWindowEventFunction, func )
212 wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_CORE
, wxEVT_WEBKIT_STATE_CHANGED
, wxWebKitStateChangedEvent
);
213 wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_CORE
, wxEVT_WEBKIT_BEFORE_LOAD
, wxWebKitBeforeLoadEvent
);
214 wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_CORE
, wxEVT_WEBKIT_NEW_WINDOW
, wxWebKitNewWindowEvent
);
216 #define EVT_WEBKIT_STATE_CHANGED(func) \
217 DECLARE_EVENT_TABLE_ENTRY( wxEVT_WEBKIT_STATE_CHANGED, \
220 wxWebKitStateChangedEventHandler( func ), \
223 #define EVT_WEBKIT_BEFORE_LOAD(func) \
224 DECLARE_EVENT_TABLE_ENTRY( wxEVT_WEBKIT_BEFORE_LOAD, \
227 wxWebKitBeforeLoadEventHandler( func ), \
230 #define EVT_WEBKIT_NEW_WINDOW(func) \
231 DECLARE_EVENT_TABLE_ENTRY( wxEVT_WEBKIT_NEW_WINDOW, \
234 wxWebKitNewWindowEventFunction( func ), \
236 #endif // wxUSE_WEBKIT