home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / lib / python2.4 / site-packages / AppInstall / BrowserView.pyo (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2006-08-31  |  4.6 KB  |  136 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.4)
  3.  
  4. import gtk
  5. import gtkhtml2
  6. import urllib
  7. import urlparse
  8. import gobject
  9. import time
  10. import subprocess
  11. from gettext import gettext as _
  12.  
  13. class BrowserView(object):
  14.     ''' abstract browser interface for AppInstall, the requirements are
  15.         very light, it must only support loading a html page for now
  16.      '''
  17.     
  18.     def loadUri(self, uri):
  19.         pass
  20.  
  21.  
  22.  
  23. class DumpBrowserView(gtk.ScrolledWindow):
  24.     
  25.     def __init__(self):
  26.         gtk.ScrolledWindow.__init__(self)
  27.         self.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
  28.         self.set_shadow_type(gtk.SHADOW_IN)
  29.         self.view = gtk.TextView()
  30.         self.add(self.view)
  31.         self.view.show_all()
  32.  
  33.     
  34.     def loadUri(self, uri):
  35.         parts = urlparse.urlparse(uri)
  36.         if parts[0] != 'file':
  37.             return False
  38.         
  39.         f = open(parts[2])
  40.         buf = self.view.get_buffer()
  41.         buf.set_text(f.read())
  42.         return True
  43.  
  44.  
  45.  
  46. class GtkHtml2BrowserView(gtk.ScrolledWindow):
  47.     __gsignals__ = {
  48.         'submit': (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, (gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_STRING)) }
  49.     
  50.     def __init__(self):
  51.         gtk.ScrolledWindow.__init__(self)
  52.         self.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
  53.         self.set_shadow_type(gtk.SHADOW_IN)
  54.         self.view = gtkhtml2.View()
  55.         self.view.show()
  56.         self.currentUri = None
  57.         self._opener = urllib.FancyURLopener()
  58.         self.document = gtkhtml2.Document()
  59.         self.document.connect('request_url', self._request_url)
  60.         self.view.set_document(self.document)
  61.         self.add(self.view)
  62.         self.document.connect('link_clicked', self.linkClicked)
  63.         self.document.connect('submit', self.submit)
  64.  
  65.     
  66.     def linkClicked(self, document, link):
  67.         subprocess.Popen([
  68.             '/usr/bin/gnome-open',
  69.             link])
  70.  
  71.     
  72.     def submit(self, document, action, method, value):
  73.         '''A html form in the app description is used to add required
  74.            repositories. So send the corresponding signal'''
  75.         self.emit('submit', action, method, value)
  76.  
  77.     
  78.     def loadUri(self, uri):
  79.         self.content = None
  80.         if uri == 'about:blank':
  81.             self.document.clear()
  82.             return None
  83.         
  84.         
  85.         try:
  86.             f = self._open_uri(uri)
  87.         except (OSError, IOError):
  88.             print 'failed to open', uri
  89.             self.content = _("Failed to open '%s'") % uri
  90.             lock.release()
  91.             return None
  92.  
  93.         self.currentUri = self._resolve_uri(uri)
  94.         self.headers = f.info()
  95.         self.content = f.read()
  96.         self.document.open_stream('text/html')
  97.         self.document.write_stream(self.content)
  98.         self.document.close_stream()
  99.  
  100.     
  101.     def _open_uri(self, uri):
  102.         uri = self._resolve_uri(uri)
  103.         return self._opener.open(uri)
  104.  
  105.     
  106.     def _resolve_uri(self, uri):
  107.         if self._is_relative_to_server(uri):
  108.             return urlparse.urljoin(self.currentUri, uri)
  109.         
  110.         return uri
  111.  
  112.     
  113.     def _request_url(self, document, url, stream):
  114.         f = self._open_uri(url)
  115.         stream.write(f.read())
  116.  
  117.     
  118.     def _is_relative_to_server(self, url):
  119.         parts = urlparse.urlparse(url)
  120.         if parts[0] or parts[1]:
  121.             return False
  122.         
  123.         return True
  124.  
  125.  
  126. gobject.type_register(GtkHtml2BrowserView)
  127. if __name__ == '__main__':
  128.     win = gtk.Window()
  129.     view = GtkHtml2BrowserView()
  130.     view.set_size_request(600, 400)
  131.     win.add(view)
  132.     win.show_all()
  133.     view.loadUri('http://www.skype.com/company/legal/eula/')
  134.     gtk.main()
  135.  
  136.