SharpDevelop插件开发手册部分内容摘取自:http://www.cnblogs.com/CBuilder的SharpDevelop开发教程

SharpDevelop插件开发手册

第一章    Pad

Pad(面板)就是插件框架中的停靠窗口。有这些特点:Pad不能关闭,但可以隐藏或显示。每种类型的Pad只能打开一个,不能在运行时添加,标题唯一。可以显示图标,由插件框架中的布局管理器负责管理。通常不显示文件内容,而是辅助用户完成任务。

下面进入我们的实战流程,先新建一个类库型的项目,命名为CSPadDemoPlug,把Class1.cs改名为Main.cs,修改为如下内容:

 1using System; 
 2using System.Drawing; 
 3using System.Windows.Forms; 
 4 
 5using ICSharpCode.SharpDevelop.Gui; 
 6 
 7namespace PadDemoPlug 
 8
 9    public class Pad : AbstractPadContent 
10    { 
11        PadControl control=new PadControl(); 
12        public Pad(): base("TestPanel") 
13        { 
14        } 
15 
16        public override Control Control  
17        { 
18            get  
19            { 
20                return this.control; 
21            } 
22        }          
23    } 
24
25

记得要在项目中加入插件框架中的ICSharpCode.Core.dll和SharpDevelop.Base.dll引用。这两个文件在插件框架下的Bin目录下。写插件框架的插件需要包含。

在项目中添加新建项à用户控件。改名为CSPadControl。各位可以在CSPadControl上添加一些相关的内容。

在工程中添加一个DemoPlug.addin文件,这是插件配置文件,很重要,内容如下:

 1<AddIn name        = "SharpDevelop Plug Demo" 
 2       author      = "SongYuanWu" 
 3       copyright   = "GPL" 
 4       url         = "http://www.cnblogs.com/CBuilder" 
 5       description = "SharpDevelop " 
 6       version     = "1.0.0"> 
 7     
 8    <Runtime> 
 9        <Import assembly="PadDemo.dll"/> 
10    </Runtime> 
11 
12    <Extension path = "/SharpDevelop/Workbench/Views"> 
13        <Class id    = "PadDemo"  
14              class = "PadDemoPlug.Pad"/> 
15    </Extension> 
16</AddIn>  
17 
18

OK!把编译后的PadDemo.dll和DemoPlug.addin文件拷贝到的/AddIns/目录下,运行插件框架就可以看到我们创建的Pad了(如下图),同时在插件框架的菜单【查看】-【工具】下也出现了TestPanel菜单项。

如果需要指定pad的图标时,可以改更改base("TestPanel")为 base("TestPanel", "IconID")。

InconID为图标的资源号,作为演示你可以用Class的图标“Icons.16x16.Class”来替代。

要点分析:

制作Pad的时候要从AbstractPadContent继承。所以要using ICSharpCode.SharpDevelop.Gui;

第二章    工作区

第一节 创建工区作

View(工作区)是SD的基础部分,View通常包含编辑器,如代码编辑器,资源编辑器。基本上,它是显示于MPI窗口选项卡页面上的面板。

制作View要从AbstractViewContent继承下来。下面就进入我们的实战操作流程,首先新建一个类库行的项目,SDViewDemoPlug,把Class1.cs改名为Main.cs,修改为如下内容:

 1 using System;
 2 using ICSharpCode.Core.AddIns;
 3 using ICSharpCode.Core.AddIns.Codons;
 4 
 5 using ICSharpCode.SharpDevelop.Gui;
 6 
 7 namespace SDViewDemoPlug
 8 {
 9     public class ShowViewCommand : AbstractMenuCommand
10    {
11        public override void Run()
12        {            
13            WorkbenchSingleton.Workbench.ShowView(new SDViewContent());
14        }
15    }
16}
17

添加一个新类,SDViewContent,文件名为SDViewContent.cs,修改内容如下:

 1using System;
 2using System.Drawing;
 3using System.Windows.Forms;
 4using ICSharpCode.SharpDevelop.Gui;
 5
 6namespace SDViewDemoPlug
 7{
 8    public class SDViewContent : AbstractViewContent
 9    {
10        SDViewControl p=new SDViewControl();
11        public override Control Control 
12        {
13            get {return p;}
14        }
15        
16        public override bool IsReadOnly 
17        {
18            get {return false;}
19        }
20        
21        public override void Save(string fileName){}
22        public override void Load(string fileName){}
23        public override void RedrawContent(){}
24        
25        public override void Dispose()
26        {        
27            p.Dispose();
28        }
29        
30        public SDViewContent()
31        {
32            TitleName = "TestView";            
33        }        
34        
35    }
36}
37

