コード例 #1
0
ファイル: MainWindow.cs プロジェクト: resonancellc/LynnaLab
    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();
    }
コード例 #2
0
    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();
    }