Beispiel #1
0
        /// <summary>
        /// Adds an assembly to the instance.
        /// </summary>
        /// <param name="filename">The file path to the assembly.</param>
        public void AddAssembly(string filename)
        {
            //Prepare
            AddOnFactory factory   = null;
            string       directory = Path.GetDirectoryName(filename);

            //Create or get factory...
            if (!factories.ContainsKey(directory))
            {
                //Create
                factory = new AddOnFactory()
                {
                    AddOnDirectory = directory
                };
                factories.Add(directory, factory);
            }
            else
            {
                factory = factories[directory];
            }

            //Load Assembly
            try { factory.LoadAssembly(filename); }
            catch (Exception ex) { Console.WriteLine(ex.Message + Environment.NewLine + ex.StackTrace); }
        }
Beispiel #2
0
 /// <summary>
 /// Retrieves all <see cref="AddOnFactory"/> instances within the container.
 /// </summary>
 /// <returns>An array of <see cref="AddOnFactory"/> loaded by the container.</returns>
 public AddOnFactory[] GetFactories()
 {
     //Get Factories
     AddOnFactory[] factories = new AddOnFactory[this.factories.Count];
     this.factories.Values.CopyTo(factories, 0);
     return(factories);
 }
Beispiel #3
0
        private void Factory_InitializeAddOn(AddOnFactory factory, string assemblyName, string typeFullName, IHost host)
        {
            //Create
            IAddOn addOn = factory.CreateInstance <IAddOn>(assemblyName, typeFullName);

            addOn.Initialize(host);

            //Add
            addOns.Add(addOn);
        }
Beispiel #4
0
        private void Factory_InitializeContextMenuItem(AddOnFactory factory, string assemblyName, string typeFullName, IHost host)
        {
            //Create
            IContextMenuItem <TMap, TEntry, TXbox> contextMenuItem = factory.CreateInstance <IContextMenuItem <TMap, TEntry, TXbox> >(assemblyName, typeFullName);

            contextMenuItem.Initialize(host);

            //Add
            addOns.Add(contextMenuItem);
            haloAddOns.Add(contextMenuItem);
            contextMenuItems.Add(contextMenuItem);
        }
Beispiel #5
0
        private void Factory_InitializeTabPage(AddOnFactory factory, string assemblyName, string typeFullName, IHost host)
        {
            //Create
            ITabPage <TMap, TEntry, TXbox> tabPage = factory.CreateInstance <ITabPage <TMap, TEntry, TXbox> >(assemblyName, typeFullName);

            tabPage.Initialize(host);

            //Add
            addOns.Add(tabPage);
            haloAddOns.Add(tabPage);
            xboxAddOns.Add(tabPage);
            tabPages.Add(tabPage);
        }
Beispiel #6
0
        private void Factory_InitializeMenuButton(AddOnFactory factory, string assemblyName, string typeFullName, IHost host)
        {
            //Create
            IMenuButton <TMap, TEntry, TXbox> menuButton = factory.CreateInstance <IMenuButton <TMap, TEntry, TXbox> >(assemblyName, typeFullName);

            menuButton.Initialize(host);

            //Add
            addOns.Add(menuButton);
            haloAddOns.Add(menuButton);
            xboxAddOns.Add(menuButton);
            menuButtons.Add(menuButton);
        }
Beispiel #7
0
        private void Factory_InitializeTool(AddOnFactory factory, string assemblyName, string typeFullName, IHost host)
        {
            //Create
            ITool <TMap, TEntry, TXbox> tool = factory.CreateInstance <ITool <TMap, TEntry, TXbox> >(assemblyName, typeFullName);

            tool.Initialize(host);

            //Add
            addOns.Add(tool);
            haloAddOns.Add(tool);
            xboxAddOns.Add(tool);
            tools.Add(tool);
        }
