Development

Any developer can create his own plugin and share it with others.

To create plugin you need connect 4 libraries: Interface, Common, WPFControls, WPFWinForms

Simple plugin
You should create new class and inherit it from:
  public interface IPlugin  {  
  void Init(IPluginContext context); // Initialization method.  
  UMenuItem[] Menu{get;}; // Method to get plugin menu.  
  Icon Icon { get; } // Method to get plugin icon.  
} 
Method Init is called only once: when plugin is created. It accept next parameter:
public interface IPluginContext  {  
  IDataProvider DataProvider { get; } // Data provider - provide paths.  
  void RebuildMenu(); // Call it to rebuild menu  
  Icon GetIcon(string path, int id); // Method to get icon from file (result is cached for all plugins).  
  Icon GetSystemIcon(int id); // Method to get system icon (result is cached for all plugins).  
  void AddTypeToWarmingUp(Type t); // Method to add class to warming up queue (to improve startup speed). Result is cached for all plugins, type is created only once in STA thread.  
} 
Where
public interface IDataProvider  {  
  string DataPath { get; } // Path to folder with plugin data.  
  string ToolsPath { get; } // Path to folder with tools.  
} 

Configurable plugin. If you need save settings for plugin, you should inherit from:
public interface IConfigurablePlugin : IPlugin, IConfigurable  {  
  void Load(); // Method is called on plugin Load or when user pressed Reload button.  
  void Save(bool autoSaveOnExit); // Method is called on plugins save. autoSaveOnExit=true, on exit.  
  Func<Control> SettingsGetter{ get; }// Returns dialog control, if null, then dialog have no settings. Best practice is to use lazy initialization. 
 } 
Attributes. Plugin should have 2 attributes:
PluginName - name of the plugin (should be unique),
PluginDescription - description of the plugin (you can see it on the page when you enable/disable plugins).

Exist base classes:
* SimplePlugin - simplest implementation.
* SimpleConfigurablePlugin<TConfig> - Implementation with config file.
* ConfigurablePlugin<TSettings, TConfig> - Implementation with config file and settings dialog.

Installation. After plugin is ready, you should place it to the folder with plugins and put depends libririest to Library folder.

Last edited Jul 14, 2013 at 10:55 AM by mnk92, version 4