自定义扩展点

插件开发久了,难免遇到需要自定义扩展点的需求,那么如何自定义扩展点呢?

 

以编写一个快捷菜单项为例,说明如下:

 

假设最终用户可通过如下配置来扩展快捷菜单项

<plugin>

    <extension point="com.kdevn.test.MyPopupMenus">

        <objectContribution id="contribution1">

            <action

                label="MyNewAction"

                class="com.kdevn.test.actions.MyNewAction"

                id="com.kevn.test.actions.MyNewAction">

            </action>

        </objectContribution>

    </extension>

</plugin>

假设其中objectContribution元素仅可配置1个,而action元素可配置多个

 

1 编写Schema文件,可Checkout CVS上的org.eclipse.ui,参考org.eclipse.ui/schema/popupMenus.exsd

2 在自定义扩展点插件com.kdevn.test的plugin.xml中添加如下内容

<plugin>

    <extension-point id="MyPopupMenus" name="MyPopupMenus" schema="schema/MyPopupMenus.exsd"/>

</pluing>

 

3 完成了Schema文件和plugin.xml文件后,就需要开始编写读取扩展点信息的代码了,如下所示

IExtensionRegistry registry = Platform.getExtensionRegistry();

String pointId = "com.kdevn.test.MyPopupMenus"

IExtension point = registry.getExtensionPoint(pointId);

IExtension[] extensions = point.getExtensions();

//get an  objectContribution element

IConfigurationElement ocElem =extensions[0].getConfigurationElements()[0]

//get action elements

IConfigurationElement actionElems = ocElem.getChildren();

for(int i=0; i<actionElems.length; i++){

    //create an instance

    NewAction newAction = (NewAction)actionElems[i].createExecutableExtension("class");

    //get the label attribute

    String label = actionElems[i].getAttribute("label");

    newAction.setText(label);

    newAction.setData(...);

    //use the action

    //add the action to menubar/menuManger

}

 

4 实现NewAction类

class NewAction extends Action {

    protected Object data;

 

    public NewAction() {

        super();

    }

 

    //get/set method

 

    public void run() {

        //do anything with the data

    }

}

 

完成以上步骤,一个自定义扩展点就完成了,

接着就可以新建一个插件工程,来使用该扩展点了,在新建插件工程中实现的MyNewAction类需继承自NewAction。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值