using System;
using System.Collections.Generic;
-using System.Reflection;
using System.IO;
using System.Text.RegularExpressions;
using System.Runtime.InteropServices;
using WebKit;
namespace bytex64.WebThing {
- public enum CompassDirection {
+ public enum AttachPoint {
N, E, S, W, Interior
}
private Gtk.Table WidgetGrid;
private Gtk.Alignment InteriorOverlay;
- public Dictionary<string,WebThingPlugin> Plugins;
+ public PluginManager Plugins;
[DllImport ("SoupSettings.dll")]
private static extern void soup_settings();
public void Run() {
Application.Init();
- Plugins = new Dictionary<string,WebThingPlugin>();
Config.ParseCommandLine();
Config.Load();
_Tabs = new Gtk.Notebook();
_Tabs.ShowBorder = false;
+ _Tabs.Scrollable = true;
_Tabs.SwitchPage += Tabs_SwitchPage;
WidgetGrid.Attach(_Tabs, 1, 2, 1, 2);
WebThingView newview = NewWebThingView();
- // TODO: Conf.Get("plugins") instead of hard-coded path?
- using (TextReader f = new StreamReader("plugins.conf")) {
- string line;
- while ((line = f.ReadLine()) != null) {
- line = line.Trim();
- LoadPlugin(line);
- }
- }
-
- WebViewSetupPlugins(newview.WebView);
+ Plugins = new PluginManager(this);
+ Plugins.Load();
+ Plugins.WebViewSetup(newview.WebView);
newview.WebView.GrabFocus();
Application.Run();
}
- public void LoadPlugin(string assemblyname) {
- Assembly a = Assembly.LoadFile("plugins/" + assemblyname + ".dll");
- Type[] types = a.GetTypes();
- foreach (Type t in types) {
- 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;
- Console.WriteLine("Successfully loaded {0}", t.FullName);
- }
- }
- }
-
- public void AttachWidget(Gtk.Widget widget, CompassDirection direction, AttachOptions xoptions, AttachOptions yoptions) {
+ public void AttachWidget(Gtk.Widget widget, AttachPoint direction, AttachOptions xoptions, AttachOptions yoptions) {
switch(direction) {
- case CompassDirection.N:
+ case AttachPoint.N:
WidgetGrid.Attach(widget, 0, 3, 0, 1, xoptions, yoptions, 0, 0);
break;
- case CompassDirection.E:
+ case AttachPoint.E:
WidgetGrid.Attach(widget, 2, 3, 1, 2, xoptions, yoptions, 0, 0);
break;
- case CompassDirection.S:
+ case AttachPoint.S:
WidgetGrid.Attach(widget, 0, 3, 2, 3, xoptions, yoptions, 0, 0);
break;
- case CompassDirection.W:
+ case AttachPoint.W:
WidgetGrid.Attach(widget, 0, 1, 1, 2, xoptions, yoptions, 0, 0);
break;
- case CompassDirection.Interior:
+ case AttachPoint.Interior:
InteriorOverlay.Add(widget);
break;
}
}
- public void AttachWidget(Gtk.Widget widget, CompassDirection direction) {
+ public void AttachWidget(Gtk.Widget widget, AttachPoint direction) {
AttachWidget(widget, direction, 0, 0);
}
public WebView NewTab() {
WebThingView newview = NewWebThingView();
- WebViewSetupPlugins(newview.WebView);
+ Plugins.WebViewSetup(newview.WebView);
return newview.WebView;
}
return newview;
}
- private void WebViewSetupPlugins(WebView view) {
- foreach (string key in Plugins.Keys) {
- Plugins[key].InitWebView(view);
- }
- }
-
public void CloseTab() {
CloseTab(_Tabs.Page);
}