diff --git a/doc/en/Gtk/HTML.xml b/doc/en/Gtk/HTML.xml index 1acc444a8..3814d5e6b 100644 --- a/doc/en/Gtk/HTML.xml +++ b/doc/en/Gtk/HTML.xml @@ -22,6 +22,124 @@ Gtk.HTML does not have support for CSS or JavaScript. + + The following sample is a very minimal web browser. + + + + +using System; +using System.Net; +using System.IO; +using Gtk; +using GtkSharp; + +namespace HtmlTest +{ + class HtmlTest + { + HTML html; + Entry entry; + string currentUrl; + + static void Main (string[] args) + { + new HtmlTest(); + } + + HtmlTest() + { + Application.Init (); + + Window win = new Window ("HtmlTest"); + win.SetDefaultSize (800, 600); + win.DeleteEvent += new DeleteEventHandler (OnWindowDelete); + + VBox vbox = new VBox (false, 1); + win.Add (vbox); + + HBox hbox = new HBox (false, 1); + + Label label = new Label ("Address:"); + + entry = new Entry (""); + entry.Activated += new EventHandler (OnEntryActivated); + + Button button = new Button ("Go!"); + button.Clicked += new EventHandler (OnButtonClicked); + + hbox.PackStart (label, false, false, 1); + hbox.PackStart (entry, true, true, 1); + hbox.PackStart (button, false, false, 1); + + vbox.PackStart (hbox, false, false, 1); + + ScrolledWindow sw = new ScrolledWindow (); + sw.VscrollbarPolicy = PolicyType.Always; + sw.HscrollbarPolicy = PolicyType.Always; + vbox.PackStart(sw, true, true, 1); + + html = new HTML (); + html.LinkClicked += new LinkClickedHandler (OnLinkClicked); + sw.Add (html); + + win.ShowAll(); + Application.Run (); + + } + + void OnWindowDelete (object obj, DeleteEventArgs args) + { + Application.Quit(); + } + + void OnButtonClicked (object obj, EventArgs args) + { + currentUrl = entry.Text.Trim(); + LoadHtml (currentUrl); + } + + void OnEntryActivated (object obj, EventArgs args) + { + OnButtonClicked (obj, args); + } + + void OnLinkClicked (object obj, LinkClickedArgs args) + { + string newUrl; + + // decide absolute or relative + if (args.Url.StartsWith("http://")) + newUrl = args.Url; + else + newUrl = currentUrl + args.Url; + + try { + LoadHtml (newUrl); + } catch { } + currentUrl = newUrl; + } + + void LoadHtml (string URL) + { + HttpWebRequest web_request = (HttpWebRequest) WebRequest.Create (URL); + HttpWebResponse web_response = (HttpWebResponse) web_request.GetResponse (); + Stream stream = web_response.GetResponseStream (); + byte [] buffer = new byte [8192]; + + HTMLStream html_stream = html.Begin (); + int count; + + while ((count = stream.Read (buffer, 0, 8192)) != 0){ + html_stream.Write (buffer, count); + } + html.End (html_stream, HTMLStreamStatus.Ok); + } + } +} + + +