在项目中添加新建项用户控件。改名为SDViewControl。各位可以在SDViewControl上添加一些相关的内容。最后添加插件配置文件ViewDemoPlug.addin,内容如下:

 1<AddIn name        = "SharpDevelop Plug Demo"
 2       author      = "SongYuanWu"
 3       copyright   = "GPL"
 4       url         = "http://www.cnblogs.com/CBuilder"
 5       description = "SharpDevelop"
 6       version     = "1.0.0">
 7    
 8    <Runtime>
 9        <Import assembly="SDViewDemoPlug.dll"/>
10    </Runtime>
11
12    <Extension path = "/SharpDevelop/Workbench/MainMenu/Tools">
13        <MenuItem id = "SDViewDemo"                 
14                 label = "ShowMyView" 
15                 class = "SDViewDemoPlug.ShowViewCommand"/>
16    </Extension>
17</AddIn>
18

还有不要忘记把ICSharpCode.Core.dll和SharpDevelop.Base.dll引用进项目中来。编译后把ViewDemoPlug.addin和SDViewDemoPlug.dll拷贝到SD的/AddIns/目录下。运行SD,就可以看到在【工具】菜单下出现了【ShowMyView】菜单项。Click【ShowMyView】菜单项后显示如图,再click【ShowMyView】菜单项后就会又显示一个TestView。各位如果问:“需要做象“启动页”一样的View,如果已经有打开的了就会激活打开的View该如何处理呢?”。其实很简单,你可以把ShowViewCommand类中的Run函数更改为:

 1foreach (IViewContent view in WorkbenchSingleton.Workbench.ViewContentCollection) 
 2    {
 3        if (view is SDViewContent) 
 4        {
 5            view.WorkbenchWindow.SelectWindow();                    
 6            return;
 7        }
 8    }            
 9    WorkbenchSingleton.Workbench.ShowView(new SDViewContent());
10

此Demo演示了如何在SD添加一个View,同时也演示了如何在SD中更改菜单项。每添加一个菜单项时都要继承一个AbstractMenuCommand,并且改写Run()函数,当然你的XXXCommand也可以从SD的AbstractCommand继承,但要实现IMenuCommand接口。因为添加菜单项和添加工具条按钮比较简单,在以后的内容中我会一起讲,在此我就不多说了。

第二节 工作区关闭控制

插件框架的工作区(AbstractViewContent)和主窗体(WorkbenchSingleton.MainForm)在是否关闭可能通过窗体的Closing事件来进行控制,和普通窗体关闭事件没有太大区别。

MainForm和常用的窗体没有什么区别,这里就不做特殊说明。

由于工作区本身不是一窗体,所以它没有Closing事件,但是它本身是有父窗体(AbstractViewContent.WorkbenchWindow)的,我们完全可以通过它父窗体的Closing事件来进行控制,示例如下

 1namespace EtsWorkFlow.Designer.ViewContent
 2{
 3    public class WorkFlowEditorView : AbstractViewContent
 4    {
 5        IWorkbenchWindow _workbenchWindow;
 6
 7        public WorkFlowEditorView() : base("工作流设计器")
 8        {}
 9
10        private void Closing(object sender, CancelEventArgs e)
11        {
12             ////控制关闭代码
13        }
14
15        /// <summary>
16        /// 用来控制主窗体关闭时是否触发它的父窗体的Closing事件
17        /// </summary>
18        public override bool IsDirty
19        {
20            get
21            {
22                return true;
23            }
24        }    
25        public override bool IsDirty
26        {
27            get
28            {
29                return true;
30            }
31        }
32
33        public override IWorkbenchWindow WorkbenchWindow 
34        {
35            get
36            {
37                return _workbenchWindow;
38            }
39            set
40            {
41                _workbenchWindow = value;
42                if (_workbenchWindow != null)
43                {
44                    (_workbenchWindow as Form).Closing -= new CancelEventHandler(this.Closing);
45                    (_workbenchWindow as Form).Closing += new CancelEventHandler(this.Closing);
46                }
47            }
48        }
49
50    }
51}
52

