void LoadPlugins() { pluginCore.ReloadPlugins(); MenuItem pluginMenuItem = null; foreach (Widget w in menubar1.AllChildren) { if ((w as MenuItem)?.Name == "PluginsAction") { pluginMenuItem = w as MenuItem; break; } } var reloadItem = new MenuItem("Reload plugins"); reloadItem.Activated += (a, b) => LoadPlugins(); pluginSubMenu = new Menu(); pluginMenuItem.Submenu = pluginSubMenu; pluginSubMenu.Append(reloadItem); foreach (Plugin plugin in pluginCore.GetPlugins()) { var item = new MenuItem(plugin.Name); item.Activated += ((a, b) => { #if DEBUG plugin.Clicked(); #else try { plugin.Clicked(); } catch (Exception e) { string msg = "The plugin \"" + plugin.Name + "\" threw an exception:\n\n" + e.Message; Gtk.MessageDialog d = new MessageDialog(null, DialogFlags.DestroyWithParent, MessageType.Error, ButtonsType.Ok, msg); d.Run(); d.Destroy(); } #endif }); pluginSubMenu.Append(item); } menubar1.ShowAll(); }
void LoadPlugins() { // TEMPORARY: Hide "Action" menu for now (AutoSmoother will be hidden until it's more // fleshed out) menubar1.Remove(actionMenuItem); #if (!DEBUG) menubar1.Remove(debugMenuItem); #endif pluginCore.ReloadPlugins(); foreach (Plugin plugin in pluginCore.GetPlugins()) { Gtk.Menu pluginSubMenu; if (plugin.Category == "Window") { pluginSubMenu = editMenuItem.Submenu as Gtk.Menu; } else if (plugin.Category == "Action") { pluginSubMenu = actionMenuItem.Submenu as Gtk.Menu; } else if (plugin.Category == "Debug") { pluginSubMenu = debugMenuItem.Submenu as Gtk.Menu; } else { log.Error("Unknown category '" + plugin.Category + "'."); continue; } var item = new MenuItem(plugin.Name); item.Activated += ((a, b) => { plugin.SpawnWindow(); }); pluginSubMenu.Append(item); } menubar1.ShowAll(); }