X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/13baae2c95ae2e0eb01736b7d1fac6be4a2e6a3f..b7c75283f2144469e8fa6a24ca285b42fab69a6b:/wxPython/demo/ActiveX_IEHtmlWindow.py diff --git a/wxPython/demo/ActiveX_IEHtmlWindow.py b/wxPython/demo/ActiveX_IEHtmlWindow.py new file mode 100644 index 0000000000..b3bc40fbf7 --- /dev/null +++ b/wxPython/demo/ActiveX_IEHtmlWindow.py @@ -0,0 +1,225 @@ +# 11/18/2003 - Jeff Grimmett (grimmtooth@softhome.net) +# +# o Updated for wx namespace +# + +import wx + +if wx.Platform == '__WXMSW__': + import wx.lib.iewin as iewin + +#---------------------------------------------------------------------- + +class TestPanel(wx.Window): + def __init__(self, parent, log, frame=None): + wx.Window.__init__( + self, parent, -1, + style=wx.TAB_TRAVERSAL|wx.CLIP_CHILDREN|wx.NO_FULL_REPAINT_ON_RESIZE + ) + + self.log = log + self.current = "http://wxPython.org/" + self.frame = frame + + if frame: + self.titleBase = frame.GetTitle() + + sizer = wx.BoxSizer(wx.VERTICAL) + btnSizer = wx.BoxSizer(wx.HORIZONTAL) + + self.ie = iewin.IEHtmlWindow(self, -1, style = wx.NO_FULL_REPAINT_ON_RESIZE) + + + btn = wx.Button(self, -1, "Open", style=wx.BU_EXACTFIT) + self.Bind(wx.EVT_BUTTON, self.OnOpenButton, btn) + btnSizer.Add(btn, 0, wx.EXPAND|wx.ALL, 2) + + btn = wx.Button(self, -1, "Home", style=wx.BU_EXACTFIT) + self.Bind(wx.EVT_BUTTON, self.OnHomeButton, btn) + btnSizer.Add(btn, 0, wx.EXPAND|wx.ALL, 2) + + btn = wx.Button(self, -1, "<--", style=wx.BU_EXACTFIT) + self.Bind(wx.EVT_BUTTON, self.OnPrevPageButton, btn) + btnSizer.Add(btn, 0, wx.EXPAND|wx.ALL, 2) + + btn = wx.Button(self, -1, "-->", style=wx.BU_EXACTFIT) + self.Bind(wx.EVT_BUTTON, self.OnNextPageButton, btn) + btnSizer.Add(btn, 0, wx.EXPAND|wx.ALL, 2) + + btn = wx.Button(self, -1, "Stop", style=wx.BU_EXACTFIT) + self.Bind(wx.EVT_BUTTON, self.OnStopButton, btn) + btnSizer.Add(btn, 0, wx.EXPAND|wx.ALL, 2) + + btn = wx.Button(self, -1, "Search", style=wx.BU_EXACTFIT) + self.Bind(wx.EVT_BUTTON, self.OnSearchPageButton, btn) + btnSizer.Add(btn, 0, wx.EXPAND|wx.ALL, 2) + + btn = wx.Button(self, -1, "Refresh", style=wx.BU_EXACTFIT) + self.Bind(wx.EVT_BUTTON, self.OnRefreshPageButton, btn) + btnSizer.Add(btn, 0, wx.EXPAND|wx.ALL, 2) + + txt = wx.StaticText(self, -1, "Location:") + btnSizer.Add(txt, 0, wx.CENTER|wx.ALL, 2) + + self.location = wx.ComboBox( + self, -1, "", style=wx.CB_DROPDOWN|wx.PROCESS_ENTER + ) + + self.Bind(wx.EVT_COMBOBOX, self.OnLocationSelect, self.location) + self.location.Bind(wx.EVT_KEY_UP, self.OnLocationKey) + self.location.Bind(wx.EVT_CHAR, self.IgnoreReturn) + btnSizer.Add(self.location, 1, wx.EXPAND|wx.ALL, 2) + + sizer.Add(btnSizer, 0, wx.EXPAND) + sizer.Add(self.ie, 1, wx.EXPAND) + + self.ie.LoadUrl(self.current) + self.location.Append(self.current) + + self.SetSizer(sizer) + # Since this is a wxWindow we have to call Layout ourselves + self.Bind(wx.EVT_SIZE, self.OnSize) + + # Hook up the event handlers for the IE window + self.Bind(iewin.EVT_BeforeNavigate2, self.OnBeforeNavigate2, self.ie) + self.Bind(iewin.EVT_NewWindow2, self.OnNewWindow2, self.ie) + self.Bind(iewin.EVT_DocumentComplete, self.OnDocumentComplete, self.ie) + ##self.Bind(iewin.EVT_ProgressChange, self.OnProgressChange, self.ie) + self.Bind(iewin.EVT_StatusTextChange, self.OnStatusTextChange, self.ie) + self.Bind(iewin.EVT_TitleChange, self.OnTitleChange, self.ie) + + + def ShutdownDemo(self): + # put the frame title back + if self.frame: + self.frame.SetTitle(self.titleBase) + + + def OnSize(self, evt): + self.Layout() + + + def OnLocationSelect(self, evt): + url = self.location.GetStringSelection() + self.log.write('OnLocationSelect: %s\n' % url) + self.ie.Navigate(url) + + def OnLocationKey(self, evt): + if evt.KeyCode() == wx.WXK_RETURN: + URL = self.location.GetValue() + self.location.Append(URL) + self.ie.Navigate(URL) + else: + evt.Skip() + + + def IgnoreReturn(self, evt): + if evt.GetKeyCode() != wx.WXK_RETURN: + evt.Skip() + + def OnOpenButton(self, event): + dlg = wx.TextEntryDialog(self, "Open Location", + "Enter a full URL or local path", + self.current, wx.OK|wx.CANCEL) + dlg.CentreOnParent() + + if dlg.ShowModal() == wx.ID_OK: + self.current = dlg.GetValue() + self.ie.Navigate(self.current) + + dlg.Destroy() + + def OnHomeButton(self, event): + self.ie.GoHome() ## ET Phone Home! + + def OnPrevPageButton(self, event): + self.ie.GoBack() + + def OnNextPageButton(self, event): + self.ie.GoForward() + + def OnStopButton(self, evt): + self.ie.Stop() + + def OnSearchPageButton(self, evt): + self.ie.GoSearch() + + def OnRefreshPageButton(self, evt): + self.ie.Refresh(iewin.REFRESH_COMPLETELY) + + + def logEvt(self, evt): + pst = "" + for name in evt.paramList: + pst += " %s:%s " % (name, repr(getattr(evt, name))) + self.log.write('%s: %s\n' % (evt.eventName, pst)) + + + def OnBeforeNavigate2(self, evt): + self.logEvt(evt) + + def OnNewWindow2(self, evt): + self.logEvt(evt) +## evt.Veto() # TODO + + def OnProgressChange(self, evt): + self.logEvt(evt) + + def OnDocumentComplete(self, evt): + self.logEvt(evt) + self.current = evt.URL + self.location.SetValue(self.current) + + def OnTitleChange(self, evt): + self.logEvt(evt) + if self.frame: + self.frame.SetTitle(self.titleBase + ' -- ' + evt.Text) + + def OnStatusTextChange(self, evt): + self.logEvt(evt) + if self.frame: + self.frame.SetStatusText(evt.Text) + + +#---------------------------------------------------------------------- +# for the demo framework... + +def runTest(frame, nb, log): + if wx.Platform == '__WXMSW__': + win = TestPanel(nb, log, frame) + return win + else: + dlg = wx.MessageDialog(frame, 'This demo only works on Windows.', + 'Sorry', wx.OK | wx.ICON_INFORMATION) + dlg.ShowModal() + dlg.Destroy() + + + +overview = """\ + +

wx.lib.iewin.IEHtmlWindow

+ +The wx.lib.iewin.IEHtmlWindow class is one example of using ActiveX +controls from wxPython using the new wx.activex module. This allows +you to use an ActiveX control as if it is a wx.Window, you can call +its methods, set/get properties, and receive events from the ActiveX +control in a very intuitive way. + +

Using this class is simpler than ActiveXWrapper, doesn't rely on +the win32all extensions, and is more "wx\'ish", meaning that it uses +events and etc. as would be expected from any other wx window. + + +""" + + + +if __name__ == '__main__': + import sys,os + import run + run.main(['', os.path.basename(sys.argv[0])] + sys.argv[1:]) + + +#---------------------------------------------------------------------- +