Changeset 174


Ignore:
Timestamp:
03/09/08 15:11:05 (7 years ago)
Author:
lowjoel
Message:

Added the Plugin Loaded event and implemented the Settings Panel to intercept that event.

Location:
branches/eraser6
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/eraser6/Eraser/SettingsPanel.cs

    r122 r174  
    66using System.Text; 
    77using System.Windows.Forms; 
     8 
     9using Eraser.Manager.Plugin; 
    810 
    911namespace Eraser 
     
    1517            InitializeComponent(); 
    1618            Dock = DockStyle.None; 
     19 
     20            //Load the list of DLLs 
     21            Host instance = Host.Instance; 
     22            List<PluginInstance>.Enumerator i = instance.Plugins.GetEnumerator(); 
     23            while (i.MoveNext()) 
     24            { 
     25                ListViewItem item = pluginsManager.Items.Add(i.Current.Plugin.Name); 
     26                item.SubItems.Add(i.Current.Plugin.Author); 
     27                item.SubItems.Add(string.Empty);//item.SubItems.Add(i.Current.Version); 
     28                item.SubItems.Add(i.Current.Path); 
     29            } 
     30 
     31            //For new DLLs, register the callback. 
     32            instance.PluginLoad += new Host.OnPluginLoadEventHandler(OnNewPluginLoaded); 
     33        } 
     34 
     35        private void OnNewPluginLoaded(PluginInstance instance) 
     36        { 
     37            throw new NotImplementedException("The plugin load event handler has not been implemented."); 
    1738        } 
    1839    } 
  • branches/eraser6/Manager/Plugins.cs

    r172 r174  
    3232        /// Retrieves the list of currently loaded plugins. 
    3333        /// </summary> 
    34         public abstract List<IPlugin> Plugins 
     34        public abstract List<PluginInstance> Plugins 
    3535        { 
    3636            get; 
     37        } 
     38 
     39        /// <summary> 
     40        /// The plugin load event delegate. 
     41        /// </summary> 
     42        /// <param name="instance">The instance of the plugin loaded.</param> 
     43        public delegate void OnPluginLoadEventHandler(PluginInstance instance); 
     44 
     45        /// <summary> 
     46        /// The plugin loaded event. 
     47        /// </summary> 
     48        public event OnPluginLoadEventHandler PluginLoad; 
     49 
     50        /// <summary> 
     51        /// Event callback executor for the OnPluginLoad Event 
     52        /// </summary> 
     53        /// <param name="instance"></param> 
     54        protected void OnPluginLoad(PluginInstance instance) 
     55        { 
     56            if (PluginLoad != null) 
     57                PluginLoad.Invoke(instance); 
    3758        } 
    3859 
     
    7495        public const string PLUGINSFOLDER = "Plugins/"; 
    7596 
    76         public override List<IPlugin> Plugins 
     97        public override List<PluginInstance> Plugins 
    7798        { 
    7899            get { return plugins; } 
     
    95116                if (typeInterface != null) 
    96117                { 
     118                    //Initialize the plugin 
    97119                    IPlugin pluginInterface = (IPlugin)Activator.CreateInstance( 
    98120                        assembly.GetType(type.ToString())); 
    99121                    pluginInterface.Initialize(this); 
     122 
     123                    //Create the PluginInstance structure 
     124                    PluginInstance instance = new PluginInstance(assembly, filePath, pluginInterface); 
     125 
     126                    //Add the plugin to the list of loaded plugins 
    100127                    lock (plugins) 
    101                         plugins.Add(pluginInterface); 
     128                        plugins.Add(instance); 
     129                    OnPluginLoad(instance); 
    102130                } 
    103131            } 
     
    109137        } 
    110138 
    111         private List<IPlugin> plugins = new List<IPlugin>(); 
     139        private List<PluginInstance> plugins = new List<PluginInstance>(); 
     140    } 
     141 
     142    /// <summary> 
     143    /// Structure holding the instance values of the plugin like handle and path. 
     144    /// </summary> 
     145    public struct PluginInstance 
     146    { 
     147        internal PluginInstance(Assembly assembly, string path, IPlugin plugin) 
     148        { 
     149            Assembly = assembly; 
     150            Path = path; 
     151            Plugin = plugin; 
     152        } 
     153 
     154        public Assembly Assembly; 
     155        public string Path; 
     156        public IPlugin Plugin; 
    112157    } 
    113158 
Note: See TracChangeset for help on using the changeset viewer.