SharpDevelop插件开发手册
SharpDevelop插件开发手册部分内容摘取自:http://www.cnblogs.com/CBuilder的SharpDevelop开发教程
SharpDevelop插件开发手册
第一章 Pad
Pad(面板)就是插件框架中的停靠窗口。有这些特点:Pad不能关闭,但可以隐藏或显示。每种类型的Pad只能打开一个,不能在运行时添加,标题唯一。可以显示图标,由插件框架中的布局管理器负责管理。通常不显示文件内容,而是辅助用户完成任务。
下面进入我们的实战流程,先新建一个类库型的项目,命名为CSPadDemoPlug,把Class1.cs改名为Main.cs,修改为如下内容:
using System; 2
using System.Drawing; 3
using System.Windows.Forms; 4
5
using ICSharpCode.SharpDevelop.Gui; 6
7
namespace 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文件,这是插件配置文件,很重要,内容如下:
<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,修改为如下内容:
using System;2
using ICSharpCode.Core.AddIns;3
using ICSharpCode.Core.AddIns.Codons;4
5
using ICSharpCode.SharpDevelop.Gui;6
7
namespace SDViewDemoPlug8
{9
public class ShowViewCommand : AbstractMenuCommand10
{11
public override void Run()12
{ 13
WorkbenchSingleton.Workbench.ShowView(new SDViewContent());14
}15
}16
}17

添加一个新类,SDViewContent,文件名为SDViewContent.cs,修改内容如下:
using System;2
using System.Drawing;3
using System.Windows.Forms;4
using ICSharpCode.SharpDevelop.Gui;5

