原创 SharpDevelop的AddInTree View 插件

2009-11-1 22:17 1416 5 5 分类: 软件与OS
ddinTreeViewCommand.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)

        
{(www.iocblog.net 文章来源)

        }




        
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 );

        }




        
组件设计器生成的代码#region 组件设计器生成的代码

        
/**//// <summary> 

        
/// 设计器支持所需的方法 - 不要使用代码编辑器 

        
/// 修改此方法的内容。

        
/// </summary>


        private void InitializeComponent()

        
{

            
this.chName = new System.Windows.Forms.ColumnHeader();

            
this.lvAddin = new System.Windows.Forms.ListView();

            
this.chValue = new System.Windows.Forms.ColumnHeader();

            
this.chInfo = new System.Windows.Forms.ColumnHeader();

            
this.cbShowAddinInfo = new System.Windows.Forms.CheckBox();

            
this.splitter2 = new System.Windows.Forms.Splitter();

            
this.lvDebug = new System.Windows.Forms.ListView();

            
this.splitter1 = new System.Windows.Forms.Splitter();

            
this.tvAddin = new System.Windows.Forms.TreeView();

            
this.SuspendLayout();

            
// 

            
// chName

            
// 

            this.chName.Text = "属性";

            
this.chName.Width = 217;

            
// 

            
// lvAddin

            
// 

            this.lvAddin.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {

                                                                                      
this.chName,

                                                                                      
this.chValue}
);

            
this.lvAddin.Dock = System.Windows.Forms.DockStyle.Fill;

            
this.lvAddin.FullRowSelect = true;

            
this.lvAddin.GridLines = true;

            
this.lvAddin.HoverSelection = true;

            
this.lvAddin.Location = new System.Drawing.Point(44324);

            
this.lvAddin.MultiSelect = false;

            
this.lvAddin.Name = "lvAddin";

            
this.lvAddin.Size = new System.Drawing.Size(661509);

            
this.lvAddin.TabIndex = 13;

            
this.lvAddin.View = System.Windows.Forms.View.Details;

            
// 

            
// chValue

            
// 

            this.chValue.Text = "";

            
this.chValue.Width = 668;

            
// 

            
// chInfo

            
// 

            this.chInfo.Text = "Info";

            
this.chInfo.Width = 673;

            
// 

            
// cbShowAddinInfo

            
// 

            this.cbShowAddinInfo.Dock = System.Windows.Forms.DockStyle.Top;

            
this.cbShowAddinInfo.Location = new System.Drawing.Point(4430);

            
this.cbShowAddinInfo.Name = "cbShowAddinInfo";

            
this.cbShowAddinInfo.Size = new System.Drawing.Size(66124);

            
this.cbShowAddinInfo.TabIndex = 12;

            
this.cbShowAddinInfo.Text = "显示Codon隶属的Addin信息";

            
// 

            
// splitter2

            
// 

            this.splitter2.Dock = System.Windows.Forms.DockStyle.Bottom;

            
this.splitter2.Location = new System.Drawing.Point(443533);

            
this.splitter2.Name = "splitter2";

            
this.splitter2.Size = new System.Drawing.Size(6613);

            
this.splitter2.TabIndex = 11;

            
this.splitter2.TabStop = false;

            
this.splitter2.Visible = false;

            
// 

            
// lvDebug

            
// 

            this.lvDebug.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {

                                                                                      
this.chInfo}
);

            
this.lvDebug.Dock = System.Windows.Forms.DockStyle.Bottom;

            
this.lvDebug.Location = new System.Drawing.Point(443536);

            
this.lvDebug.Name = "lvDebug";

            
this.lvDebug.Size = new System.Drawing.Size(661216);

            
this.lvDebug.TabIndex = 10;

            
this.lvDebug.View = System.Windows.Forms.View.Details;

            
this.lvDebug.Visible = false;

            
// 

            
// splitter1

            
// 

            this.splitter1.Location = new System.Drawing.Point(4400);

            
this.splitter1.Name = "splitter1";

            
this.splitter1.Size = new System.Drawing.Size(3752);

            
this.splitter1.TabIndex = 9;

            
this.splitter1.TabStop = false;

            
// 

            
// tvAddin

            
// 

            this.tvAddin.Dock = System.Windows.Forms.DockStyle.Left;

            
this.tvAddin.FullRowSelect = true;

            
this.tvAddin.HideSelection = false;

            
this.tvAddin.ImageIndex = -1;

            
this.tvAddin.Location = new System.Drawing.Point(00);

            
this.tvAddin.Name = "tvAddin";

            
this.tvAddin.SelectedImageIndex = -1;

            
this.tvAddin.Size = new System.Drawing.Size(440752);

            
this.tvAddin.TabIndex = 8;

            
this.tvAddin.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.tvAddin_AfterSelect);

            
// 

            
// AddinTreeViewControl

            
// 

            this.Controls.Add(this.lvAddin);

            
this.Controls.Add(this.cbShowAddinInfo);

            
this.Controls.Add(this.splitter2);

            
this.Controls.Add(this.lvDebug);

            
this.Controls.Add(this.splitter1);

            
this.Controls.Add(this.tvAddin);

            
this.Name = "AddinTreeViewControl";

            
this.Size = new System.Drawing.Size(1104752);

            
this.ResumeLayout(false);



        }


        
#endregion






        
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 == "" ) 

                            
{

                                pathNode 
= tvAddin.Nodes[0];

                                
continue;

                            }
                        

                                    

                            
for ( int j=0; j<pathNode.Nodes.Count; j++)

                            
{

                                
if ( pathNode.Nodes[j].Text == paths )

                                
{

                                    pathNode 
= pathNode.Nodes[j];

                                    foundPath 
= true;

                                    
break;

                                }


                            }


                            

                            
if ( !foundPath )

                            
{

                                pathNode 
= pathNode.Nodes.Add( paths );

                                pathNode.Tag 
= new ArrayList();

                                
//lvDebug.Items.Add("Add " + e.Path + " ---- " + paths);

                            }


                        }


                        

                        (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(
"          ┗━━━━━━━━━""");

                        }


                    }


                }


            }


        }


    }


}

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
5
关闭 站长推荐上一条 /3 下一条