X-Git-Url: http://git.bytex64.net/?a=blobdiff_plain;f=WebThing.cs;h=f36a8faa4c6daebda17599e1771bd509700b6235;hb=7bf09cef03c7fd78e599039b14a29e8a3f3eed42;hp=04ede6747e97ec6ebee7bc7eca0c3ad77565137d;hpb=126f2111e41f6b2595ffde1de6828ef12246e545;p=WebThing.git diff --git a/WebThing.cs b/WebThing.cs index 04ede67..f36a8fa 100644 --- a/WebThing.cs +++ b/WebThing.cs @@ -2,14 +2,14 @@ using System; using System.Collections.Generic; using System.Reflection; using System.IO; +using System.Text.RegularExpressions; using Gtk; using GtkSharp; using WebKit; namespace bytex64.WebThing { public enum CompassDirection { - N, NE, E, SE, S, SW, W, NW, - Interior + N, E, S, W, Interior } public class WebThing { @@ -44,11 +44,16 @@ namespace bytex64.WebThing { private Gtk.Alignment InteriorOverlay; public Dictionary Plugins; + public Dictionary Options; + public string[] Arguments; public void Run() { Application.Init(); + + ParseArgs(); + _Window = new Gtk.Window("WebThing"); - _Window.Destroyed += delegate { Application.Quit(); }; + _Window.Destroyed += delegate { Quit(); }; WidgetGrid = new Gtk.Table(3, 3, false); _Window.Add(WidgetGrid); @@ -80,6 +85,66 @@ namespace bytex64.WebThing { Application.Run(); } + protected void ParseArgs() { + Options = new Dictionary(); + Queue q = new Queue(); + foreach (string s in System.Environment.GetCommandLineArgs()) { + q.Enqueue(s); + } + q.Dequeue(); // Remove self argument + + Regex SimpleOpt = new Regex(@"^-([a-zA-Z0-9]+)$"); + Regex LongOpt = new Regex(@"^--([\w-]+)$"); + string OptLast = null; + List args = new List(); + + while (q.Count > 0) { + string opt = q.Dequeue(); + Match m; + + m = SimpleOpt.Match(opt); + if (m.Success) { + string s = m.Groups[1].Value; + if (s.Length > 1) { + foreach (char c in s) { + Options[c.ToString()] = ""; + } + OptLast = null; + } else { + Options[s] = ""; + OptLast = s; + } + continue; + } + + m = LongOpt.Match(opt); + if (m.Success) { + string s = m.Groups[1].Value; + Options[s] = ""; + OptLast = s; + continue; + } + + // else + + if (OptLast != null) { + Options[OptLast] = opt; + OptLast = null; + } else { + args.Add(opt); + } + } + Arguments = args.ToArray(); + + /* + Console.WriteLine("Options:"); + foreach (string key in Options.Keys) + Console.WriteLine(" {0}\t{1}", key, Options[key]); + + Console.WriteLine("Arguments: {0}", String.Join(" ", Arguments)); + */ + } + public void LoadPlugin(string assemblyname) { Assembly a = Assembly.LoadFile("plugins/" + assemblyname + ".dll"); object obj = a.CreateInstance("Plugin", false, BindingFlags.ExactBinding, null, new object[] { this }, null, null); @@ -89,29 +154,17 @@ namespace bytex64.WebThing { public void AttachWidget(Gtk.Widget widget, CompassDirection direction, AttachOptions xoptions, AttachOptions yoptions) { switch(direction) { case CompassDirection.N: - WidgetGrid.Attach(widget, 1, 2, 0, 1, xoptions, yoptions, 0, 0); - break; - case CompassDirection.NE: - WidgetGrid.Attach(widget, 2, 3, 0, 1, xoptions, yoptions, 0, 0); + WidgetGrid.Attach(widget, 0, 3, 0, 1, xoptions, yoptions, 0, 0); break; case CompassDirection.E: WidgetGrid.Attach(widget, 2, 3, 1, 2, xoptions, yoptions, 0, 0); break; - case CompassDirection.SE: - WidgetGrid.Attach(widget, 2, 3, 2, 3, xoptions, yoptions, 0, 0); - break; case CompassDirection.S: - WidgetGrid.Attach(widget, 1, 2, 2, 3, xoptions, yoptions, 0, 0); - break; - case CompassDirection.SW: - WidgetGrid.Attach(widget, 0, 1, 2, 3, xoptions, yoptions, 0, 0); + WidgetGrid.Attach(widget, 0, 3, 2, 3, xoptions, yoptions, 0, 0); break; case CompassDirection.W: WidgetGrid.Attach(widget, 0, 1, 1, 2, xoptions, yoptions, 0, 0); break; - case CompassDirection.NW: - WidgetGrid.Attach(widget, 0, 1, 0, 1, xoptions, yoptions, 0, 0); - break; case CompassDirection.Interior: InteriorOverlay.Add(widget); break; @@ -121,5 +174,17 @@ namespace bytex64.WebThing { public void AttachWidget(Gtk.Widget widget, CompassDirection direction) { AttachWidget(widget, direction, 0, 0); } + + public void OpenUri(string Uri) { + if (!Regex.IsMatch(Uri, @"://")) { + Uri = String.Format("http://{0}", Uri); + } + wv.Open(Uri); + } + + public void Quit() { + // TODO: Create a way of shutting down plugins + Application.Quit(); + } } }