2 from wxPython
.wx
import *
4 if wxPlatform
== '__WXMSW__':
5 from wxPython
.iewin
import *
7 #----------------------------------------------------------------------
9 class TestPanel(wxWindow
):
10 def __init__(self
, parent
, log
, frame
=None):
11 wxWindow
.__init
__(self
, parent
, -1,
12 style
=wxCLIP_CHILDREN|wxNO_FULL_REPAINT_ON_RESIZE
)
14 self
.current
= "http://wxWindows.org/"
17 self
.titleBase
= frame
.GetTitle()
20 sizer
= wxBoxSizer(wxVERTICAL
)
21 btnSizer
= wxBoxSizer(wxHORIZONTAL
)
23 self
.ie
= wxIEHtmlWin(self
, -1, style
= wxNO_FULL_REPAINT_ON_RESIZE
)
26 btn
= wxButton(self
, wxNewId(), "Open", style
=wxBU_EXACTFIT
)
27 EVT_BUTTON(self
, btn
.GetId(), self
.OnOpenButton
)
28 btnSizer
.Add(btn
, 0, wxEXPAND|wxALL
, 2)
30 btn
= wxButton(self
, wxNewId(), "Home", style
=wxBU_EXACTFIT
)
31 EVT_BUTTON(self
, btn
.GetId(), self
.OnHomeButton
)
32 btnSizer
.Add(btn
, 0, wxEXPAND|wxALL
, 2)
34 btn
= wxButton(self
, wxNewId(), "<--", style
=wxBU_EXACTFIT
)
35 EVT_BUTTON(self
, btn
.GetId(), self
.OnPrevPageButton
)
36 btnSizer
.Add(btn
, 0, wxEXPAND|wxALL
, 2)
38 btn
= wxButton(self
, wxNewId(), "-->", style
=wxBU_EXACTFIT
)
39 EVT_BUTTON(self
, btn
.GetId(), self
.OnNextPageButton
)
40 btnSizer
.Add(btn
, 0, wxEXPAND|wxALL
, 2)
42 btn
= wxButton(self
, wxNewId(), "Stop", style
=wxBU_EXACTFIT
)
43 EVT_BUTTON(self
, btn
.GetId(), self
.OnStopButton
)
44 btnSizer
.Add(btn
, 0, wxEXPAND|wxALL
, 2)
46 btn
= wxButton(self
, wxNewId(), "Search", style
=wxBU_EXACTFIT
)
47 EVT_BUTTON(self
, btn
.GetId(), self
.OnSearchPageButton
)
48 btnSizer
.Add(btn
, 0, wxEXPAND|wxALL
, 2)
50 btn
= wxButton(self
, wxNewId(), "Refresh", style
=wxBU_EXACTFIT
)
51 EVT_BUTTON(self
, btn
.GetId(), self
.OnRefreshPageButton
)
52 btnSizer
.Add(btn
, 0, wxEXPAND|wxALL
, 2)
54 txt
= wxStaticText(self
, -1, "Location:")
55 btnSizer
.Add(txt
, 0, wxCENTER|wxALL
, 2)
57 self
.location
= wxComboBox(self
, wxNewId(), "", style
=wxCB_DROPDOWN
)
58 EVT_COMBOBOX(self
, self
.location
.GetId(), self
.OnLocationSelect
)
59 EVT_KEY_UP(self
.location
, self
.OnLocationKey
)
60 EVT_CHAR(self
.location
, self
.IgnoreReturn
)
61 btnSizer
.Add(self
.location
, 1, wxEXPAND|wxALL
, 2)
63 sizer
.Add(btnSizer
, 0, wxEXPAND
)
64 sizer
.Add(self
.ie
, 1, wxEXPAND
)
66 self
.ie
.LoadUrl(self
.current
)
67 self
.location
.Append(self
.current
)
70 self
.SetAutoLayout(true
)
71 EVT_SIZE(self
, self
.OnSize
)
73 # Hook up the event handlers for the IE window
74 EVT_MSHTML_BEFORENAVIGATE2(self
, -1, self
.OnBeforeNavigate2
)
75 EVT_MSHTML_NEWWINDOW2(self
, -1, self
.OnNewWindow2
)
76 EVT_MSHTML_DOCUMENTCOMPLETE(self
, -1, self
.OnDocumentComplete
)
77 #EVT_MSHTML_PROGRESSCHANGE(self, -1, self.OnProgressChange)
78 EVT_MSHTML_STATUSTEXTCHANGE(self
, -1, self
.OnStatusTextChange
)
79 EVT_MSHTML_TITLECHANGE(self
, -1, self
.OnTitleChange
)
82 def OnSize(self
, evt
):
85 def OnLocationSelect(self
, evt
):
86 url
= self
.location
.GetStringSelection()
87 self
.log
.write('OnLocationSelect: %s\n' % url
)
90 def OnLocationKey(self
, evt
):
91 if evt
.KeyCode() == WXK_RETURN
:
92 URL
= self
.location
.GetValue()
93 self
.location
.Append(URL
)
98 def IgnoreReturn(self
, evt
):
100 if evt
.KeyCode() != WXK_RETURN
:
103 def OnOpenButton(self
, event
):
104 dlg
= wxTextEntryDialog(self
, "Open Location",
105 "Enter a full URL or local path",
106 self
.current
, wxOK|wxCANCEL
)
108 if dlg
.ShowModal() == wxID_OK
:
109 self
.current
= dlg
.GetValue()
110 self
.ie
.LoadUrl(self
.current
)
113 def OnHomeButton(self
, event
):
114 self
.ie
.GoHome() ## ET Phone Home!
116 def OnPrevPageButton(self
, event
):
119 def OnNextPageButton(self
, event
):
122 def OnStopButton(self
, evt
):
125 def OnSearchPageButton(self
, evt
):
128 def OnRefreshPageButton(self
, evt
):
129 self
.ie
.Refresh(wxIEHTML_REFRESH_COMPLETELY
)
133 def logEvt(self
, name
, event
):
134 self
.log
.write('%s: %s\n' %
135 (name
, (event
.GetLong1(), event
.GetLong2(), event
.GetText())))
137 def OnBeforeNavigate2(self
, evt
):
138 self
.logEvt('OnBeforeNavigate2', evt
)
140 def OnNewWindow2(self
, evt
):
141 self
.logEvt('OnNewWindow2', evt
)
142 evt
.Veto() # don't allow it
144 def OnDocumentComplete(self
, evt
):
145 self
.logEvt('OnDocumentComplete', evt
)
146 self
.current
= evt
.GetText()
147 self
.location
.SetValue(self
.current
)
149 def OnTitleChange(self
, evt
):
150 self
.logEvt('OnTitleChange', evt
)
152 self
.frame
.SetTitle(self
.titleBase
+ ' -- ' + evt
.GetText())
154 def OnStatusTextChange(self
, evt
):
155 self
.logEvt('OnStatusTextChange', evt
)
157 self
.frame
.SetStatusText(evt
.GetText())
160 #----------------------------------------------------------------------
161 # for the demo framework...
163 def runTest(frame
, nb
, log
):
164 if wxPlatform
== '__WXMSW__':
165 win
= TestPanel(nb
, log
, frame
)
168 dlg
= wxMessageDialog(frame
, 'This demo only works on MSW.',
169 'Sorry', wxOK | wxICON_INFORMATION
)
179 The wxIEHtmlWin class is the first example of using a contributed
180 wxActiveX class in wxWindows C++. It is still experimental, but
181 I think it is useful.
183 <p> Using this class is simpler than ActiveXWrapper, doesn't rely on
184 the win32all extensions, and is more "wx\'ish", meaning that it uses
185 events and etc. as would be expected from any other wx window.
192 if __name__
== '__main__':
195 run
.main(['', os
.path
.basename(sys
.argv
[0])])
198 #----------------------------------------------------------------------