1 # 11/18/2003 - Jeff Grimmett (grimmtooth@softhome.net) 
   3 # o Updated for wx namespace 
   5 # 11/28/2003 - Jeff Grimmett (grimmtooth@softhome.net) 
   7 # o iewin.py is missing 
  12 if wx
.Platform 
== '__WXMSW__': 
  13     import  wx
.iewin    
as  iewin
 
  15 #---------------------------------------------------------------------- 
  17 class TestPanel(wx
.Window
): 
  18     def __init__(self
, parent
, log
, frame
=None): 
  21             style
=wx
.TAB_TRAVERSAL|wx
.CLIP_CHILDREN|wx
.NO_FULL_REPAINT_ON_RESIZE
 
  25         self
.current 
= "http://wxPython.org/" 
  29             self
.titleBase 
= frame
.GetTitle() 
  31         sizer 
= wx
.BoxSizer(wx
.VERTICAL
) 
  32         btnSizer 
= wx
.BoxSizer(wx
.HORIZONTAL
) 
  34         self
.ie 
= iewin
.IEHtmlWin(self
, -1, style 
= wx
.NO_FULL_REPAINT_ON_RESIZE
) 
  37         btn 
= wx
.Button(self
, wx
.NewId(), "Open", style
=wx
.BU_EXACTFIT
) 
  38         wx
.EVT_BUTTON(self
, btn
.GetId(), self
.OnOpenButton
) 
  39         btnSizer
.Add(btn
, 0, wx
.EXPAND|wx
.ALL
, 2) 
  41         btn 
= wx
.Button(self
, wx
.NewId(), "Home", style
=wx
.BU_EXACTFIT
) 
  42         wx
.EVT_BUTTON(self
, btn
.GetId(), self
.OnHomeButton
) 
  43         btnSizer
.Add(btn
, 0, wx
.EXPAND|wx
.ALL
, 2) 
  45         btn 
= wx
.Button(self
, wx
.NewId(), "<--", style
=wx
.BU_EXACTFIT
) 
  46         wx
.EVT_BUTTON(self
, btn
.GetId(), self
.OnPrevPageButton
) 
  47         btnSizer
.Add(btn
, 0, wx
.EXPAND|wx
.ALL
, 2) 
  49         btn 
= wx
.Button(self
, wx
.NewId(), "-->", style
=wx
.BU_EXACTFIT
) 
  50         wx
.EVT_BUTTON(self
, btn
.GetId(), self
.OnNextPageButton
) 
  51         btnSizer
.Add(btn
, 0, wx
.EXPAND|wx
.ALL
, 2) 
  53         btn 
= wx
.Button(self
, wx
.NewId(), "Stop", style
=wx
.BU_EXACTFIT
) 
  54         wx
.EVT_BUTTON(self
, btn
.GetId(), self
.OnStopButton
) 
  55         btnSizer
.Add(btn
, 0, wx
.EXPAND|wx
.ALL
, 2) 
  57         btn 
= wx
.Button(self
, wx
.NewId(), "Search", style
=wx
.BU_EXACTFIT
) 
  58         wx
.EVT_BUTTON(self
, btn
.GetId(), self
.OnSearchPageButton
) 
  59         btnSizer
.Add(btn
, 0, wx
.EXPAND|wx
.ALL
, 2) 
  61         btn 
= wx
.Button(self
, wx
.NewId(), "Refresh", style
=wx
.BU_EXACTFIT
) 
  62         wx
.EVT_BUTTON(self
, btn
.GetId(), self
.OnRefreshPageButton
) 
  63         btnSizer
.Add(btn
, 0, wx
.EXPAND|wx
.ALL
, 2) 
  65         txt 
= wx
.StaticText(self
, -1, "Location:") 
  66         btnSizer
.Add(txt
, 0, wx
.CENTER|wx
.ALL
, 2) 
  68         self
