using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.Core.AddIns;
using ICSharpCode.Core.AddIns.Codons;
namespace Addins.AddinTreeView
/// AddinTreeViewControl 的摘要说明。
public class AddinTreeViewControl : System.Windows.Forms.UserControl
private System.Windows.Forms.ColumnHeader chName;
private System.Windows.Forms.ListView lvAddin;
private System.Windows.Forms.ColumnHeader chInfo;
private System.Windows.Forms.CheckBox cbShowAddinInfo;
private System.Windows.Forms.Splitter splitter2;
private System.Windows.Forms.ListView lvDebug;
private System.Windows.Forms.Splitter splitter1;
private System.Windows.Forms.TreeView tvAddin;
private System.Windows.Forms.ColumnHeader chValue;
private System.ComponentModel.Container components = null;
public AddinTreeViewControl()
// 该调用是 Windows.Forms 窗体设计器所必需的。
// TODO: 在 InitializeComponent 调用后添加任何初始化
protected override void Dispose( bool disposing )
base.Dispose( disposing );
TreeNode pathNode = tvAddin.Nodes.Add("AddinRoot");
foreach ( AddIn addIn in AddInTreeSingleton.AddInTree.AddIns)
foreach ( ICSharpCode.Core.AddIns.AddIn.Extension e in addIn.Extensions)
string [] paths = e.Path.Split('/');
pathNode = tvAddin.Nodes[0];
for ( int i=0; i<paths.Length; i++)
pathNode = tvAddin.Nodes[0];
for ( int j=0; j<pathNode.Nodes.Count; j++)
if ( pathNode.Nodes[j].Text == paths[i] )
pathNode = pathNode.Nodes[j];
pathNode = pathNode.Nodes.Add( paths[i] );
pathNode.Tag = new ArrayList();
//lvDebug.Items.Add("Add " + e.Path + " ---- " + paths[i]);
(pathNode.Tag as ArrayList).Add(e);
void AddInfo(string Name, string Value)
lvAddin.Items.Add(Name).SubItems.Add(Value);
private void tvAddin_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e)
if ( e.Node.Tag != null )
foreach (AddIn.Extension et in (e.Node.Tag as ArrayList))
AddInfo("Extension", et.ToString());
foreach ( ICodon codon in et.CodonCollection)
AddInfo(" ┏ Codon ID", codon.ID);
AddInfo(" ┣ Codon Name", codon.Name);
AddInfo(" ┗ Codon Class", codon.Class);
if ( cbShowAddinInfo.Checked )
AddInfo(" ┣ Addin Name", codon.AddIn.Name);
AddInfo(" ┗ Addin FileName", codon.AddIn.FileName);
foreach ( ICSharpCode.Core.AddIns.AddIn.Extension ex in codon.AddIn.Extensions)
AddInfo(" ┣ Addin Extensions", ex.Path);
AddInfo(" ┗━━━━━━━━━", "");