home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / share / doc / python-gnome2-extras / examples / gtkhtml2 / simple-browser.py
Encoding:
Python Source  |  2002-04-29  |  1.6 KB  |  73 lines

  1. import gtkhtml2
  2. import gtk
  3. import urllib
  4. import urlparse
  5.  
  6. opener = urllib.FancyURLopener()
  7. currentUrl = None
  8.  
  9. def is_relative_to_server(url):
  10.     parts = urlparse.urlparse(url)
  11.     if parts[0] or parts[1]:
  12.         return 0
  13.     return 1
  14.  
  15. def open_url(url):
  16.     uri = resolve_uri(url)
  17.     return opener.open(uri)
  18.  
  19. def resolve_uri(uri):
  20.     if is_relative_to_server(uri):
  21.         return urlparse.urljoin(currentUrl, uri)
  22.     return uri
  23.  
  24. def request_url(document, url, stream):
  25.     f = open_url(url)
  26.     stream.write(f.read())
  27.  
  28. def link_clicked(document, link):
  29.     print 'link_clicked:', link
  30.     global currentUrl
  31.     try:
  32.         f = open_url(link)
  33.     except OSError:
  34.         print "failed to open", link
  35.         return
  36.     currentUrl = resolve_uri(link)
  37.     document.clear()
  38.     headers = f.info()
  39.     mime = headers.getheader('Content-type')
  40.     if mime:
  41.         document.open_stream(mime)
  42.     else:
  43.         document.open_stream('text/plain')
  44.     document.write_stream(f.read())
  45.     document.close_stream()
  46.  
  47. document = gtkhtml2.Document()
  48. document.connect('request_url', request_url)
  49. document.connect('link_clicked', link_clicked)
  50.  
  51. document.clear()
  52. document.open_stream('text/html')
  53. document.write_stream('<html><head></head><body>Hello, World!<br><a href="http://www.gnome.org/">click me</a></body></html>')
  54. document.close_stream()
  55.  
  56. def request_object(*args):
  57.     print 'request object', args
  58.  
  59. view = gtkhtml2.View()
  60. view.set_document(document)
  61. view.connect('request_object', request_object)
  62.  
  63. sw = gtk.ScrolledWindow()
  64. sw.add(view)
  65.  
  66. window = gtk.Window()
  67. window.add(sw)
  68. window.set_default_size(400, 400)
  69.  
  70. window.show_all()
  71.  
  72. gtk.main()
  73.