X-Git-Url: http://git.bytex64.net/?a=blobdiff_plain;f=WebThing.cs;fp=WebThing.cs;h=7855ae3ee9c8bbdbd23741e27b7bd6c57bfaafcd;hb=0b2e5f8fffd9ed781a1ddab279dbd6fec5c7695a;hp=523a160766f5efd3adc49c53561f35abf7196f85;hpb=80865e6b884a4bb289cb4a835a6fa66b3529c872;p=WebThing.git diff --git a/WebThing.cs b/WebThing.cs index 523a160..7855ae3 100644 --- a/WebThing.cs +++ b/WebThing.cs @@ -14,33 +14,56 @@ namespace bytex64.WebThing { } public class WebThing { + private Gtk.Window _Window; public Gtk.Window Window { get { return _Window; } } - public Gtk.Window w { get { return _Window; } } - public Gtk.ScrolledWindow ScrolledWindow { - get { return _ScrolledWindow; } + public ScrolledWindow ScrolledWindow { + get { return Tabs.CurrentPageWidget as ScrolledWindow; } } - - public Gtk.ScrolledWindow sw { - get { return _ScrolledWindow; } + public ScrolledWindow sw { + get { return ScrolledWindow; } } - public WebKit.WebView WebView { - get { return _WebView; } + public WebView WebView { + get { return (Tabs.CurrentPageWidget as WebThingView).WebView; } + } + public WebView wv { + get { return WebView; } } - public WebKit.WebView wv { - get { return _WebView; } + private Gtk.Notebook _Tabs; + public Gtk.Notebook Tabs { + get { return _Tabs; } + } + /* + private int _CurrentTab; + public int CurrentTab { + get { return _CurrentTab; } + set { + if (value >= _Tabs.Count) + _CurrentTab = _Tabs.Count - 1; + else if (value < 0) + _CurrentTab = 0; + else + _CurrentTab = value; + + _WebView.Hide(); + _ScrolledWindow.Remove(_WebView); + _WebView = _Tabs[_CurrentTab]; + _ScrolledWindow.Add(_WebView); + foreach (WebView view in Tabs) + Console.WriteLine(view.MainFrame.Uri); + _WebView.Show(); + _WebView.GrabFocus(); + } } + */ - private Gtk.Window _Window; - private ScrolledWindow _ScrolledWindow; - private WebKit.WebView _WebView; private Gtk.Table WidgetGrid; private Gtk.Alignment InteriorOverlay; @@ -53,9 +76,11 @@ namespace bytex64.WebThing { public void Run() { Application.Init(); - + Plugins = new Dictionary(); ParseArgs(); + soup_settings(); + _Window = new Gtk.Window("WebThing"); _Window.SetWmclass("webthing", "WebThing"); _Window.Role = "browser"; @@ -64,23 +89,17 @@ namespace bytex64.WebThing { WidgetGrid = new Gtk.Table(3, 3, false); _Window.Add(WidgetGrid); - _ScrolledWindow = new Gtk.ScrolledWindow(); - WidgetGrid.Attach(_ScrolledWindow, 1, 2, 1, 2); + _Tabs = new Gtk.Notebook(); + _Tabs.SwitchPage += Tabs_SwitchPage; + WidgetGrid.Attach(_Tabs, 1, 2, 1, 2); InteriorOverlay = new Gtk.Alignment(1, 0, 0, 0); WidgetGrid.Attach(InteriorOverlay, 1, 2, 1, 2); - _WebView = new WebKit.WebView(); - _WebView.TitleChanged += delegate(object o, TitleChangedArgs e) { - _Window.Title = e.Title + " - WebThing"; - }; - soup_settings(); - - _ScrolledWindow.Add(_WebView); - _Window.ShowAll(); - Plugins = new Dictionary(); + WebThingView newview = NewWebThingView(); + // TODO: Conf.Get("plugins") instead of hard-coded path? using (TextReader f = new StreamReader("plugins.conf")) { string line; @@ -90,6 +109,9 @@ namespace bytex64.WebThing { } } + WebViewSetupPlugins(newview.WebView); + newview.WebView.GrabFocus(); + Application.Run(); } @@ -157,7 +179,7 @@ namespace bytex64.WebThing { Assembly a = Assembly.LoadFile("plugins/" + assemblyname + ".dll"); Type[] types = a.GetTypes(); foreach (Type t in types) { - if (t.GetInterface("WebThingPlugin") != null) { + if (t.IsSubclassOf(typeof(WebThingPlugin))) { WebThingPlugin p = (WebThingPlugin) a.CreateInstance(t.FullName, false, BindingFlags.ExactBinding, null, null, null, null); p.Init(this); Plugins[t.FullName] = p; @@ -190,16 +212,69 @@ namespace bytex64.WebThing { AttachWidget(widget, direction, 0, 0); } - public void OpenUri(string Uri) { + public WebView NewTab() { + WebThingView newview = NewWebThingView(); + WebViewSetupPlugins(newview.WebView); + return newview.WebView; + } + + private WebThingView NewWebThingView() { + WebThingView newview = new WebThingView(); + Tabs.AppendPage(newview, new Label("Blank")); + newview.WebView.TitleChanged += delegate(object o, TitleChangedArgs e) { + Tabs.SetTabLabelText((Gtk.Widget) newview, e.Title); + if (newview == Tabs.CurrentPageWidget) + _Window.Title = e.Title + " - WebThing"; + }; + newview.Show(); + return newview; + } + + private void WebViewSetupPlugins(WebView view) { + foreach (string key in Plugins.Keys) { + Plugins[key].InitWebView(view); + } + } + + public void CloseTab() { + CloseTab(_Tabs.Page); + } + + public void CloseTab(int tab) { + if (_Tabs.NPages > 1) { + try { + WebThingView view = _Tabs.GetNthPage(tab) as WebThingView; + _Tabs.RemovePage(tab); + view.Dispose(); + } catch (ArgumentOutOfRangeException) { + } + } + } + + public string FixUri(string Uri) { if (!Regex.IsMatch(Uri, @"://")) { - Uri = String.Format("http://{0}", Uri); + return String.Format("http://{0}", Uri); } - wv.Open(Uri); + return Uri; + } + + public void OpenUri(string Uri) { + wv.Open(FixUri(Uri)); + } + + public void OpenUriTab(string Uri) { + WebView view = NewTab(); + view.Open(FixUri(Uri)); } public void Quit() { // TODO: Create a way of shutting down plugins Application.Quit(); } + + private void Tabs_SwitchPage(object o, SwitchPageArgs e) { + Gtk.Widget page = _Tabs.GetNthPage((int)e.PageNum); + _Window.Title = _Tabs.GetTabLabelText(page) + " - WebThing"; + } } }