Exemple #1
0
        private void AddNewMenuItem(ToolStripMenuItem menu, BuilderMenuItem root)
        {
            foreach (var item in root.Items)
            {
                var mi = new ToolStripMenuItem(item.Name);
                mi.Tag    = item.Builder;
                mi.Click += BuilderMenuItemClick;
                menu.DropDownItems.Add(mi);

                AddNewMenuItem(mi, item);
            }
        }
Exemple #2
0
        private void LoadPlugins()
        {
            var files = Directory.GetFiles("Plugins", "*.dll", SearchOption.AllDirectories);

            var             buildersMenu = new ToolStripMenuItem("Builders");
            BuilderMenuItem root         = new BuilderMenuItem();

            menuStrip.Items.Add(buildersMenu);

            foreach (var f in files)
            {
                Assembly a            = Assembly.LoadFrom(f);
                var      builderTypes = a.GetTypes().Where(o => IsSubclassOfRawGeneric(typeof(Builder <>), o));

                foreach (var bt in builderTypes)
                {
                    var builder     = Activator.CreateInstance(bt) as BuilderBase;
                    var pathChunks  = builder.BuilderPath.Split('/');
                    var currentRoot = root;
                    foreach (var chunk in pathChunks.Take(pathChunks.Length - 1))
                    {
                        var existing = currentRoot.Items.FirstOrDefault(o => o.Name == chunk);
                        if (existing == null)
                        {
                            currentRoot.Items.Add(new BuilderMenuItem()
                            {
                                Name = chunk
                            });
                        }
                        currentRoot = currentRoot.Items.FirstOrDefault(o => o.Name == chunk);
                    }
                    currentRoot.Items.Add(new BuilderMenuItem()
                    {
                        Builder = builder,
                        Name    = pathChunks.Last(),
                    });
                }
            }

            AddNewMenuItem(buildersMenu, root);
        }