+ document->get_nameProp(&title);
+ document->Release();
+ return wxString(title);
+}
+
+bool wxWebViewIE::CanCut()
+{
+ return CanExecCommand("Cut");
+}
+
+bool wxWebViewIE::CanCopy()
+{
+ return CanExecCommand("Copy");
+}
+bool wxWebViewIE::CanPaste()
+{
+ return CanExecCommand("Paste");
+}
+
+void wxWebViewIE::Cut()
+{
+ ExecCommand("Cut");
+}
+
+void wxWebViewIE::Copy()
+{
+ ExecCommand("Copy");
+}
+
+void wxWebViewIE::Paste()
+{
+ ExecCommand("Paste");
+}
+
+bool wxWebViewIE::CanUndo()
+{
+ return CanExecCommand("Undo");
+}
+bool wxWebViewIE::CanRedo()
+{
+ return CanExecCommand("Redo");
+}
+
+void wxWebViewIE::Undo()
+{
+ ExecCommand("Undo");
+}
+
+void wxWebViewIE::Redo()
+{
+ ExecCommand("Redo");
+}
+
+void wxWebViewIE::SetEditable(bool enable)
+{
+ IHTMLDocument2* document = GetDocument();
+ if( enable )
+ document->put_designMode(SysAllocString(L"On"));
+ else
+ document->put_designMode(SysAllocString(L"Off"));
+
+ document->Release();
+}
+
+bool wxWebViewIE::IsEditable()
+{
+ IHTMLDocument2* document = GetDocument();
+ BSTR mode;
+ document->get_designMode(&mode);
+ if(wxString(mode) == "On")
+ return true;
+ else
+ return false;
+
+ document->Release();
+}
+
+void wxWebViewIE::SelectAll()
+{
+ ExecCommand("SelectAll");
+}
+
+bool wxWebViewIE::HasSelection()
+{
+ IHTMLDocument2* document = GetDocument();
+ IHTMLSelectionObject* selection;
+ BSTR type;
+ HRESULT hr = document->get_selection(&selection);
+ if(SUCCEEDED(hr))
+ {
+ selection->get_type(&type);
+ selection->Release();
+ }
+ document->Release();
+ return wxString(type) != "None";
+}
+
+void wxWebViewIE::DeleteSelection()
+{
+ ExecCommand("Delete");
+}
+
+wxString wxWebViewIE::GetSelectedText()
+{
+ 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;
+}
+
+bool wxWebViewIE::CanExecCommand(wxString command)
+{
+ IHTMLDocument2* document = GetDocument();
+ VARIANT_BOOL enabled;
+
+ document->queryCommandEnabled(SysAllocString(command.wc_str()), &enabled);
+ document->Release();
+
+ return (enabled == VARIANT_TRUE);
+}
+
+void wxWebViewIE::ExecCommand(wxString command)
+{
+ IHTMLDocument2* document = GetDocument();
+ document->execCommand(SysAllocString(command.wc_str()), VARIANT_FALSE, VARIANT(), NULL);
+ document->Release();
+}
+
+IHTMLDocument2* wxWebViewIE::GetDocument()
+{
+ wxVariant variant = m_ie.GetProperty("Document");
+ IHTMLDocument2* document = (IHTMLDocument2*)variant.GetVoidPtr();
+
+ wxASSERT(document);
+
+ return document;