Beispiel #8
0
        private void Factory_FilterInterfaces(AddOnFactory factory, IHost host)
        {
            //Check Types
            foreach (Type type in factory.GetAddOnTypes())
            {
                //Prepare...
                var halo            = type.GetInterface(typeof(IHaloAddOn <TMap, TEntry>).Name);
                var tool            = type.GetInterface(typeof(ITool <TMap, TEntry, TXbox>).Name);
                var xbox            = type.GetInterface(typeof(IDebugXboxAddOn <TXbox>).Name);
                var menuButton      = type.GetInterface(typeof(IMenuButton <TMap, TEntry, TXbox>).Name);
                var contextMenuItem = type.GetInterface(typeof(IContextMenuItem <TMap, TEntry, TXbox>).Name);
                var tabPage         = type.GetInterface(typeof(ITabPage <TMap, TEntry, TXbox>).Name);
                var assemblyName    = type.Assembly.GetName().Name;
                if (!errors.ContainsKey(factory))
                {
                    errors.Add(factory, new List <Exception>());
                }

                //Check Halo based AddOns
                if (halo != null)
                {
                    using (var haloAddOn = factory.CreateInstance <IHaloAddOn <TMap, TEntry> >(assemblyName, type.FullName))
                        if (haloAddOn != null && haloAddOn.Version == version)
                        {
                            //Initialize...
                            try
                            {
                                if (tool != null)
                                {
                                    Factory_InitializeTool(factory, assemblyName, type.FullName, host);
                                }
                                if (menuButton != null)
                                {
                                    Factory_InitializeMenuButton(factory, assemblyName, type.FullName, host);
                                }
                                if (contextMenuItem != null)
                                {
                                    Factory_InitializeContextMenuItem(factory, assemblyName, type.FullName, host);
                                }
                                if (tabPage != null)
                                {
                                    Factory_InitializeTabPage(factory, assemblyName, type.FullName, host);
                                }
                            }
                            catch (Exception ex) { errors[factory].Add(ex); }
                        }
                }
            }
        }
Beispiel #9
0
        private void deleteButton_Click(object sender, EventArgs e)
        {
            //Prepare
            int count = addOnListView.SelectedItems.Count;

            AddOnFactory[] factories = new AddOnFactory[count];
            ListViewItem[] items     = new ListViewItem[count];

            //Loop through selected items
            for (int i = 0; i < count; i++)
            {
                items[i] = addOnListView.Items[addOnListView.SelectedIndices[i]];
                if (items[i].Tag is AddOnFactory factory)
                {
                    factories[i] = factory;
                }
            }

            //Remove Directories
            foreach (AddOnFactory factory in factories)
            {
                Program.Container.RemoveDirectory(factory.AddOnDirectory);
            }

            //Delete Directories?
            bool failed = false;

            try
            {
                for (int i = 0; i < count; i++)
                {
                    Directory.Delete(factories[i].AddOnDirectory, true);
                    addOnListView.Items.Remove(items[i]);
                }
            }
            catch { failed |= true; }

            //Check
            if (failed)
            {
                if (MessageBox.Show("The directories cannot be deleted. The application must be in safe-mode to delete. " +
                                    "Would you like to restart the program in safe mode?", "Restart required",
                                    MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    Security.Restart("-s"); Application.Exit();
                }
            }
        }
Beispiel #10
0
        private void Factory_FilterInterfaces(AddOnFactory factory, IHost host)
        {
            //Check Types
            foreach (Type type in factory.GetAddOnTypes())
            {
                //Prepare...
                var addOn        = type.GetInterface(typeof(IAddOn).Name);
                var assemblyName = type.Assembly.GetName().Name;

                //Check Settings page
                if (addOn != null)
                {
                    Factory_InitializeAddOn(factory, assemblyName, type.FullName, host);
                }
            }
        }
Beispiel #11
0
		public void EnableAddOnFactory(AddOnFactory factory)
		{
			Native.EnableAddOnFactory(factory);
		}