第三章   配置文件

一、菜单配置

1<MenuItem id = "TipOfTheDay"
2          label = "${res:XML.MainMenu.HelpMenu.Tips}"
3          icon = "Icons.16x16.TipOfTheDay"
4      shortcut = "Shift|Control|F1"
5          insertafter = "Separator2"
6          class = "ICSharpCode.SharpDevelop.Commands.ViewTipOfTheDay" />
7<MenuItem id = "Downloads" label = "Downloads(&amp;D)" icon = "Icons.16x16.WebSearchIcon" link = "http://www.sharpdevelop.net/OpenSource/SD/Download/" />
8

1)id:代表唯一标识

2)label:是菜单的标题,它即可以从资源文件中读取,也可以直接进行设置,如果要设置热键,格式如下:(&字母)

3)icon:表示,菜单的图标,该图标在resource格式的文件中定义

4)shortcut:设置快捷键

5)link:这里就是当前菜单项要链接的网址,也可以链接外部文件,示例如下:link = "home://doc/ReadMe.rtf",表示主程序上级的doc目录下的ReadMe.rtf文件。

6)class:表示该菜单对应的命令。

7)insertafter:表示插在哪个菜单项之后

如果要建立子菜单只需要添加MenuItem子节点即可,格式如下:

1   <MenuItem id = "Help" label = "${res:XML.MainMenu.HelpMenu}" type="Menu">
2      <MenuItem id = "Separator2" type = "Separator" />
3      <MenuItem id = "delphidoc"  label = "公司主页" icon = "Icons.16x16.WebSearchIcon" link = "http://www.cnblogs.com/delphidoc" />
4    </MenuItem>
5

二、MenuItem类型

MenuItem共有四种类型

1) type = "Menu"         普通父菜单

2) type = "Separator"      分隔符

3) type = "Item"      菜单项

4) type = "Builder"        由代码购建的菜单,如文件历史列表

三、状态控制

插件框架中生成的工具栏按钮和菜单项都可以通过配置文件来进行控制。

示例如下:

 1  <Runtime>
 2      <Import assembly="EtsWorkFlow.Designer.dll">
 3        <ConditionEvaluator name="ActiveViewContent" class="EtsWorkFlow.Designer.Command.ActiveViewContentConditionEvaluator"/>
 4      </Import>
 5    </Runtime>
 6
 7    <Condition name = "ActiveViewContent" action="Disable">
 8      <MenuItem id = "SaveFlowFile"
 9                 label = "保存(&amp;S)" 
10                 icon  = "Icons.16x16.SaveIcon"
11                 shortcut = "Control|S"
12                 class = "EtsWorkFlow.Designer.Command.SaveCommand"/>
13    </Condition>
14

配置的关键字为:Condition ,它含两个属性(name 和action),name 的名称对应 runtime中定义的ConditionEvaluator的name,它和程序中从IConditionEvaluator接口继承的状态控制类形成对应关系

1    public class ActiveViewContentConditionEvaluator : IConditionEvaluator
2    {
3        public bool IsValid(object caller, Condition condition)
4        {
5            return WorkSingleton.ActiveView != null;
6        }
7    }
8

IConditionEvaluator接口非常简单,只有一个IsValid方法。

配置文件中的条件在“IsValid”返回false时执行,执行结果由来action决定。

action共有3种状态:

1    public enum ConditionFailedAction {
2        Nothing,
3        Exclude,
4        Disable
5    }
6

Nothing:表示什么都不做

Execlude:表示一笔移除

Disable:表示改变状态为不可用

默认为:Execlude

