# This demo uses the IE4 Web Browser control.

# It catches an "OnNavigate" event, and updates the frame title.
# (event stuff by Neil Hodgson)

import win32ui, win32con, win32api, regutil
from pywin.mfc import window, activex
from win32com.client import gencache
import sys

WebBrowserModule = gencache.EnsureModule("{EAB22AC0-30C1-11CF-A7EB-0000C05BAE0B}", 0, 1, 1)
if WebBrowserModule is None:
	raise ImportError("IE4 does not appear to be installed.")

class MyWebBrowser(activex.Control, WebBrowserModule.WebBrowser):
	def OnBeforeNavigate2(self, pDisp, URL, Flags, TargetFrameName, PostData, Headers, Cancel):
		self.GetParent().OnNavigate(URL)
		#print "BeforeNavigate2", pDisp, URL, Flags, TargetFrameName, PostData, Headers, Cancel

class BrowserFrame(window.MDIChildWnd):
	def __init__(self, url = None):
		if url is None:
			self.url = regutil.GetRegisteredHelpFile("Main Python Documentation")
			if self.url is None:
				self.url = "http://www.python.org"
		else:
			self.url = url
		pass # Dont call base class doc/view version...
	def Create(self, title, rect = None, parent = None):
		style = win32con.WS_CHILD | win32con.WS_VISIBLE | win32con.WS_OVERLAPPEDWINDOW
		self._obj_ = win32ui.CreateMDIChild()
		self._obj_.AttachObject(self)
		self._obj_.CreateWindow(None, title, style, rect, parent)
		rect = self.GetClientRect()
		rect = (0,0,rect[2]-rect[0], rect[3]-rect[1])
		self.ocx = MyWebBrowser()
		self.ocx.CreateControl("Web Browser", win32con.WS_VISIBLE | win32con.WS_CHILD, rect, self, 1000)		
		self.ocx.Navigate(self.url)
		self.HookMessage (self.OnSize, win32con.WM_SIZE)
	def OnSize (self, params):
		rect = self.GetClientRect()
		rect = (0,0,rect[2]-rect[0], rect[3]-rect[1])
		self.ocx.SetWindowPos(0, rect, 0)
	def OnNavigate(self, url):
		title = "Web Browser - %s" % (url,)
		self.SetWindowText(title)

def Demo(url=None):
	if url is None and len(sys.argv)>1:
		url = win32api.GetFullPathName(sys.argv[1])
	f = BrowserFrame(url)
	f.Create("Web Browser")

if __name__=='__main__':
	Demo()
