wxWidgets/utils/wxPython/demo/wxHtmlWindow.py
Robin Dunn 2f90df854e 1. wxHtmlHelpController and related classes
2. the C++ versions of wxSizer and firends, Python versions are
   'depreciated'
3. wxPyEvent and wxPyCommandEvent, event classes that can carry some
   python objects through the event system and safely come back out
   again.
4. wxGridSizer and wxFlexGridSizer
5. wxValidator
6. wxPyOnDemandOutputWindow
7. several tweaks, fixes and additions of missing methods, etc.
8. and probably several other things I am forgetting since CVS was
   down so long...


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@3758 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
1999-09-30 07:11:20 +00:00

161 lines
4.3 KiB
Python

import sys, os
from wxPython.wx import *
from wxPython.html import *
import wxPython.lib.wxpTag
#----------------------------------------------------------------------
# This shows how to catch the OnLinkClicked non-event. (It's a virtual
# method in the C++ code...)
class MyHtmlWindow(wxHtmlWindow):
def __init__(self, parent, id, log):
wxHtmlWindow.__init__(self, parent, id)
self.log = log
def OnLinkClicked(self, link):
self.log.WriteText('OnLinkClicked: %s\n' % link)
# Virtuals in the base class have been renamed with base_ on the font.
self.base_OnLinkClicked(link)
class TestHtmlPanel(wxPanel):
def __init__(self, parent, frame, log):
wxPanel.__init__(self, parent, -1)
self.log = log
self.frame = frame
self.html = MyHtmlWindow(self, -1, log)
self.html.SetRelatedFrame(frame, "wxPython: (A Demonstration) -- %s")
self.html.SetRelatedStatusBar(0)
self.box = wxBoxSizer(wxVERTICAL)
self.box.Add(self.html, 1, wxGROW)
subbox = wxBoxSizer(wxHORIZONTAL)
btn = wxButton(self, 1201, "Show Default")
EVT_BUTTON(self, 1201, self.OnShowDefault)
subbox.Add(btn, 1, wxGROW | wxALL, 2)
btn = wxButton(self, 1202, "Load File")
EVT_BUTTON(self, 1202, self.OnLoadFile)
subbox.Add(btn, 1, wxGROW | wxALL, 2)
btn = wxButton(self, 1203, "With Widgets")
EVT_BUTTON(self, 1203, self.OnWithWidgets)
subbox.Add(btn, 1, wxGROW | wxALL, 2)
btn = wxButton(self, 1204, "Back")
EVT_BUTTON(self, 1204, self.OnBack)
subbox.Add(btn, 1, wxGROW | wxALL, 2)
btn = wxButton(self, 1205, "Forward")
EVT_BUTTON(self, 1205, self.OnForward)
subbox.Add(btn, 1, wxGROW | wxALL, 2)
btn = wxButton(self, 1206, "View Source")
EVT_BUTTON(self, 1206, self.OnViewSource)
subbox.Add(btn, 1, wxGROW | wxALL, 2)
self.box.Add(subbox, 0, wxGROW)
self.SetSizer(self.box)
self.SetAutoLayout(true)
# A button with this ID is created on the widget test page.
EVT_BUTTON(self, wxID_OK, self.OnOk)
self.OnShowDefault(None)
def OnShowDefault(self, event):
name = os.path.join(os.path.split(sys.argv[0])[0], 'data/test.htm')
self.html.LoadPage(name)
def OnLoadFile(self, event):
dlg = wxFileDialog(self, wildcard = '*.htm*', style=wxOPEN)
if dlg.ShowModal():
path = dlg.GetPath()
self.html.LoadPage(path)
dlg.Destroy()
def OnWithWidgets(self, event):
os.chdir(os.path.split(sys.argv[0])[0])
name = os.path.join(os.path.split(sys.argv[0])[0], 'data/widgetTest.htm')
self.html.LoadPage(name)
#self.html.SetPage(_widgetTest)
def OnOk(self, event):
self.log.WriteText("It works!\n")
def OnBack(self, event):
if not self.html.HistoryBack():
wxMessageBox("No more items in history!")
def OnForward(self, event):
if not self.html.HistoryForward():
wxMessageBox("No more items in history!")
def OnViewSource(self, event):
from wxPython.lib.dialogs import wxScrolledMessageDialog
source = self.html.GetParser().GetSource()
dlg = wxScrolledMessageDialog(self, source, 'HTML Source')
dlg.ShowModal()
dlg.Destroy()
#----------------------------------------------------------------------
def runTest(frame, nb, log):
win = TestHtmlPanel(nb, frame, log)
return win
#----------------------------------------------------------------------
overview = """\
wxHtmlWindow is capable of parsing and rendering most simple HTML tags.
It is not intended to be a high-end HTML browser. If you're looking for something like that try http://www.mozilla.org - there's a chance you'll be able to make their widget wxWindows-compatible. I'm sure everyone will enjoy your work in that case...
"""
_widgetTest = '''\
<html><body>
The widgets on this page were created dynamically on the fly by a custom
wxTagHandler found in wxPython.lib.wxpTag.
<hr>
<center>
<wxp class="wxButton" width="50%">
<param name="label" value="It works!">
<param name="id" value="wxID_OK">
</wxp>
</center>
<hr>
after
</body></html>
'''