SharpDevelop的AddInTree View 插件

转载 2007年10月10日 16:33:00
自从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(
"          ┗━━━━━━━━━""");
                        }

                    }

                }

            }

        }

    }

}

 

制作SharpDevelop插件

来源:http://blog.sina.com.cn/s/blog_7b60d05f0101uzbj.html     这段时间在研究SD编译器内部的东西,做一个...
  • skysword2
  • skysword2
  • 2016年12月28日 17:00
  • 547

插件式程序开发sharpdevelop(2) 插件树和插件定义

插件文件描述           插件的加载需要两类文件,AddIn XML的配置定义文件,及程序集文件(DLL,以及相关的附件文件和库等)。 当sharpdevelop核心开始和编译成单独树...
  • Tonyyan19781
  • Tonyyan19781
  • 2017年03月13日 20:26
  • 372

SharpDevelop插件系统创建过程全面分析

前言 2005年2月,我申报了一个学校组织的大学生SRTP项目,项目的题目是数据结构动画演示系统。当初在做项目之前,我无意中买了一本书,书名为《SharpDevelop软件项目开发全程剖析》。买这本...
  • judyge
  • judyge
  • 2014年11月16日 09:28
  • 470

SharpDevelop安装与配置

SharpDevelop是一个用于C#开发的IDE,相比于VisualStudio的臃肿,SharpDevelop的小巧能让人专注于C#开发。 SharpDevelop官方下载地址:http://ww...
  • gsls200808
  • gsls200808
  • 2015年09月19日 20:20
  • 1431

SharpDevelop 5.1 调试一个简单会员管理系统

下面使用SharpDevelop 5.1 调试一个简单会员管理系统,源码来自 http://www.softhy.net/soft/35411.htm 在SharpDevelop 5....
  • bcbobo21cn
  • bcbobo21cn
  • 2016年08月03日 10:07
  • 683

SharpDevelop源码分析之插件

0、简介SharpDevelop系统是一个功能比较齐全的类似于Visual Studio的开源代码编辑工具,它已经有超过10年的开发历史。它没有Visual Studio功能那么多,但基本的代码编辑、...
  • gc_2299
  • gc_2299
  • 2017年11月12日 19:59
  • 24

Android插件化方式实现View动态更新

翻开csdn,浏览了一下文章列表,发现好久没更新博客了。忽然觉得自己最近又TM邪恶了。。 大家可以想一个问题:假设我们App首页有个Icon,用来根据不同的节日播放不同主题的音乐,例如:圣诞节,需要把...
  • u013718120
  • u013718120
  • 2016年12月20日 12:48
  • 1533

eclipse插件开发之透视图,视图

1、配置文件              point="org.eclipse.ui.popupMenus">             adaptable = "true"           ...
  • Aqu415
  • Aqu415
  • 2017年03月25日 22:06
  • 909

精简版开发工具使用手记(图解)

以下记录一些精简版开发工具的使用情况。C#的精简开发工具SharpDevelop,VC++ 6.0绿色版,Java的开发工具JCreator,...。 一 SharpDevelop 5.0    ...
  • bcbobo21cn
  • bcbobo21cn
  • 2015年03月11日 16:02
  • 1510

Dashboard-view自定义jenkins任务集视图

源码:https://github.com/jenkinsci/dashboard-view-plugin 使用方法: 安装插件后新建视图,可以看到如下所示视图类型:该视图设置项主要包括三类:jo...
  • Anlegor
  • Anlegor
  • 2015年03月02日 21:21
  • 11617
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SharpDevelop的AddInTree View 插件
举报原因:
原因补充:

(最多只允许输入30个字)