SharpDevelop插件开发手册

时间:2022-09-13 10:40:12

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

SharpDevelop插件开发手册

第一章    Pad

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

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

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

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

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

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

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

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,修改为如下内容:

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

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

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

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

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

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

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

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

第二节 工作区关闭控制

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

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

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

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

第三章   配置文件

一、菜单配置

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

1)id:代表唯一标识

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

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

4)shortcut:设置快捷键

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

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

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

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

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

二、MenuItem类型

MenuItem共有四种类型

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

2) type = "Separator"      分隔符

3) type = "Item"      菜单项

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

三、状态控制

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

示例如下:

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

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

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

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

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

action共有3种状态:

1SharpDevelop插件开发手册    public enum ConditionFailedAction {
2SharpDevelop插件开发手册        Nothing,
3SharpDevelop插件开发手册        Exclude,
4SharpDevelop插件开发手册        Disable
5SharpDevelop插件开发手册    }
6SharpDevelop插件开发手册

Nothing:表示什么都不做

Execlude:表示一笔移除

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

默认为:Execlude

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

  1. Discuz&excl; 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 规则插件开发 &lpar;基于阿里开发手册&rpar;

    引言 最近在做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 框架入门手册&lt&semi;感谢&lbrack;青铜&rsqb;整理的如此细致和系统&gt&semi;

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

  8. MyBatis实现与插件开发

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

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

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

随机推荐

  1. linux文件及文件夹权限

    以前上学的时候简单了解了下linux,现在对它的认识也只停留在一些小白命令上.以为我只要不是做服务器端开发的应该不会去碰吧,工作了才知道做开发的多少还是要熟悉一些linux的,至少你的项目会部署在li ...

  2. 8VC Venture Cup 2016 - Elimination Round

    在家补补题   模拟 A - Robot Sequence #include <bits/stdc++.h> char str[202]; void move(int &x, in ...

  3. CSS3属性transition

    CSS3 Transitions 指定过渡 语法: transition: property duration timing-function delay;     参数一: transition-p ...

  4. iOS开发之身份证号码校验

    // //  Card.h //  THCStore // //  Created by Mac on 15/7/15. //  Copyright (c) 2015年 Mac. All rights ...

  5. 使用jsonpath解析json内容

    JsonPath提供的json解析非常强大,它提供了类似正则表达式的语法,基本上可以满足所有你想要获得的json内容.下面我把官网介绍的每个表达式用代码实现,可以更直观的知道该怎么用它. 一.首先需要 ...

  6. 『转载』C&num; winform 中dataGridView的重绘(进度条,虚线,单元格合并等)

    原文转载自:http://hi.baidu.com/suming/item/81e45b1ab9b4585f2a3e2243 最近比较浅的研究了一下dataGridView的重绘,发现里面还是有很多东 ...

  7. js判空

    2014年9月3日 11:36:10 转载的: http://blog.sina.com.cn/s/blog_755168af0100vsik.html typeof用法 typeof的运算数未定义, ...

  8. 教程-Delphi MSComm 实时串口通讯

    Delphi  MSComm 实时串口通讯 MSComm控件具有丰富的与串口通信密切相关的属性,提供了对串口进行的多种操作,进而使串行通信变得十分简便.MSComm的控件属性较多,常用的属性如下:1) ...

  9. 将使用netTcp绑定的WCF服务寄宿到IIS7上全记录 (这文章也不错)

    原文地址:http://www.cnblogs.com/wengyuli/archive/2010/11/22/wcf-tcp-host-to-iis.html 摘要 在项目开发中,我们可能会适时的选 ...

  10. 报文分析2、IP头的结构

    IP头的结构 版本(4位) 头长度(4位) 服务类型(8位) 封包总长度(16位) 封包标识(16位) 标志(3位) 片断偏移地址(13位) 存活时间(8位) 协议(8位) 校验和(16位) 来源IP ...