SharpDevelop的AddInTree View 插件

自從SharpDevelop 源碼分析的系列文章發出來之後,很多朋友給了不錯的評價,在這裏先感謝各位朋友的鼓勵。另外,評論中有位朋友想看看我在文章中提到的AddInTreeView插件,其實這個是個很簡單的小東西,因此單獨發在這裏了。(好像沒有找到那裏能上傳文件,因此直接貼代碼了) AddinTreeViewCommand.cs
/*  * Created by SharpDevelop.  * User: Administrator  * Date: 2004-10-4  * Time: 4:12  *   * To change this template use Tools | Options | Coding | Edit Standard Headers.  */ using System; using System.Windows.Forms; using System.CodeDom.Compiler; using ICSharpCode.SharpDevelop.Gui; using ICSharpCode.SharpDevelop.Gui.Pads; using ICSharpCode.Core.AddIns; using ICSharpCode.Core.AddIns.Codons; using ICSharpCode.SharpDevelop.Services; namespace Addins.AddinTreeView {     /// <summary>     /// Description of MyClass.     /// </summary>     public class AddinTreeViewCommand: AbstractMenuCommand     {             public override void Run()         {                 using (AddinTreeViewContent viewContent = new AddinTreeViewContent() )             {                 WorkbenchSingleton.Workbench.ShowView(viewContent);             }         }             }     public class AddinTreeViewContent: AbstractViewContent     {         AddinTreeViewControl viewControl = new AddinTreeViewControl();         public override Control Control          {             get              {                 return viewControl;             }         }         public override bool IsDirty          {             get              {                 return false;             }             set              {             }         }         IWorkbenchWindow workbenchWindow;         public override IWorkbenchWindow WorkbenchWindow          {             get              {                 return workbenchWindow;             }             set              {                 workbenchWindow = value;                 workbenchWindow.Title = "AddInTreeView";             }         }         public AddinTreeViewContent()         {             TitleName = "AddinTree View";         }                  public override bool IsViewOnly          {             get              {                 return true;             }         }         public void SaveFile(){}         public void Undo(){}         public void Redo(){}         public override void Save(){}         public override void Save(string filename){}         public override void Load(string filename)         {         }         public override string TabPageText                      get              {                 return "AddInTree";             }         }     } }
AddinTreeViewControl.cs
using System; using System.Collections; using System.ComponentModel; using System.Drawing; using System.Data; using System.Windows.Forms; using ICSharpCode.SharpDevelop.Gui; using ICSharpCode.Core.AddIns; using ICSharpCode.Core.AddIns.Codons; namespace Addins.AddinTreeView {     /// <summary>     /// AddinTreeViewControl 的摘要說明。     /// </summary>     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;         /// <summary>          /// 必需的設計器變量。         /// </summary>         private System.ComponentModel.Container components = null;         public AddinTreeViewControl()         {             // 該調用是 Windows.Forms 窗體設計器所必需的。             InitializeComponent();             // TODO: 在 InitializeComponent 調用後添加任何初始化             InitAddinTreeView();         }         /// <summary>          /// 清理所有正在使用的資源。         /// </summary>         protected override void Dispose( bool disposing )         {             if( disposing )             {                 if(components != null)                 {                     components.Dispose();                 }             }             base.Dispose( disposing );         }         組件設計器生成的代碼         void InitAddinTreeView()         {             TreeNode pathNode = tvAddin.Nodes.Add("AddinRoot");                          tvAddin.BeginUpdate();             try             {                 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++)                         {                                 bool foundPath = false;                                                          if ( paths[i] == "" )                              {                                 pathNode = tvAddin.Nodes[0];                                 continue;                             }                                                                                          for ( int j=0; j<pathNode.Nodes.Count; j++)                             {                                 if ( pathNode.Nodes[j].Text == paths[i] )                                 {                                     pathNode = pathNode.Nodes[j];                                     foundPath = true;                                     break;                                 }                             }                                                          if ( !foundPath )                             {                                 pathNode = pathNode.Nodes.Add( paths[i] );                                 pathNode.Tag = new ArrayList();                                 //lvDebug.Items.Add("Add " + e.Path + " ---- " + paths[i]);                             }                         }                                                  (pathNode.Tag as ArrayList).Add(e);                     }                 }             }             finally             {                 tvAddin.EndUpdate();             }         }         void AddInfo(string Name, string Value)         {             lvAddin.Items.Add(Name).SubItems.Add(Value);         }         private void tvAddin_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e)         {             lvAddin.Items.Clear();                          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("          ┗━━━━━━━━━""");                         }                     }                 }             }         }     } }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章