From 7481a5d6a6131b9d29b9fde783185446f89832fb Mon Sep 17 00:00:00 2001 From: Marco Pesenti Gritti Date: Wed, 19 Apr 2006 15:30:49 -0400 Subject: [PATCH] Initial commit --- browser/browser.py | 184 +++++++++++++++++++++++++++++++++++++++++++++ browser/fold.png | Bin 0 -> 156 bytes browser/unfold.png | Bin 0 -> 157 bytes 3 files changed, 184 insertions(+) create mode 100755 browser/browser.py create mode 100644 browser/fold.png create mode 100644 browser/unfold.png diff --git a/browser/browser.py b/browser/browser.py new file mode 100755 index 00000000..84d11dea --- /dev/null +++ b/browser/browser.py @@ -0,0 +1,184 @@ +#!/usr/bin/env python + +import pygtk +pygtk.require('2.0') +import gtk +import geckoembed + +class AddressToolbar(gtk.Toolbar): + def __init__(self): + gtk.Toolbar.__init__(self) + + address_item = AddressItem(self.__open_address_cb) + self.insert(address_item, 0) + address_item.show() + + def __open_address_cb(self, address): + browser = BrowserWindow(address) + browser.show() + +class AddressItem(gtk.ToolItem): + def __init__(self, callback): + gtk.ToolItem.__init__(self) + + address_entry = AddressEntry(callback) + self.add(address_entry) + address_entry.show() + +class AddressEntry(gtk.HBox): + def __init__(self, callback): + gtk.HBox.__init__(self) + + self.callback = callback + self.folded = True + + label = gtk.Label("Open") + self.pack_start(label, False) + label.show() + + self.button = gtk.Button() + self.button.set_relief(gtk.RELIEF_NONE) + self.button.connect("clicked", self.__button_clicked_cb) + self.pack_start(self.button, False) + self.button.show() + + self.entry = gtk.Entry() + self.entry.connect("activate", self.__activate_cb) + self.pack_start(self.entry, False) + self.entry.show() + + self._update_folded_state() + + def _update_folded_state(self): + if self.folded: + image = gtk.Image() + image.set_from_file("unfold.png") + self.button.set_image(image) + image.show() + + self.entry.hide() + else: + image = gtk.Image() + image.set_from_file("fold.png") + self.button.set_image(image) + image.show() + + self.entry.show() + + def __button_clicked_cb(self, button): + self.folded = not self.folded + self._update_folded_state() + + def __activate_cb(self, entry): + self.callback(entry.get_text()) + +class NavigationToolbar(gtk.Toolbar): + def __init__(self, embed): + gtk.Toolbar.__init__(self) + self.embed = embed + + self.set_style(gtk.TOOLBAR_ICONS) + + self.back = gtk.ToolButton(gtk.STOCK_GO_BACK) + self.back.connect("clicked", self.__go_back_cb) + self.insert(self.back, -1) + self.back.show() + + self.forward = gtk.ToolButton(gtk.STOCK_GO_FORWARD) + self.forward.connect("clicked", self.__go_forward_cb) + self.insert(self.forward, -1) + self.forward.show() + + self.reload = gtk.ToolButton(gtk.STOCK_REFRESH) + self.reload.connect("clicked", self.__reload_cb) + self.insert(self.reload, -1) + self.reload.show() + + separator = gtk.SeparatorToolItem() + self.insert(separator, -1) + separator.show() + + address_item = AddressItem(self.__open_address_cb) + self.insert(address_item, -1) + address_item.show() + + self._update_sensitivity() + + self.embed.connect("location", self.__location_changed) + + def _update_sensitivity(self): + self.back.set_sensitive(self.embed.can_go_back()) + self.forward.set_sensitive(self.embed.can_go_forward()) + + def __go_back_cb(self, button): + self.embed.go_back() + + def __go_forward_cb(self, button): + self.embed.go_forward() + + def __reload_cb(self, button): + self.embed.reload() + + def __location_changed(self, embed): + self._update_sensitivity() + + def __open_address_cb(self, address): + self.embed.load_url(address) + +class BrowserWindow(gtk.Window): + def __init__(self, uri): + gtk.Window.__init__(self) + self.set_default_size(640, 480); + + vbox = gtk.VBox() + + self.embed = geckoembed.Embed() + vbox.pack_start(self.embed) + self.embed.show() + self.embed.load_url(uri) + + nav_toolbar = NavigationToolbar(self.embed) + vbox.pack_start(nav_toolbar, False) + nav_toolbar.show() + + self.add(vbox) + vbox.show() + +class SearchWindow(gtk.Window): + def __init__(self): + gtk.Window.__init__(self) + + self.set_default_size(640, 480); + self.connect("delete-event", self.__delete_event); + + vbox = gtk.VBox() + + self.embed = geckoembed.Embed() + self.embed.connect("open-address", self.__open_address); + + vbox.pack_start(self.embed) + self.embed.show() + + address_toolbar = AddressToolbar() + vbox.pack_start(address_toolbar, False) + address_toolbar.show() + + self.add(vbox) + vbox.show() + + self.embed.load_url("http://www.google.com") + + def __delete_event(self, widget, event, data=None): + return True; + + def __open_address(self, embed, uri, data=None): + if uri.startswith("http://www.google.com"): + return False + else: + browser = BrowserWindow(uri) + browser.show() + return True + +window = SearchWindow() +window.show() +gtk.main() diff --git a/browser/fold.png b/browser/fold.png new file mode 100644 index 0000000000000000000000000000000000000000..cd4169bab417e8fd66a1526dec7be708c39c08dc GIT binary patch literal 156 zcmeAS@N?(olHy`uVBq!ia0vp^AT}2V8<6ZZI=>f4u_bxCyDx`7I;J! zGca%qfH31)<-MgqLG}_)Usv`^j8c4RJb?n)r+`A5o-U3d6?2jk7O4N|Ka-~9CTKVL uUvlE)bsX!H+?euGR8q8f4u_bxCyDx`7I;J! zGca%qfH31)<-MgqLG}_)Usv`^j8c4RvepZ{Er3E=o-U3d6?2jk7MT9%Z$5j#r7J0i v>;K}-lAIQeg7a5K_^NmdGBb0^9pq#P*em>T$E{jLpe_baS3j3^P6