6
namespace SDViewDemoPlug7
{8
public class SDViewContent : AbstractViewContent9
{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,内容如下:
<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函数更改为:
foreach (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事件来进行控制,示例如下:
namespace EtsWorkFlow.Designer.ViewContent2
{3
public class WorkFlowEditorView : AbstractViewContent4
{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 IsDirty19
{20
get21
{22
return true;23
}24
} 25
public override bool IsDirty26
{27
get28
{29
return true;30
}31
}32

33
public override IWorkbenchWindow WorkbenchWindow 34
{35
get36
{37
return _workbenchWindow;38
}39
set40
{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

第三章 配置文件
一、菜单配置
<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(&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子节点即可,格式如下:
<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" 由代码购建的菜单,如文件历史列表
三、状态控制
插件框架中生成的工具栏按钮和菜单项都可以通过配置文件来进行控制。
示例如下:
<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 = "保存(&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接口继承的状态控制类形成对应关系
public class ActiveViewContentConditionEvaluator : IConditionEvaluator2
{3
public bool IsValid(object caller, Condition condition)4
{5
return WorkSingleton.ActiveView != null;6
}7
}8

IConditionEvaluator接口非常简单,只有一个IsValid方法。
配置文件中的条件在“IsValid”返回false时执行,执行结果由来action决定。
action共有3种状态:
public enum ConditionFailedAction {2
Nothing,3
Exclude,4
Disable5
}6

Nothing:表示什么都不做
Execlude:表示一笔移除
Disable:表示改变状态为不可用
默认为:Execlude
SharpDevelop插件开发手册的更多相关文章
- Discuz! X 插件开发手册
文件命名规范 Discuz! 按照如下的规范对程序和模板进行命名,请在设计插件时尽量遵循此命名规范: 可以直接通过浏览器访问的普通程序文件,以 .php 后缀命名. 被普通程序文件引用的程序文件, ...
- 【miscellaneous】 GStreamer应用开发手册学习笔记之基础概念介绍
第3章. 基础概念介绍 本章将介绍GStreamer的基本概念. 理解这些概念对于你后续的学习非常重要,因为后续深入的讲解我们都假定你已经完全理解了这些概念. 3.1. 元件(Elements) 元件 ...
- Dynamics CRM 开发模板使用手册(插件开发)
CRM开发手册 本手册介绍在Visual Studio 2015 + Dynamics CRM Developer Extensions模板开发环境下,插件和JS脚本的开发.部署与调试过程. 手册中提 ...
- Sonar Java 规则插件开发 (基于阿里开发手册)
引言 最近在做Sonar静态代码扫描管理,以此顺手接了Sonar的插件开发,基于阿里开发手册进行开发,在整体开发过程中,其中还是遇到不少坑位,也以此给大家做相应借鉴官网Demo演示插件开发地址:htt ...
- sublime text 插件开发
前言:术语和参考资料 sublime text 2的扩展模式相当的丰富.有多种方法可以修改语法高亮模式以及所有的菜单等.它还可以创建一个新的build系统,自动补全,语言定义,代码片段,宏定义,快捷键 ...
- sublime插件开发手记
原:http://blog.hickwu.com/sublime插件开发手记 标题: sublime插件开发手记 时间: 2014-01-05 14:58:02 正文: 插件基本结构 基本插件实现 ...
- MyBean 框架入门手册<感谢[青铜]整理的如此细致和系统>
MyBean 框架入门手册 2014/9/15 by lighttop 目 录 MyBean 框架学习笔记............................................... ...
- MyBatis实现与插件开发
分析源码之前也需要源码下载并安装到本地仓库和开发工具中,方便给代码添加注释:安装过程和mybatis源码的安装过程是一样的,这里就不再重复描述了:下载地址:https://github.com/myb ...
- 方案设计:基于IDEA插件开发和字节码插桩技术,实现研发交付质量自动分析
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 如何保证代码质量? 业务提需求,产品定方案,研发做实现,测试验流程.四种角色的相互配 ...
随机推荐
- JavaScript通告/订阅的例子
原文链接: Pub/Sub JavaScript Object原始日期: 2014年6一个月11日本: 2014年6月13日 翻译人员: 铁锚 高效AJAX站点的三大杀器: 事件代理, 浏览历史管理, ...
- XStream 用法汇总
XStream是一家Java对象和XML转换工具,很好很强大.它提供了所有的基本型.排列.收集和其他类型的支持,直接转换.因此XML在数据交换经常使用.对象序列化(和Java对象的序列 ...
- Codeforces 443 B. Kolya and Tandem Repeat
纯粹练JAVA.... B. Kolya and Tandem Repeat time limit per test 2 seconds memory limit per test 256 megab ...
- 高速建成Android开发环境ADT-Bundle和Hello World
----下载JDK(Java Dev Kit) 官方下载:http://www.oracle.com/technetwork/java/javase/downloads/index.html 兴许步骤 ...
- 数组排序、递归——(Java学习笔记二)
升序: 选择排序: 选定一个元素,一次和后面的元素相比较,如果选定的元素大雨后面的比较元素,就交换位置 先出现最小值,最后出现最大值. public stat ...
- [Error]EOL while scanning string literal
有一个经常性的工作项目.需要一天的一些表数据到外部接口,但最近总是异常.今天检查的原因. 第一本地和测试环境中测试程序是没有问题,有网络环境只会在日志中抛出一个异常.产生主要的例外是推定异常数据. , ...
- duplicate symbol _*** in:
duplicate symbol _kReachabilityChangedNotification in: 问题出在同一个文件被引用两次,在项目中找到引用的地方,删掉对应的引用
- struts2基本介绍
前言 文本 Struts2 Apache SoftWare Foundation Tomcat/Struts1/Struts2/Ibaitas/ MVC框架:Struts1/Struts2/JSF/W ...
- 辞 = or != 一个新的起点!!!
辞职!他离开了公司工作三年以上.怀旧也许是一个暗示.伍德还可能有丝毫的遗憾! 简而言之.其结果是坚决离开.在一个.NET程序员的身份进入公司,但仅做了一个月.NET,而仍保持,台,框架,自己的语言!就 ...
- exec 重定向
文件中常用的重定向: command > filename把把标准输出重定向到一个新文件中command >> filename 把把标准输出重定向到一个文件中 (追加)comman ...