+void wxWebViewIE::DeleteSelection()
+{
+ ExecCommand("Delete");
+}
+
+wxString wxWebViewIE::GetSelectedText() const
+{
+ IHTMLDocument2* document = GetDocument();
+ IHTMLSelectionObject* selection;
+ wxString selected;
+ HRESULT hr = document->get_selection(&selection);
+ if(SUCCEEDED(hr))
+ {
+ IDispatch* disrange;
+ hr = selection->createRange(&disrange);
+ if(SUCCEEDED(hr))
+ {
+ IHTMLTxtRange* range;
+ hr = disrange->QueryInterface(IID_IHTMLTxtRange, (void**)&range);
+ if(SUCCEEDED(hr))
+ {
+ BSTR text;
+ range->get_text(&text);
+ selected = wxString(text);
+ range->Release();
+ }
+ disrange->Release();
+ }
+ selection->Release();
+ }
+ document->Release();
+ return selected;
+}
+
+wxString wxWebViewIE::GetSelectedSource() const
+{
+ IHTMLDocument2* document = GetDocument();
+ IHTMLSelectionObject* selection;
+ wxString selected;
+ HRESULT hr = document->get_selection(&selection);
+ if(SUCCEEDED(hr))
+ {
+ IDispatch* disrange;
+ hr = selection->createRange(&disrange);
+ if(SUCCEEDED(hr))
+ {
+ IHTMLTxtRange* range;
+ hr = disrange->QueryInterface(IID_IHTMLTxtRange, (void**)&range);
+ if(SUCCEEDED(hr))
+ {
+ BSTR text;
+ range->get_htmlText(&text);
+ selected = wxString(text);
+ range->Release();
+ }
+ disrange->Release();
+ }
+ selection->Release();
+ }
+ document->Release();
+ return selected;
+}
+
+void wxWebViewIE::ClearSelection()
+{
+ IHTMLDocument2* document = GetDocument();
+ IHTMLSelectionObject* selection;
+ wxString selected;
+ HRESULT hr = document->get_selection(&selection);
+ if(SUCCEEDED(hr))
+ {
+ selection->empty();
+ selection->Release();
+ }
+ document->Release();
+}
+
+wxString wxWebViewIE::GetPageText() const
+{
+ IHTMLDocument2* document = GetDocument();
+ wxString text;
+ IHTMLElement* body;
+ HRESULT hr = document->get_body(&body);
+ if(SUCCEEDED(hr))
+ {
+ BSTR out;
+ body->get_innerText(&out);
+ text = wxString(out);
+ body->Release();
+ }
+ document->Release();
+ return text;
+}
+
+void wxWebViewIE::RunScript(const wxString& javascript)
+{
+ IHTMLDocument2* document = GetDocument();
+ IHTMLWindow2* window;
+ wxString language = "javascript";
+ HRESULT hr = document->get_parentWindow(&window);
+ if(SUCCEEDED(hr))
+ {
+ VARIANT level;
+ VariantInit(&level);
+ V_VT(&level) = VT_EMPTY;
+ window->execScript(SysAllocString(javascript.wc_str()),
+ SysAllocString(language.wc_str()),
+ &level);
+ }
+ document->Release();
+}
+
+void wxWebViewIE::RegisterHandler(wxSharedPtr<wxWebViewHandler> handler)
+{
+ wxDynamicLibrary urlMon(wxT("urlmon.dll"));
+ if(urlMon.HasSymbol(wxT("CoInternetGetSession")))
+ {
+ typedef HRESULT (WINAPI *CoInternetGetSession_t)(DWORD, wxIInternetSession**, DWORD);
+ wxDYNLIB_FUNCTION(CoInternetGetSession_t, CoInternetGetSession, urlMon);
+
+ ClassFactory* cf = new ClassFactory(handler);
+ wxIInternetSession* session;
+ HRESULT res = (*pfnCoInternetGetSession)(0, &session, 0);
+ if(FAILED(res))
+ {
+ wxFAIL_MSG("Could not retrive internet session");
+ }
+
+ HRESULT hr = session->RegisterNameSpace(cf, CLSID_FileProtocol,
+ handler->GetName().wc_str(),
+ 0, NULL, 0);
+ if(FAILED(hr))
+ {
+ wxFAIL_MSG("Could not register protocol");
+ }
+ m_factories.push_back(cf);
+ }
+ else
+ {
+ wxFAIL_MSG("urlmon does not contain CoInternetGetSession");
+ }
+}
+
+bool wxWebViewIE::CanExecCommand(wxString command) const
+{
+ IHTMLDocument2* document = GetDocument();