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|wxPROCESS_ENTER
)
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)
64 sizer
.Add(btnSizer
, 0, wxEXPAND
)
65 sizer
.Add(self
.ie
, 1, wxEXPAND
)
67 self
.ie
.Navigate(self
.current
)
68 self
.location
.Append(self
.current
)
71 self
.SetAutoLayout(true
)
72 EVT_SIZE(self
, self
.OnSize
)
74 # Hook up the event handlers for the IE window
75 EVT_MSHTML_BEFORENAVIGATE2(self
, -1, self
.OnBeforeNavigate2
)
76 EVT_MSHTML_NEWWINDOW2(self
, -1, self
.OnNewWindow2
)
77 EVT_MSHTML_DOCUMENTCOMPLETE(self
, -1, self
.OnDocumentComplete
)
78 #EVT_MSHTML_PROGRESSCHANGE(self, -1, self.OnProgressChange)
79 EVT_MSHTML_STATUSTEXTCHANGE(self
, -1, self
.OnStatusTextChange
)
80 EVT_MSHTML_TITLECHANGE(self
, -1, self
.OnTitleChange
)
83 def OnSize(self
, evt
):
87 def OnLocationSelect(self
, evt
):
88 url
= self
.location
.GetStringSelection()
89 self
.log
.write('OnLocationSelect: %s\n' % url
)
92 def OnLocationKey(self
, evt
):
93 if evt
.KeyCode() == WXK_RETURN
:
94 URL
= self
.location
.GetValue()
95 self
.location
.Append(URL
)
101 def IgnoreReturn(self
, evt
):
102 if evt
.GetKeyCode() != WXK_RETURN
:
105 def OnOpenButton(self
, event
):
106 dlg
= wxTextEntryDialog(self
, "Open Location",
107 "Enter a full URL or local path",
108 self
.current
, wxOK|wxCANCEL
)
110 if dlg
.ShowModal() == wxID_OK
:
111 self
.current
= dlg
.GetValue()
112 self
.ie
.Navigate(self
.current
)
115 def OnHomeButton(self
, event
):
116 self
.ie
.GoHome() ## ET Phone Home!
118 def OnPrevPageButton(self
, event
):
121 def OnNextPageButton(self
, event
):
124 def OnStopButton(self
, evt
):
127 def OnSearchPageButton(self
, evt
):
130 def OnRefreshPageButton(self
, evt
):
131 self
.ie
.Refresh(wxIEHTML_REFRESH_COMPLETELY
)
135 def logEvt(self
, name
, event
):
136 self
.log
.write('%s: %s\n' %
137 (name
, (event
.GetLong1(), event
.GetLong2(), event
.GetText1())))
139 def OnBeforeNavigate2(self
, evt
):
140 self
.logEvt('OnBeforeNavigate2', evt
)
142 def OnNewWindow2(self
, evt
):
143 self
.logEvt('OnNewWindow2', evt
)
144 evt
.Veto() # don't allow it
146 def OnDocumentComplete(self
, evt
):
147 self
.logEvt('OnDocumentComplete', evt
)
148 self
.current
= evt
.GetText1()
149 self
.location
.SetValue(self
.current
)
151 def OnTitleChange(self
, evt
):
152 self
.logEvt('OnTitleChange', evt
)
154 self
.frame
.SetTitle(self
.titleBase
+ ' -- ' + evt
.GetText1())
156 def OnStatusTextChange(self
, evt
):
157 self
.logEvt('OnStatusTextChange', evt
)
159 self
.frame
.SetStatusText(evt
.GetText1())
162 #----------------------------------------------------------------------
163 # for the demo framework...
165 def runTest(frame
, nb
, log
):
166 if wxPlatform
== '__WXMSW__':
167 win
= TestPanel(nb
, log
, frame
)
170 dlg
= wxMessageDialog(frame
, 'This demo only works on MSW.',
171 'Sorry', wxOK | wxICON_INFORMATION
)
181 The wxIEHtmlWin class is the first example of using a contributed
182 wxActiveX class in wxWindows C++. It is still experimental, but
183 I think it is useful.
185 <p> Using this class is simpler than ActiveXWrapper, doesn't rely on
186 the win32all extensions, and is more "wx\'ish", meaning that it uses
187 events and etc. as would be expected from any other wx window.
194 if __name__
== '__main__':
197 run
.main(['', os
.path
.basename(sys
.argv
[0])])
200 #----------------------------------------------------------------------