ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/RomCheater/trunk/RomCheater.PluginFramework/Core/PluginLoader.cs
(Generate patch)

Comparing trunk/RomCheater.PluginFramework/Core/PluginLoader.cs (file contents):
Revision 436 by william, Fri Jun 22 08:33:51 2012 UTC vs.
Revision 437 by william, Tue May 28 18:08:23 2013 UTC

--- trunk/RomCheater.PluginFramework/Core/PluginLoader.cs	2013/05/28 17:17:19	436
+++ trunk/RomCheater.PluginFramework/Core/PluginLoader.cs	2013/05/28 18:08:23	437
@@ -29,6 +29,7 @@ namespace RomCheater.PluginFramework.Cor
             LoadedConfigPlugins = new List<IConfigPlugin>();
             LoadedInputPlugins = new List<IInputPlugin>();
             LoadedWindowPlugins = new List<IWindowPlugin>();
+            LoadedUserControlPlugins = new List<IUserControlPlugin>();
         }
         #region IPluginLoader Members
         public void LoadPlugins() { LoadPlugins(false); }
@@ -53,6 +54,7 @@ namespace RomCheater.PluginFramework.Cor
                     GetConfigPluginsFromDll(fi);
                     GetInputPluginsFromDll(fi);
                     GetWindowPluginsFromDll(fi);
+                    GetUserControlPluginsFromDll(fi);
                 }
 
                 if (!silent)
@@ -62,6 +64,8 @@ namespace RomCheater.PluginFramework.Cor
                 if (!silent)
                     logger.Info.WriteLine("  Loaded {0} window plugins", LoadedWindowPlugins.Count);
                 if (!silent)
+                    logger.Info.WriteLine("  Loaded {0} usercontrol plugins", LoadedUserControlPlugins.Count);
+                if (!silent)
                     logger.Info.WriteLine("Plugins Loaded.");
             }
             catch (ReflectionTypeLoadException ex)
@@ -86,6 +90,7 @@ namespace RomCheater.PluginFramework.Cor
         public List<IConfigPlugin> LoadedConfigPlugins { get; private set; }
         public List<IInputPlugin> LoadedInputPlugins { get; private set; }
         public List<IWindowPlugin> LoadedWindowPlugins { get; private set; }
+        public List<IUserControlPlugin> LoadedUserControlPlugins { get; private set; }
 
         public IConfigPlugin GetConfigPlugin(string t)
         {
@@ -117,6 +122,11 @@ namespace RomCheater.PluginFramework.Cor
             foreach (IWindowPlugin c in LoadedWindowPlugins) { }
             return null;
         }
+        private IUserControlPlugin GetUserControlPlugin()
+        {
+            foreach (IUserControlPlugin c in LoadedUserControlPlugins) { }
+            return null;
+        }
         #endregion
 
         private void GetConfigPluginsFromDll(FileInfo dll)
@@ -213,6 +223,38 @@ namespace RomCheater.PluginFramework.Cor
                         }
                     }
                 }
+            }
+        }
+        private void GetUserControlPluginsFromDll(FileInfo dll)
+        {
+            logger.Debug.WriteLine("  Getting UserControl plugins contained in {0}", dll.Name);
+            Assembly asm = Assembly.LoadFile(dll.FullName);
+            List<Type> types = new List<Type>(asm.GetTypes());
+            foreach (Type type in types)
+            {
+                if (type.BaseType == typeof(UserControlPlugin))
+                {
+                    ConstructorInfo ci = null;
+                    ci = type.GetConstructor(new Type[] { });
+                    if (ci == null)
+                    {
+                        throw new NullReferenceException(string.Format("Unable to bind to constructor for type: {0}", type.Name));
+                    }
+                    else
+                    {
+                        object o = ci.Invoke(new object[] { });
+                        IUserControlPlugin c = (IUserControlPlugin)o;
+                        if (c == null)
+                        {
+                            throw new NullReferenceException(string.Format("Failed to cast type {0} to IConfigPlugin", type.Name));
+                        }
+                        else
+                        {
+                            logger.Debug.WriteLine("    Loaded UserControl Plugin [name={0}] from {1}", c.Name, dll.Name);
+                            LoadedUserControlPlugins.Add(c);
+                        }
+                    }
+                }
             }
         }
     }