using System;
using System.Collections;
namespace FastReport.Design
{
///
/// Represents collection of designer plugins.
///
///
/// This class is used in the Designer.Plugins property.
/// To register own plugin, add its type to the global collection:
///
/// DesignerPlugins.Add(typeof(MyToolbar));
///
///
///
public class PluginCollection : CollectionBase
{
private Designer designer;
internal IDesignerPlugin this[int index]
{
get { return List[index] as IDesignerPlugin; }
}
internal IDesignerPlugin Add(Type plugin)
{
foreach (IDesignerPlugin p in this)
{
if (p.GetType() == plugin)
return p;
}
IDesignerPlugin newPlugin = Activator.CreateInstance(plugin, new object[] { designer }) as IDesignerPlugin;
Add(newPlugin);
return newPlugin;
}
internal void Add(IDesignerPlugin plugin)
{
int i = List.IndexOf(plugin);
if (i == -1)
List.Add(plugin);
}
internal void AddRange(Type[] range)
{
if (range == null)
return;
foreach (Type t in range)
{
Add(t);
}
}
internal void AddRange(IDesignerPlugin[] range)
{
if (range == null)
return;
foreach (IDesignerPlugin plugin in range)
{
Add(plugin);
}
}
internal void Remove(Type plugin)
{
for (int i = 0; i < Count; i++)
{
IDesignerPlugin p = this[i];
if (p.GetType() == plugin)
{
Remove(p);
return;
}
}
}
internal void Remove(IDesignerPlugin plugin)
{
List.Remove(plugin);
plugin.SaveState();
if (plugin is IDisposable)
(plugin as IDisposable).Dispose();
}
internal void RemoveRange(Type[] range)
{
if (range == null)
return;
foreach (Type t in range)
{
Remove(t);
}
}
internal void SelectionChanged(object sender)
{
foreach (IDesignerPlugin plugin in this)
{
if (plugin != sender)
plugin.SelectionChanged();
}
}
internal void Lock()
{
foreach (IDesignerPlugin plugin in this)
{
plugin.Lock();
}
}
internal void Unlock()
{
foreach (IDesignerPlugin plugin in this)
{
plugin.Unlock();
}
}
internal void Update(object sender)
{
foreach (IDesignerPlugin plugin in this)
{
if (plugin != sender)
plugin.UpdateContent();
}
}
internal void UpdateDpiDependencies(object sender)
{
foreach (IDesignerPlugin plugin in this)
{
if (plugin != sender)
plugin.UpdateDpiDependencies();
}
}
internal void Localize()
{
foreach (IDesignerPlugin plugin in this)
{
plugin.Localize();
}
}
internal void UpdateUIStyle()
{
foreach (IDesignerPlugin plugin in this)
{
plugin.UpdateUIStyle();
}
}
///
/// Finds a plugin by its name.
///
/// The plugin's name.
/// The plugin, if found; otherwise, null.
/// This example shows how to find a plugin.
///
/// MessagesWindow window = designer.Plugins.Find("MessagesWindow") as MessagesWindow;
///
///
public IDesignerPlugin Find(string pluginName)
{
foreach (IDesignerPlugin plugin in this)
{
if (plugin.PluginName == pluginName)
return plugin;
}
return null;
}
///
/// Finds a plugin by its type name.
///
/// The plugin's type name.
/// The plugin, if found; otherwise, null.
/// This example shows how to find a plugin.
///
/// MessagesWindow window = designer.Plugins.FindType("MessagesWindow") as MessagesWindow;
///
///
public IDesignerPlugin FindType(string typeName)
{
foreach (IDesignerPlugin plugin in this)
{
if (plugin.GetType().ToString() == typeName)
return plugin;
}
return null;
}
internal void SaveState()
{
foreach (IDesignerPlugin plugin in this)
{
plugin.SaveState();
}
}
internal void RestoreState()
{
foreach (IDesignerPlugin plugin in this)
{
plugin.RestoreState();
}
}
internal PluginCollection(Designer designer)
: base()
{
this.designer = designer;
}
}
}