18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#!/usr/bin/python 28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# Copyright (C) 2007 Kevin Ollivier All rights reserved. 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# Redistribution and use in source and binary forms, with or without 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# modification, are permitted provided that the following conditions 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# are met: 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# 1. Redistributions of source code must retain the above copyright 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# notice, this list of conditions and the following disclaimer. 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# 2. Redistributions in binary form must reproduce the above copyright 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# notice, this list of conditions and the following disclaimer in the 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# documentation and/or other materials provided with the distribution. 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectimport wx 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectimport wx.webview 298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass TestPanel(wx.Panel): 318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project def __init__(self, parent, log, frame=None): 328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project wx.Panel.__init__( 338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project self, parent, -1, 348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project style=wx.TAB_TRAVERSAL|wx.CLIP_CHILDREN|wx.NO_FULL_REPAINT_ON_RESIZE 358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ) 368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project self.log = log 388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project self.current = "http://wxPython.org/" 398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project self.frame = frame 408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if frame: 428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project self.titleBase = frame.GetTitle() 438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project sizer = wx.BoxSizer(wx.VERTICAL) 458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project btnSizer = wx.BoxSizer(wx.HORIZONTAL) 468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project self.webview = wx.webview.WebView(self, -1) 488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project btn = wx.Button(self, -1, "Open", style=wx.BU_EXACTFIT) 518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project self.Bind(wx.EVT_BUTTON, self.OnOpenButton, btn) 528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project btnSizer.Add(btn, 0, wx.EXPAND|wx.ALL, 2) 538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project btn = wx.Button(self, -1, "<--", style=wx.BU_EXACTFIT) 558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project self.Bind(wx.EVT_BUTTON, self.OnPrevPageButton, btn) 568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project btnSizer.Add(btn, 0, wx.EXPAND|wx.ALL, 2) 578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project btn = wx.Button(self, -1, "-->", style=wx.BU_EXACTFIT) 598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project self.Bind(wx.EVT_BUTTON, self.OnNextPageButton, btn) 608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project btnSizer.Add(btn, 0, wx.EXPAND|wx.ALL, 2) 618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project btn = wx.Button(self, -1, "Stop", style=wx.BU_EXACTFIT) 638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project self.Bind(wx.EVT_BUTTON, self.OnStopButton, btn) 648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project btnSizer.Add(btn, 0, wx.EXPAND|wx.ALL, 2) 658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project btn = wx.Button(self, -1, "Refresh", style=wx.BU_EXACTFIT) 678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project self.Bind(wx.EVT_BUTTON, self.OnRefreshPageButton, btn) 688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project btnSizer.Add(btn, 0, wx.EXPAND|wx.ALL, 2) 698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project txt = wx.StaticText(self, -1, "Location:") 718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project btnSizer.Add(txt, 0, wx.CENTER|wx.ALL, 2) 728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project self.location = wx.ComboBox( 748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project self, -1, "", style=wx.CB_DROPDOWN|wx.PROCESS_ENTER 758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ) 768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project self.Bind(wx.EVT_COMBOBOX, self.OnLocationSelect, self.location) 788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project self.location.Bind(wx.EVT_KEY_UP, self.OnLocationKey) 798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project self.location.Bind(wx.EVT_CHAR, self.IgnoreReturn) 808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project btnSizer.Add(self.location, 1, wx.EXPAND|wx.ALL, 2) 818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project sizer.Add(btnSizer, 0, wx.EXPAND) 838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project sizer.Add(self.webview, 1, wx.EXPAND) 848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project self.webview.LoadURL(self.current) 868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project self.location.Append(self.current) 878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch self.webview.Bind(wx.webview.EVT_WEBVIEW_LOAD, self.OnStateChanged) 898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project self.SetSizer(sizer) 918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project def OnStateChanged(self, event): 938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project statusbar = self.GetParent().GetStatusBar() 948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if statusbar: 95cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block if event.GetState() == wx.webview.WEBVIEW_LOAD_NEGOTIATING: 968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project statusbar.SetStatusText("Contacting " + event.GetURL()) 97cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block elif event.GetState() == wx.webview.WEBVIEW_LOAD_TRANSFERRING: 988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project statusbar.SetStatusText("Loading " + event.GetURL()) 99cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block elif event.GetState() == wx.webview.WEBVIEW_LOAD_DOC_COMPLETED: 1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project statusbar.SetStatusText("") 1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project self.location.SetValue(event.GetURL()) 1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project self.GetParent().SetTitle("wxWebView - " + self.webview.GetPageTitle()) 1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project def OnLocationKey(self, evt): 1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if evt.GetKeyCode() == wx.WXK_RETURN: 1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project URL = self.location.GetValue() 1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project self.location.Append(URL) 1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project self.webview.LoadURL(URL) 1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else: 1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project evt.Skip() 1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project def IgnoreReturn(self, evt): 1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if evt.GetKeyCode() != wx.WXK_RETURN: 1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project evt.Skip() 1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project def OnLocationSelect(self, evt): 1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project url = self.location.GetStringSelection() 1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project self.webview.LoadURL(url) 1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project def OnOpenButton(self, event): 1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project dlg = wx.TextEntryDialog(self, "Open Location", 1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project "Enter a full URL or local path", 1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project self.current, wx.OK|wx.CANCEL) 1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project dlg.CentreOnParent() 1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if dlg.ShowModal() == wx.ID_OK: 1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project self.current = dlg.GetValue() 1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project self.webview.LoadURL(self.current) 1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project dlg.Destroy() 1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project def OnPrevPageButton(self, event): 1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project self.webview.GoBack() 1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project def OnNextPageButton(self, event): 1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project self.webview.GoForward() 1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project def OnStopButton(self, evt): 1398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project self.webview.Stop() 1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project def OnRefreshPageButton(self, evt): 1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project self.webview.Reload() 1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass wkFrame(wx.Frame): 1468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project def __init__(self): 1478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project wx.Frame.__init__(self, None, -1, "WebKit in wxPython!") 1488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project self.panel = TestPanel(self, -1) 1508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project self.panel.webview.LoadURL("http://www.wxwidgets.org/") 1518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project self.CreateStatusBar() 1528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass wkApp(wx.App): 1548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project def OnInit(self): 1558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project self.webFrame = wkFrame() 1568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project self.SetTopWindow(self.webFrame) 1578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project self.webFrame.Show() 1588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return True 1608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectapp = wkApp(redirect=False) 1628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectapp.MainLoop() 163