SharpDevelop插件开发手册的更多相关文章

  1. Discuz! X 插件开发手册

      文件命名规范 Discuz! 按照如下的规范对程序和模板进行命名,请在设计插件时尽量遵循此命名规范: 可以直接通过浏览器访问的普通程序文件,以 .php 后缀命名. 被普通程序文件引用的程序文件, ...

  2. 【miscellaneous】 GStreamer应用开发手册学习笔记之基础概念介绍

    第3章. 基础概念介绍 本章将介绍GStreamer的基本概念. 理解这些概念对于你后续的学习非常重要,因为后续深入的讲解我们都假定你已经完全理解了这些概念. 3.1. 元件(Elements) 元件 ...

  3. Dynamics CRM 开发模板使用手册(插件开发)

    CRM开发手册 本手册介绍在Visual Studio 2015 + Dynamics CRM Developer Extensions模板开发环境下,插件和JS脚本的开发.部署与调试过程. 手册中提 ...

  4. Sonar Java 规则插件开发 (基于阿里开发手册)

    引言 最近在做Sonar静态代码扫描管理,以此顺手接了Sonar的插件开发,基于阿里开发手册进行开发,在整体开发过程中,其中还是遇到不少坑位,也以此给大家做相应借鉴官网Demo演示插件开发地址:htt ...

  5. sublime text 插件开发

    前言:术语和参考资料 sublime text 2的扩展模式相当的丰富.有多种方法可以修改语法高亮模式以及所有的菜单等.它还可以创建一个新的build系统,自动补全,语言定义,代码片段,宏定义,快捷键 ...

  6. sublime插件开发手记

    原:http://blog.hickwu.com/sublime插件开发手记   标题: sublime插件开发手记 时间: 2014-01-05 14:58:02 正文: 插件基本结构 基本插件实现 ...

  7. MyBean 框架入门手册<感谢[青铜]整理的如此细致和系统>

    MyBean 框架入门手册 2014/9/15 by lighttop 目 录 MyBean 框架学习笔记............................................... ...

  8. MyBatis实现与插件开发

    分析源码之前也需要源码下载并安装到本地仓库和开发工具中,方便给代码添加注释:安装过程和mybatis源码的安装过程是一样的,这里就不再重复描述了:下载地址:https://github.com/myb ...

  9. 方案设计:基于IDEA插件开发和字节码插桩技术,实现研发交付质量自动分析

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 如何保证代码质量? 业务提需求,产品定方案,研发做实现,测试验流程.四种角色的相互配 ...

随机推荐

  1. 怎样在多线程中使用JNI?

    假设你想了解JNI在怎样在多线程下使用 假设你在子线程使用JNI时遇到findClass不能找到目标Class,而在主线程下却能找到该Class的问题.或是GetEnv返回NULL的问题 假设你想多学 ...

  2. 使用 CodeIgniter 框架快速开发 PHP 应用(三)

    原文:使用 CodeIgniter 框架快速开发 PHP 应用(三) 分析网站结构既然我们已经安装 CI ,我们开始了解它如何工作.读者已经知道 CI 实现了MVC式样. 通过对目录和文件的内容进行分 ...

  3. projecteuler----&gt;problem=34----Digit factorials

    Problem 34 145 is a curious number, as 1! + 4! + 5! = 1 + 24 + 120 = 145. Find the sum of all number ...

  4. mac 配置Python集成开发环境

    mac 配置Python集成开发环境(Eclipse +Python+Pydev) 1.下载Mac版64位的Eclipse. 进入到Eclipse官方网站的下载页面(http://www.eclips ...

  5. hdu 1700 Points on Cycle 水几何

    已知圆心(0,0)圆周上的一点,求圆周上另外两点使得三点构成等边三角形. 懒得推公式,直接用模板2圆(r1=dist,r2=sqrt(3)*dist)相交水过 #include<cstdio&g ...

  6. Windows在配置Python+tornado

    1,安装Python 2.7.x版本号 地址:https://www.python.org/downloads/release/python-278/ 2,安装python setuptools工具 ...

  7. Windows移动开发(一)——登堂入室

    開始本博客之前先分享一个自己的好消息吧,2014年3月31日起,正式就职于北京****集团Win8project师.主要负责将IOS和Android应用移植到Win8.1平板上,目标客户是银行,闲话不 ...

  8. BNUOJ 34981 A Matrix

    BNUOJ 34981 A Matrix 题目地址:pid=34981" style="color:rgb(0,136,204); text-decoration:none&quo ...

  9. Sicily 1732 Alice and Bob (二进制最大公约数)

    联系: http://soj.me/1732 Constraints Time Limit: 1 secs, Memory Limit: 32 MB Description: Alice is a b ...

  10. WeakReference and WeakHashMap

    弱引用通过WeakReference类实现,弱引用和软引用很像,但弱引用的引用级别更低.对于只有弱引用的对象而言,当系统垃圾回收机制运行时,不管系统北村是否足够,总会回收该对象所占用的内存.当然,并不 ...