seed r414 - trunk/examples
- From: hortont svn gnome org
- To: svn-commits-list gnome org
- Subject: seed r414 - trunk/examples
- Date: Tue, 9 Dec 2008 16:53:18 +0000 (UTC)
Author: hortont
Date: Tue Dec 9 16:53:17 2008
New Revision: 414
URL: http://svn.gnome.org/viewvc/seed?rev=414&view=rev
Log:
Replace mini browser completely. Now uses GObject subclassing. Yay!
Modified:
trunk/examples/mini-browser.js
Modified: trunk/examples/mini-browser.js
==============================================================================
--- trunk/examples/mini-browser.js (original)
+++ trunk/examples/mini-browser.js Tue Dec 9 16:53:17 2008
@@ -3,194 +3,226 @@
Seed.import_namespace("Gtk");
Seed.import_namespace("WebKit");
-var tabs;
+// Configuration
+var homePage = "http://www.google.com";
+var selectTabOnCreation = false;
+var webKitSettings = new WebKit.WebSettings({enable_developer_extras: true});
-function forward(button)
+function current_tab()
{
- this.go_forward();
+ return browser.get_nth_page(browser.page);
}
-function back(button)
+function go_back()
{
- this.go_back();
+ current_tab().webView.go_back();
+ return false;
}
-function refresh(button)
+function go_forward()
{
- this.reload();
+ current_tab().webView.go_forward();
+ return false;
}
-function title_changed(view, title)
+function refresh_page()
{
- var tab_title = title.title;
-
- if(tab_title.length > 25)
- tab_title = tab_title.slice(0,25) + "...";
-
- this.label = tab_title;
+ current_tab().webView.reload();
+ return false;
}
-function browse(url_entry)
+function close_tab()
{
- if (url_entry.text.search("://") < 0)
+ browser.remove_page(browser.page_num(this));
+
+ if(!browser.get_n_pages())
{
- url_entry.text = "http://" + url_entry.text;
+ browser.new_tab().navigateTo(homePage);
}
- this.open(url_entry.text);
+ return false;
}
-function new_tab(browser_view, browser_frame, new_frame)
+function title_changed(webView, webFrame, title, tab)
{
- new_frame = new WebKit.WebView();
-
-
- new_frame.signal.web_view_ready.connect(new_tab_ready, this);
- return new_frame;
+ if(title.length > 25)
+ title = title.slice(0,25) + "...";
+
+ tab.titleLabel.label = title;
+ return false;
}
-function new_tab_ready(browser_view)
+function url_changed(webView, webFrame, tab)
{
- this.create_tab_with_webview(0, browser_view);
- return true;
+ tab.toolbar.urlBar.text = webFrame.get_uri();
+ return false;
}
-function url_changed(browser_view, browser_frame)
+function new_tab_requested(webView, webFrame, newWebView)
{
- this.text = browser_frame.get_uri();
- return true;
+ newWebView = new WebKit.WebView();
+ newWebView.signal.web_view_ready.connect(new_tab_ready);
+ return newWebView;
}
-function close_tab(button)
+function new_tab_ready(webView)
{
- if(tabs.get_n_pages() > 1)
- {
- tabs.remove_page(tabs.page_num(this));
- }
+ browser.new_tab().setWebView(webView);
+ return false;
}
-function create_toolbar(browser_view)
+function browse(urlBar, tab)
{
- var toolbar = new Gtk.HBox();
-
- var back_button = new Gtk.ToolButton({stock_id:"gtk-go-back"});
- back_button.signal.clicked.connect(back, browser_view);
-
- var forward_button = new Gtk.ToolButton({stock_id:"gtk-go-forward"});
- forward_button.signal.clicked.connect(forward, browser_view);
-
- var refresh_button = new Gtk.ToolButton({stock_id:"gtk-refresh"});
- refresh_button.signal.clicked.connect(refresh, browser_view);
+ if (urlBar.text.search("://") < 0)
+ {
+ urlBar.text = "http://" + urlBar.text;
+ }
- toolbar.pack_start(back_button);
- toolbar.pack_start(forward_button);
- toolbar.pack_start(refresh_button);
+ tab.webView.open(urlBar.text);
- return toolbar;
+ return false;
}
-function create_tab(loc)
-{
- var browser_view = new WebKit.WebView();
-
- settings = new WebKit.WebSettings({enable_developer_extras: true});
- browser_view.set_settings(settings);
+BrowserToolbarType = {
+ parent: Gtk.HBox.type,
+ name: "BrowserToolbar",
+ class_init: function(klass, prototype)
+ {
+ },
+ instance_init: function(klass)
+ {
+ this.urlBar = new Gtk.Entry();
+
+ var back = new Gtk.ToolButton({stock_id:"gtk-go-back"});
+ var forward = new Gtk.ToolButton({stock_id:"gtk-go-forward"});
+ var refresh = new Gtk.ToolButton({stock_id:"gtk-refresh"});
+
+ back.signal.clicked.connect(go_back);
+ forward.signal.clicked.connect(go_forward);
+ refresh.signal.clicked.connect(refresh_page);
+
+ this.pack_start(back);
+ this.pack_start(forward);
+ this.pack_start(refresh);
+ this.pack_start(this.urlBar, true, true);
+ }};
+
+BrowserToolbar = new GType(BrowserToolbarType);
+
+BrowserTabType = {
+ parent: Gtk.VBox.type,
+ name: "BrowserTab",
+ class_init: function(klass, prototype)
+ {
+ prototype.navigateTo = function (location)
+ {
+ if(!this.webView)
+ this.setWebView(new WebKit.WebView());
+
+ this.webView.open(location);
+ this.show_all();
+ }
+
+ prototype.setWebView = function (webView)
+ {
+ if(this.webView)
+ return;
+
+ this.webView = webView;
+
+ this.webView.set_scroll_adjustments(null, null);
+ this.webView.signal.title_changed.connect(title_changed, null, this);
+ this.webView.signal.load_committed.connect(url_changed, null, this);
+ this.webView.signal.create_web_view.connect(new_tab_requested, null, this);
+ this.webView.signal.web_view_ready.connect(new_tab_ready, null, this);
+
+ this.toolbar.urlBar.signal.activate.connect(browse, null, this);
+
+ webView.set_settings(webKitSettings);
+ var inspector = webView.get_inspector();
- var inspector = browser_view.get_inspector();
+ inspector.signal.inspect_web_view.connect(
+ function()
+ {
+ w = new Gtk.Window();
+ s = new Gtk.ScrolledWindow();
+ w.set_title("Inspector");
+
+ w.set_default_size(400, 300);
- inspector.signal.inspect_web_view.connect(
- function()
+ view = new WebKit.WebView();
+ s.add(view);
+ w.add(s);
+
+ w.show_all();
+
+ return view;
+ }
+ );
+
+ this.pack_start(this.webView, true, true);
+ this.show_all();
+ }
+ },
+ instance_init: function(klass)
+ {
+ this.webView = null;
+
+ this.toolbar = new BrowserToolbar();
+
+ this.pack_start(this.toolbar);
+
+ var closeButton = new Gtk.Button();
+ closeButton.set_image(new Gtk.Image({stock: "gtk-close",
+ icon_size: Gtk.IconSize.menu}));
+ closeButton.signal.clicked.connect(close_tab, this);
+ closeButton.set_relief(Gtk.ReliefStyle.none);
+
+ this.title = new Gtk.HBox();
+ this.titleLabel = new Gtk.Label({label:"Untitled"})
+ this.title.pack_start(this.titleLabel);
+ this.title.pack_start(closeButton);
+ this.title.show_all();
+
+ this.show_all();
+ }};
+
+BrowserTab = new GType(BrowserTabType);
+
+TabbedBrowserType = {
+ parent: Gtk.Notebook.type,
+ name: "TabbedBrowser",
+ class_init: function(klass, prototype)
+ {
+ prototype.new_tab = function ()
{
- w = new Gtk.Window();
- s = new Gtk.ScrolledWindow();
- w.set_title("Inspector");
+ var tab = new BrowserTab();
- w.set_default_size(400, 300);
-
- view = new WebKit.WebView();
- s.add(view);
- w.add(s);
+ this.append_page(tab, tab.title);
+ this.set_tab_reorderable(tab, true);
- w.show_all();
+ if(selectTabOnCreation)
+ this.page = this.get_n_pages() - 1;
- return view;
+ return tab;
}
- );
-
-
- return create_tab_with_webview(loc, browser_view);
-}
-
-function create_tab_with_webview(loc, browser_view)
-{
- var tab = new Gtk.VBox();
-
- var browser_title = new Gtk.Label({label:"Untitled"});
-
- var url_entry = new Gtk.Entry();
- url_entry.signal.activate.connect(browse, browser_view);
-
- browser_view.set_scroll_adjustments(null,null);
- browser_view.signal.title_changed.connect(title_changed, browser_title);
- browser_view.signal.load_committed.connect(url_changed, url_entry);
- browser_view.signal.create_web_view.connect(new_tab, this);
- browser_view.signal.web_view_ready.connect(new_tab_ready, this);
-
- if(loc != 0)
- browser_view.open(loc);
-
- var toolbar = create_toolbar(browser_view);
- toolbar.pack_start(url_entry, true, true);
-
- tab.pack_start(toolbar);
- tab.pack_start(browser_view, true, true);
-
- var close_button = new Gtk.Button();
- close_button.set_image(new Gtk.Image({stock: "gtk-close",
- icon_size: Gtk.IconSize.menu}));
- close_button.signal.clicked.connect(close_tab, tab);
- close_button.set_relief(Gtk.ReliefStyle.none);
-
- var tab_header = new Gtk.HBox();
- tab_header.pack_start(browser_title);
- tab_header.pack_start(close_button);
- tab_header.show_all();
-
- tabs.append_page(tab, tab_header);
- tabs.set_tab_reorderable(tab, true);
- tabs.show_all();
-
- return tabs;
-}
+ },
+ instance_init: function(klass)
+ {
+
+ }};
-function create_ui()
-{
- var vbox = new Gtk.VBox();
-
- tabs = new Gtk.Notebook();
- tabs.create_tab = create_tab;
- tabs.create_tab_with_webview = create_tab_with_webview;
-
- tabs.create_tab("http://www.reddit.com/");
- tabs.create_tab("http://www.google.com/");
- vbox.pack_start(tabs, true, true);
-
- return vbox;
-}
+TabbedBrowser = new GType(TabbedBrowserType);
-function browser_init()
-{
- Gtk.init(null, null);
+Gtk.init(null, null);
- var window = new Gtk.Window({title: "Browser"});
- window.signal.hide.connect(Gtk.main_quit);
- window.resize(800,800);
-
- window.add(create_ui());
-
- window.show_all();
- Gtk.main();
-}
+var window = new Gtk.Window({title: "Browser"});
+window.signal.hide.connect(Gtk.main_quit);
+window.resize(800,800);
-browser_init();
+var browser = new TabbedBrowser();
+browser.new_tab().navigateTo(homePage);
+window.add(browser);
+window.show_all();
+Gtk.main();
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]