]> git.saurik.com Git - wxWidgets.git/blame - wxPython/demo/ActiveXWrapper_IE.py
Typo fixed
[wxWidgets.git] / wxPython / demo / ActiveXWrapper_IE.py
CommitLineData
f6bcfd97
BP
1"""
2<html><body>
3This demo shows how to embed an ActiveX control in a wxPython
4application, (Win32 only.)
5
6<p>
7The MakeActiveXClass function dynamically builds a new Class on the
8fly, that has the same signature and semantics as wxWindow. This
9means that when you call the function you get back a new class that
10you can use just like wxWindow, (set the size and position, use in a
11sizer, etc.) except its contents will be the COM control.
12
13<p>
14This demo embeds the Internet Exploer WebBrowser control, and shows
15how to receive events from the COM control. (The title bar and status
16bar are updated as pages change, in addition to the log messages being
17shown.)
18</body></html>
19"""
20
21from wxPython.wx import *
22
23if wxPlatform == '__WXMSW__':
24 from wxPython.lib.activexwrapper import MakeActiveXClass
25 import win32com.client.gencache
26
27 try:
28 browserModule = win32com.client.gencache.EnsureModule("{EAB22AC0-30C1-11CF-A7EB-0000C05BAE0B}", 0, 1, 1)
29 except:
30 raise ImportError("IE4 or greater does not appear to be installed.")
31
32
33#----------------------------------------------------------------------
34
35class TestPanel(wxWindow):
36 def __init__(self, parent, log, frame=None):
c2dac736
RD
37 wxWindow.__init__(self, parent, -1,
38 style=wxCLIP_CHILDREN|wxNO_FULL_REPAINT_ON_RESIZE)
f6bcfd97
BP
39 self.ie = None
40 self.log = log
c368d904 41 self.current = "http://wxPython.org/"
f6bcfd97
BP
42 self.frame = frame
43 if frame:
44 self.titleBase = frame.GetTitle()
45
46
47 sizer = wxBoxSizer(wxVERTICAL)
48 btnSizer = wxBoxSizer(wxHORIZONTAL)
49
50 # Make a new class that derives from the WebBrowser class in the
51 # COM module imported above. This class also derives from wxWindow and
52 # implements the machinery needed to integrate the two worlds.
53 theClass = MakeActiveXClass(browserModule.WebBrowser,
54 eventObj = self)
55
56 # Create an instance of that class
c2dac736 57 self.ie = theClass(self, -1) ##, style=wxSUNKEN_BORDER)
f6bcfd97
BP
58
59
c2dac736
RD
60 btn = wxButton(self, wxNewId(), "Open", style=wxBU_EXACTFIT)
61 EVT_BUTTON(self, btn.GetId(), self.OnOpenButton)
62 btnSizer.Add(btn, 0, wxEXPAND|wxALL, 2)
f6bcfd97 63
c2dac736 64 btn = wxButton(self, wxNewId(), "Home", style=wxBU_EXACTFIT)
f6bcfd97 65 EVT_BUTTON(self, btn.GetId(), self.OnHomeButton)
c2dac736 66 btnSizer.Add(btn, 0, wxEXPAND|wxALL, 2)
f6bcfd97 67
c2dac736 68 btn = wxButton(self, wxNewId(), "<--", style=wxBU_EXACTFIT)
f6bcfd97 69 EVT_BUTTON(self, btn.GetId(), self.OnPrevPageButton)
c2dac736 70 btnSizer.Add(btn, 0, wxEXPAND|wxALL, 2)
f6bcfd97 71
c2dac736 72 btn = wxButton(self, wxNewId(), "-->", style=wxBU_EXACTFIT)
f6bcfd97 73 EVT_BUTTON(self, btn.GetId(), self.OnNextPageButton)
c2dac736
RD
74 btnSizer.Add(btn, 0, wxEXPAND|wxALL, 2)
75
76 btn = wxButton(self, wxNewId(), "Stop", style=wxBU_EXACTFIT)
77 EVT_BUTTON(self, btn.GetId(), self.OnStopButton)
78 btnSizer.Add(btn, 0, wxEXPAND|wxALL, 2)
79
80 btn = wxButton(self, wxNewId(), "Search", style=wxBU_EXACTFIT)
81 EVT_BUTTON(self, btn.GetId(), self.OnSearchPageButton)
82 btnSizer.Add(btn, 0, wxEXPAND|wxALL, 2)
83
84 btn = wxButton(self, wxNewId(), "Refresh", style=wxBU_EXACTFIT)
85 EVT_BUTTON(self, btn.GetId(), self.OnRefreshPageButton)
86 btnSizer.Add(btn, 0, wxEXPAND|wxALL, 2)
f6bcfd97
BP
87
88 txt = wxStaticText(self, -1, "Location:")
c2dac736 89 btnSizer.Add(txt, 0, wxCENTER|wxALL, 2)
f6bcfd97
BP
90
91 self.location = wxComboBox(self, wxNewId(), "", style=wxCB_DROPDOWN)
92 EVT_COMBOBOX(self, self.location.GetId(), self.OnLocationSelect)
93 EVT_KEY_UP(self.location, self.OnLocationKey)
342639eb 94 EVT_CHAR(self.location, self.IgnoreReturn)
c2dac736 95 btnSizer.Add(self.location, 1, wxEXPAND|wxALL, 2)
f6bcfd97
BP
96
97 sizer.Add(btnSizer, 0, wxEXPAND)
98 sizer.Add(self.ie, 1, wxEXPAND)
99
100 self.ie.Navigate(self.current)
101 self.location.Append(self.current)
102
103 self.SetSizer(sizer)
104 self.SetAutoLayout(true)
105 EVT_SIZE(self, self.OnSize)
106
107
108 def OnSize(self, evt):
109 self.Layout()
110
111 def __del__(self):
112 if self.ie:
113 self.ie.Cleanup()
114 self.ie = None
115
116 def OnLocationSelect(self, evt):
117 url = self.location.GetStringSelection()
118 self.log.write('OnLocationSelect: %s\n' % url)
119 self.ie.Navigate(url)
120
121 def OnLocationKey(self, evt):
122 if evt.KeyCode() == WXK_RETURN:
123 URL = self.location.GetValue()
124 self.location.Append(URL)
125 self.ie.Navigate(URL)
126 else:
127 evt.Skip()
128
129 def IgnoreReturn(self, evt):
130 print 'IgnoreReturn'
131 if evt.KeyCode() != WXK_RETURN:
132 evt.Skip()
133
134 def OnOpenButton(self, event):
135 dlg = wxTextEntryDialog(self, "Open Location",
136 "Enter a full URL or local path",
137 self.current, wxOK|wxCANCEL)
138 dlg.CentreOnParent()
139 if dlg.ShowModal() == wxID_OK:
140 self.current = dlg.GetValue()
141 self.ie.Navigate(self.current)
142 dlg.Destroy()
143
144 def OnHomeButton(self, event):
145 self.ie.GoHome() ## ET Phone Home!
146
147 def OnPrevPageButton(self, event):
148 self.ie.GoBack()
149
f6bcfd97
BP
150 def OnNextPageButton(self, event):
151 self.ie.GoForward()
152
c2dac736
RD
153 def OnStopButton(self, evt):
154 self.ie.Stop()
155
156 def OnSearchPageButton(self, evt):
157 self.ie.GoSearch()
158
159 def OnRefreshPageButton(self, evt):
160 self.ie.Refresh2(3)
161
162
f6bcfd97
BP
163
164 # The following event handlers are called by the web browser COM
165 # control since we passed self to MakeActiveXClass. It will look
166 # here for matching attributes and call them if they exist. See the
167 # module generated by makepy for details of method names, etc.
168 def OnBeforeNavigate2(self, pDisp, URL, *args):
169 self.log.write('OnBeforeNavigate2: %s\n' % URL)
170
171 def OnNavigateComplete2(self, pDisp, URL):
172 self.log.write('OnNavigateComplete2: %s\n' % URL)
173 self.current = URL
174 self.location.SetValue(URL)
175
176 def OnTitleChange(self, text):
177 self.log.write('OnTitleChange: %s\n' % text)
178 if self.frame:
179 self.frame.SetTitle(self.titleBase + ' -- ' + text)
180
181 def OnStatusTextChange(self, text):
182 self.log.write('OnStatusTextChange: %s\n' % text)
183 if self.frame:
184 self.frame.SetStatusText(text)
185
186
187#----------------------------------------------------------------------
188# for the demo framework...
189
190def runTest(frame, nb, log):
191 if wxPlatform == '__WXMSW__':
192 win = TestPanel(nb, log, frame)
193 return win
194 else:
195 dlg = wxMessageDialog(frame, 'This demo only works on MSW.',
196 'Sorry', wxOK | wxICON_INFORMATION)
197 dlg.ShowModal()
198 dlg.Destroy()
199
200
201overview = __doc__
202
203#----------------------------------------------------------------------
204
205
206if __name__ == '__main__':
207 class TestFrame(wxFrame):
208 def __init__(self):
209 wxFrame.__init__(self, None, -1, "ActiveX test -- Internet Explorer",
210 size=(640, 480),
211 style=wxDEFAULT_FRAME_STYLE|wxNO_FULL_REPAINT_ON_RESIZE)
212 self.CreateStatusBar()
213 self.tp = TestPanel(self, sys.stdout, self)
214 EVT_CLOSE(self, self.OnCloseWindow)
215
216 def OnCloseWindow(self, event):
217 self.tp.ie.Cleanup()
218 self.Destroy()
219
220
221 app = wxPySimpleApp()
222 frame = TestFrame()
223 frame.Show(true)
224 app.MainLoop()
225
226
227