Poodletooth-iLand/panda/python/Lib/site-packages/wx/lib/iewin.py
2015-03-06 06:11:40 -06:00

249 lines
7.2 KiB
Python

#----------------------------------------------------------------------
# Name: wx.lib.iewin
# Purpose: A class that allows the use of the IE web browser
# ActiveX control
#
# Author: Robin Dunn
#
# Created: 22-March-2004
# Copyright: (c) 2008 by Total Control Software
# Licence: wxWindows license
#----------------------------------------------------------------------
import wx
import wx.lib.activex
import comtypes.client as cc
import sys
if not hasattr(sys, 'frozen'):
cc.GetModule('shdocvw.dll') # IWebBrowser2 and etc.
from comtypes.gen import SHDocVw
clsID = '{8856F961-340A-11D0-A96B-00C04FD705A2}'
progID = 'Shell.Explorer.2'
# Flags to be used with the RefreshPage method
REFRESH_NORMAL = 0
REFRESH_IFEXPIRED = 1
REFRESH_CONTINUE = 2
REFRESH_COMPLETELY = 3
# Flags to be used with LoadUrl, Navigate, Navigate2 methods
NAV_OpenInNewWindow = 0x1
NAV_NoHistory = 0x2
NAV_NoReadFromCache = 0x4
NAV_NoWriteToCache = 0x8
NAV_AllowAutosearch = 0x10
NAV_BrowserBar = 0x20
NAV_Hyperlink = 0x40
NAV_EnforceRestricted = 0x80,
NAV_NewWindowsManaged = 0x0100,
NAV_UntrustedForDownload = 0x0200,
NAV_TrustedForActiveX = 0x0400,
NAV_OpenInNewTab = 0x0800,
NAV_OpenInBackgroundTab = 0x1000,
NAV_KeepWordWheelText = 0x2000
#----------------------------------------------------------------------
class IEHtmlWindow(wx.lib.activex.ActiveXCtrl):
def __init__(self, parent, id=-1, pos=wx.DefaultPosition,
size=wx.DefaultSize, style=0, name='IEHtmlWindow'):
wx.lib.activex.ActiveXCtrl.__init__(self, parent, progID,
id, pos, size, style, name)
self._canGoBack = False
self._canGoForward = False
def LoadString(self, html):
"""Load the html document from a string"""
if self.ctrl.Document is None:
self.LoadUrl('about:blank')
doc = self.ctrl.Document
doc.write(html)
doc.close()
def LoadStream(self, stream):
"""
Load the html document from a Python file-like object.
"""
if self.ctrl.Document is None:
self.LoadUrl('about:blank')
doc = self.ctrl.Document
for line in stream:
doc.write(line)
doc.close()
def LoadUrl(self, URL, Flags=0):
"""Load the document from url."""
return self.ctrl.Navigate2(URL, Flags)
def GetStringSelection(self, asHTML=True):
"""
Returns the contents of the selected portion of the document as
either html or plain text.
"""
if self.ctrl.Document is None:
return ""
if not hasattr(sys, 'frozen'): cc.GetModule('mshtml.tlb')
from comtypes.gen import MSHTML
doc = self.ctrl.Document.QueryInterface(MSHTML.IHTMLDocument2)
sel = doc.selection
range = sel.createRange()
if asHTML:
return range.htmlText
else:
return range.text
def GetText(self, asHTML=True):
"""
Returns the contents of the the html document as either html or plain text.
"""
if self.ctrl.Document is None:
return ""
if not hasattr(sys, 'frozen'): cc.GetModule('mshtml.tlb')
from comtypes.gen import MSHTML
doc = self.ctrl.Document.QueryInterface(MSHTML.IHTMLDocument2)
if not asHTML:
# if just fetching the text then get it from the body property
return doc.body.innerText
# otherwise look in the all property
for idx in range(doc.all.length):
# the first item with content should be the <html> tag and all its
# children.
item = doc.all.item(idx)
if item is None:
continue
return item.outerHTML
return ""
def Print(self, showDialog=False):
if showDialog:
prompt = SHDocVw.OLECMDEXECOPT_PROMPTUSER
else:
prompt = SHDocVw.OLECMDEXECOPT_DONTPROMPTUSER
self.ctrl.ExecWB(SHDocVw.OLECMDID_PRINT, prompt)
def PrintPreview(self):
self.ctrl.ExecWB( SHDocVw.OLECMDID_PRINTPREVIEW,
SHDocVw.OLECMDEXECOPT_DODEFAULT)
def GoBack(self):
if self.CanGoBack():
return self.ctrl.GoBack()
def GoForward(self):
if self.CanGoForward():
return self.ctrl.GoForward()
def CanGoBack(self):
return self._canGoBack
def CanGoForward(self):
return self._canGoForward
def GoHome(self):
return self.ctrl.GoHome()
def GoSearch(self):
return self.ctrl.GoSearch()
def Navigate(self, URL, Flags=0, TargetFrameName=None, PostData=None, Headers=None):
return self.ctrl.Navigate2( URL, Flags, TargetFrameName, PostData, Headers)
def RefreshPage(self, Level=REFRESH_NORMAL):
return self.ctrl.Refresh2(Level)
def Stop(self):
return self.ctrl.Stop()
def Quit(self):
return self.ctrl.Quit()
# COM Event handlers
def CommandStateChange(self, this, command, enable):
# watch the command states to know when it is possible to use
# GoBack or GoForward
if command == SHDocVw.CSC_NAVIGATEFORWARD:
self._canGoForward = enable
if command == SHDocVw.CSC_NAVIGATEBACK:
self._canGoBack = enable
# Getters, Setters and properties
def _get_Busy(self):
return self.ctrl.Busy
busy = property(_get_Busy, None)
def _get_Document(self):
return self.ctrl.Document
document = property(_get_Document, None)
def _get_LocationName(self):
return self.ctrl.LocationName
locationname = property(_get_LocationName, None)
def _get_LocationURL(self):
return self.ctrl.LocationURL
locationurl = property(_get_LocationURL, None)
def _get_ReadyState(self):
return self.ctrl.ReadyState
readystate = property(_get_ReadyState, None)
def _get_Offline(self):
return self.ctrl.Offline
def _set_Offline(self, Offline):
self.ctrl.Offline = Offline
offline = property(_get_Offline, _set_Offline)
def _get_Silent(self):
return self.ctrl.Silent
def _set_Silent(self, Silent):
self.ctrl.Silent = Silent
silent = property(_get_Silent, _set_Silent)
def _get_RegisterAsBrowser(self):
return self.ctrl.RegisterAsBrowser
def _set_RegisterAsBrowser(self, RegisterAsBrowser):
self.ctrl.RegisterAsBrowser = RegisterAsBrowser
registerasbrowser = property(_get_RegisterAsBrowser, _set_RegisterAsBrowser)
def _get_RegisterAsDropTarget(self):
return self.ctrl.RegisterAsDropTarget
def _set_RegisterAsDropTarget(self, RegisterAsDropTarget):
self.ctrl.RegisterAsDropTarget = RegisterAsDropTarget
registerasdroptarget = property(_get_RegisterAsDropTarget, _set_RegisterAsDropTarget)
def _get_Type(self):
return self.ctrl.Type
type = property(_get_Type, None)
if __name__ == '__main__':
app = wx.App(False)
frm = wx.Frame(None, title="AX Test Window")
ie = IEHtmlWindow(frm)
frm.Show()
import wx.lib.inspection
wx.lib.inspection.InspectionTool().Show()
app.MainLoop()