1 # 11/18/2003 - Jeff Grimmett (grimmtooth@softhome.net)
3 # o Updated for wx namespace
8 if wx
.Platform
== '__WXMSW__':
9 import wx
.lib
.iewin
as iewin
11 #----------------------------------------------------------------------
13 class TestPanel(wx
.Panel
):
14 def __init__(self
, parent
, log
, frame
=None):
17 style
=wx
.TAB_TRAVERSAL|wx
.CLIP_CHILDREN|wx
.NO_FULL_REPAINT_ON_RESIZE
21 self
.current
= "http://wxPython.org/"
25 self
.titleBase
= frame
.GetTitle()
27 sizer
= wx
.BoxSizer(wx
.VERTICAL
)
28 btnSizer
= wx
.BoxSizer(wx
.HORIZONTAL
)
30 self
.ie
= iewin
.IEHtmlWindow(self
, -1, style
= wx
.NO_FULL_REPAINT_ON_RESIZE
)
33 btn
= wx
.Button(self
, -1, "Open", style
=wx
.BU_EXACTFIT
)
34 self
.Bind(wx
.EVT_BUTTON
, self
.OnOpenButton
, btn
)
35 btnSizer
.Add(btn
, 0, wx
.EXPAND|wx
.ALL
, 2)
37 btn
= wx
.Button(self
, -1, "Home", style
=wx
.BU_EXACTFIT
)
38 self
.Bind(wx
.EVT_BUTTON
, self
.OnHomeButton
, btn
)
39 btnSizer
.Add(btn
, 0, wx
.EXPAND|wx
.ALL
, 2)
41 btn
= wx
.Button(self
, -1, "<--", style
=wx
.BU_EXACTFIT
)
42 self
.Bind(wx
.EVT_BUTTON
, self
.OnPrevPageButton
, btn
)
43 btnSizer
.Add(btn
, 0, wx
.EXPAND|wx
.ALL
, 2)
45 btn
= wx
.Button(self
, -1, "-->", style
=wx
.BU_EXACTFIT
)
46 self
.Bind(wx
.EVT_BUTTON
, self
.OnNextPageButton
, btn
)
47 btnSizer
.Add(btn
, 0, wx
.EXPAND|wx
.ALL
, 2)
49 btn
= wx
.Button(self
, -1, "Stop", style
=wx
.BU_EXACTFIT
)
50 self
.Bind(wx
.EVT_BUTTON
, self
.OnStopButton
, btn
)
51 btnSizer
.Add(btn
, 0, wx
.EXPAND|wx
.ALL
, 2)
53 btn
= wx
.Button(self
, -1, "Search", style
=wx
.BU_EXACTFIT
)
54 self
.Bind(wx
.EVT_BUTTON
, self
.OnSearchPageButton
, btn
)
55 btnSizer
.Add(btn
, 0, wx
.EXPAND|wx
.ALL
, 2)
57 btn
= wx
.Button(self
, -1, "Refresh", style
=wx
.BU_EXACTFIT
)
58 self
.Bind(wx
.EVT_BUTTON
, self
.OnRefreshPageButton
, btn
)
59 btnSizer
.Add(btn
, 0, wx
.EXPAND|wx
.ALL
, 2)
61 txt
= wx
.StaticText(self
, -1, "Location:")
62 btnSizer
.Add(txt
, 0, wx
.CENTER|wx
.ALL
, 2)
64 self
.location
= wx
.ComboBox(
65 self
, -1, "", style
=wx
.CB_DROPDOWN|wx
.PROCESS_ENTER
68 self
.Bind(wx
.EVT_COMBOBOX
, self
.OnLocationSelect
, self
.location
)
69 self
.location
.Bind(wx
.EVT_KEY_UP
, self
.OnLocationKey
)
70 self
.location
.Bind(wx
.EVT_CHAR
, self
.IgnoreReturn
)
71 btnSizer
.Add(self
.location
, 1, wx
.EXPAND|wx
.ALL
, 2)
73 sizer
.Add(btnSizer
, 0, wx
.EXPAND
)
74 sizer
.Add(self
.ie
, 1, wx
.EXPAND
)
76 self
.ie
.LoadUrl(self
.current
)
77 self
.location
.Append(self
.current
)
80 # Since this is a wxWindow we have to call Layout ourselves
81 self
.Bind(wx
.EVT_SIZE
, self
.OnSize
)
83 # Hook up the event handlers for the IE window
84 self
.Bind(iewin
.EVT_BeforeNavigate2
, self
.OnBeforeNavigate2
, self
.ie
)
85 self
.Bind(iewin
.EVT_NewWindow2
, self
.OnNewWindow2
, self
.ie
)
86 self
.Bind(iewin
.EVT_DocumentComplete
, self
.OnDocumentComplete
, self
.ie
)
87 ##self.Bind(iewin.EVT_ProgressChange, self.OnProgressChange, self.ie)
88 self
.Bind(iewin
.EVT_StatusTextChange
, self
.OnStatusTextChange
, self
.ie
)
89 self
.Bind(iewin
.EVT_TitleChange
, self
.OnTitleChange
, self
.ie
)
92 def ShutdownDemo(self
):
93 # put the frame title back
95 self
.frame
.SetTitle(self
.titleBase
)
98 def OnSize(self
, evt
):
102 def OnLocationSelect(self
, evt
):
103 url
= self
.location
.GetStringSelection()
104 self
.log
.write('OnLocationSelect: %s\n' % url
)
105 self
.ie
.Navigate(url
)
107 def OnLocationKey(self
, evt
):
108 if evt
.KeyCode() == wx
.WXK_RETURN
:
109 URL
= self
.location
.GetValue()
110 self
.location
.Append(URL
)
111 self
.ie
.Navigate(URL
)
116 def IgnoreReturn(self
, evt
):
117 if evt
.GetKeyCode() != wx
.WXK_RETURN
:
120 def OnOpenButton(self
, event
):
121 dlg
= wx
.TextEntryDialog(self
, "Open Location",
122 "Enter a full URL or local path",
123 self
.current
, wx
.OK|wx
.CANCEL
)
126 if dlg
.ShowModal() == wx
.ID_OK
:
127 self
.current
= dlg
.GetValue()
128 self
.ie
.Navigate(self
.current
)
132 def OnHomeButton(self
, event
):
133 self
.ie
.GoHome() ## ET Phone Home!
135 def OnPrevPageButton(self
, event
):
138 def OnNextPageButton(self
, event
):
141 def OnStopButton(self
, evt
):
144 def OnSearchPageButton(self
, evt
):
147 def OnRefreshPageButton(self
, evt
):
148 self
.ie
.Refresh(iewin
.REFRESH_COMPLETELY
)
151 def logEvt(self
, evt
):
153 for name
in evt
.paramList
:
154 pst
+= " %s:%s " % (name
, repr(getattr(evt
, name
)))
155 self
.log
.write('%s: %s\n' % (evt
.eventName
, pst
))
158 def OnBeforeNavigate2(self
, evt
):
161 def OnNewWindow2(self
, evt
):
163 # Veto the new window. Cancel is defined as an "out" param
164 # for this event. See iewin.py
167 def OnProgressChange(self
, evt
):
170 def OnDocumentComplete(self
, evt
):
172 self
.current
= evt
.URL
173 self
.location
.SetValue(self
.current
)
175 def OnTitleChange(self
, evt
):
178 self
.frame
.SetTitle(self
.titleBase
+ ' -- ' + evt
.Text
)
180 def OnStatusTextChange(self
, evt
):
183 self
.frame
.SetStatusText(evt
.Text
)
186 #----------------------------------------------------------------------
187 # for the demo framework...
189 def runTest(frame
, nb
, log
):
190 if wx
.Platform
== '__WXMSW__':
191 win
= TestPanel(nb
, log
, frame
)
194 dlg
= wx
.MessageDialog(frame
, 'This demo only works on Windows.',
195 'Sorry', wx
.OK | wx
.ICON_INFORMATION
)
203 <h2>wx.lib.iewin.IEHtmlWindow</h2>
205 The wx.lib.iewin.IEHtmlWindow class is one example of using ActiveX
206 controls from wxPython using the new wx.activex module. This allows
207 you to use an ActiveX control as if it is a wx.Window, you can call
208 its methods, set/get properties, and receive events from the ActiveX
209 control in a very intuitive way.
211 <p> Using this class is simpler than ActiveXWrapper, doesn't rely on
212 the win32all extensions, and is more "wx\'ish", meaning that it uses
213 events and etc. as would be expected from any other wx window.
220 if __name__
== '__main__':
223 run
.main(['', os
.path
.basename(sys
.argv
[0])] + sys
.argv
[1:])
226 #----------------------------------------------------------------------