.location 
= wx
.ComboBox( 
  69                             self
, wx
.NewId(), "", style
=wx
.CB_DROPDOWN|wx
.PROCESS_ENTER
 
  72         wx
.EVT_COMBOBOX(self
, self
.location
.GetId(), self
.OnLocationSelect
) 
  73         wx
.EVT_KEY_UP(self
.location
, self
.OnLocationKey
) 
  74         wx
.EVT_CHAR(self
.location
, self
.IgnoreReturn
) 
  75         btnSizer
.Add(self
.location
, 1, wx
.EXPAND|wx
.ALL
, 2) 
  77         sizer
.Add(btnSizer
, 0, wx
.EXPAND
) 
  78         sizer
.Add(self
.ie
, 1, wx
.EXPAND
) 
  80         self
.ie
.Navigate(self
.current
) 
  81         self
.location
.Append(self
.current
) 
  84         self
.SetAutoLayout(True) 
  85         wx
.EVT_SIZE(self
, self
.OnSize
) 
  87         # Hook up the event handlers for the IE window 
  88         iewin
.EVT_MSHTML_BEFORENAVIGATE2(self
, -1, self
.OnBeforeNavigate2
) 
  89         iewin
.EVT_MSHTML_NEWWINDOW2(self
, -1, self
.OnNewWindow2
) 
  90         iewin
.EVT_MSHTML_DOCUMENTCOMPLETE(self
, -1, self
.OnDocumentComplete
) 
  91         #EVT_MSHTML_PROGRESSCHANGE(self, -1, self.OnProgressChange) 
  92         iewin
.EVT_MSHTML_STATUSTEXTCHANGE(self
, -1, self
.OnStatusTextChange
) 
  93         iewin
.EVT_MSHTML_TITLECHANGE(self
, -1, self
.OnTitleChange
) 
  96     def ShutdownDemo(self
): 
  97         # put the frame title back 
  99             self
.frame
.SetTitle(self
.titleBase
) 
 102     def OnSize(self
, evt
): 
 106     def OnLocationSelect(self
, evt
): 
 107         url 
= self
.location
.GetStringSelection() 
 108         self
.log
.write('OnLocationSelect: %s\n' % url
) 
 109         self
.ie
.Navigate(url
) 
 111     def OnLocationKey(self
, evt
): 
 112         if evt
.KeyCode() == wx
.WXK_RETURN
: 
 113             URL 
= self
.location
.GetValue() 
 114             self
.location
.Append(URL
) 
 115             self
.ie
.Navigate(URL
) 
 120     def IgnoreReturn(self
, evt
): 
 121         if evt
.GetKeyCode() != wx
.WXK_RETURN
: 
 124     def OnOpenButton(self
, event
): 
 125         dlg 
= wx
.TextEntryDialog(self
, "Open Location", 
 126                                 "Enter a full URL or local path", 
 127                                 self
.current
, wx
.OK|wx
.CANCEL
) 
 130         if dlg
.ShowModal() == wx
.ID_OK
: 
 131             self
.current 
= dlg
.GetValue() 
 132             self
.ie
.Navigate(self
.current
) 
 136     def OnHomeButton(self
, event
): 
 137         self
.ie
.GoHome()    ## ET Phone Home! 
 139     def OnPrevPageButton(self
, event
): 
 142     def OnNextPageButton(self
, event
): 
 145     def OnStopButton(self
, evt
): 
 148     def OnSearchPageButton(self
, evt
): 
 151     def OnRefreshPageButton(self
, evt
): 
 152         self
.ie
.Refresh(iewin
.IEHTML_REFRESH_COMPLETELY
) 
 155     def logEvt(self
, name
, event
): 
 156         self
.log
.write('%s: %s\n' % 
 157                        (name
, (event
.GetLong1(), event
.GetLong2(), event
.GetText1()))) 
 159     def OnBeforeNavigate2(self
, evt
): 
 160         self
.logEvt('OnBeforeNavigate2', evt
) 
 162     def OnNewWindow2(self
, evt
): 
 163         self
.logEvt('OnNewWindow2', evt
) 
 164         evt
.Veto() # don't allow it 
 166     def OnDocumentComplete(self
, evt
): 
 167         self
.logEvt('OnDocumentComplete', evt
) 
 168         self
.current 
= evt
.GetText1() 
 169         self
.location
.SetValue(self
.current
) 
 171     def OnTitleChange(self
, evt
): 
 172         self
.logEvt('OnTitleChange', evt
) 
 174             self
.frame
.SetTitle(self
.titleBase 
+ ' -- ' + evt
.GetText1()) 
 176     def OnStatusTextChange(self
, evt
): 
 177         self
.logEvt('OnStatusTextChange', evt
) 
 179             self
.frame
.SetStatusText(evt
.GetText1()) 
 182 #---------------------------------------------------------------------- 
 183 # for the demo framework... 
 185 def runTest(frame
, nb
, log
): 
 186     if wx
.Platform 
== '__WXMSW__': 
 187         win 
= TestPanel(nb
, log
, frame
) 
 190         dlg 
= wx
.MessageDialog(frame
, 'This demo only works on MSW.', 
 191                           'Sorry', wx
.OK | wx
.ICON_INFORMATION
) 
 199 <h2>wx.IEHtmlWin</h2> 
 201 The wx.IEHtmlWin class is the first example of using a contributed 
 202 wxActiveX class in wxWindows C++.  It is still experimental, but 
 203 I think it is useful. 
 205 <p> Using this class is simpler than ActiveXWrapper, doesn't rely on 
 206 the win32all extensions, and is more "wx\'ish", meaning that it uses 
 207 events and etc. as would be expected from any other wx window. 
 214 if __name__ 
== '__main__': 
 217     run
.main(['', os
.path
.basename(sys
.argv
[0])]) 
 220 #----------------------------------------------------------------------