GMF里实现editpolicyProviders扩展点

news/2025/2/25 3:02:22

通过org.eclipse.gmf.runtime.diagram.ui.editpolicyProviders扩展点可以给GMF应用里的editpart增加所需要的editpolicy,通过editpolicy返回的command,就可以自由的控制editpart的行为。顺便说一句,GMF Runtime之所以提供这许多扩展点,是为了允许通过其他插件工程对GMF生成的应用进行各种定制。

例如现在要对一个GMF程序里的名为Book的图形元素增加双击打开一个对话框,在对话框里修改模型属性的功能。最直接的办法是找到GMF生成的BookEditPart,覆盖performRequest()方法,判断request.getType()是否为RequestConstatns.REQ_OPEN,若是则打开一个对话框。但这样要求我们把代码写在GMF生成的插件项目里,如果考虑到有时要为第三方插件做扩展,我们无法修改它的代码的情况呢?

使用editpolicyProviders扩展点则无此限制,还是同样的需求,扩展点的方式步骤如下:

创建一个插件项目,并依赖生成的GMF应用和GMF相关依赖项(特别是org.eclipse.gmf.runtime.diagram.ui.providers),在plugin.xml的extensions里添加org.eclipse.gmf.runtime.diagram.ui.editpolicyProviders项,通过class属性指定一个Provider类。

<extension
       point="org.eclipse.gmf.runtime.diagram.ui.editpolicyProviders">
    <editpolicyProvider
          class="com.my.diagram.custom.MyEditPolicyProvider">
       <Priority
             name="Lowest">
       </Priority>
    </editpolicyProvider>
</extension>

这里定义的Provider要自己写,它应该实现IEditPolicyProvider接口,它的provide()方法根据传入的operation判断对相关的editpart是否需要创建editpolicy,若是则createEditPolicies()里用installEditPolicy()方法添加。下面的代码实现了双击打开对话框的需求:

public class MyEditPolicyProvider implements IEditPolicyProvider {

    public void createEditPolicies(EditPart editPart) {
        editPart.installEditPolicy(EditPolicyRoles.OPEN_ROLE, new OpenConditionEditPolicy());
    }

    public void addProviderChangeListener(IProviderChangeListener listener) {

    }

    public boolean provides(IOperation operation) {
        if (operation instanceof CreateEditPoliciesOperation) {
            EditPart editPart = ((CreateEditPoliciesOperation) operation).getEditPart();
            if (editPart instanceof ConditionEditPart)
                return true;
        }
        return false;
    }

    public void removeProviderChangeListener(IProviderChangeListener listener) {

    }

}

本文转自博客园八进制的博客,原文链接:GMF里实现editpolicyProviders扩展点,如需转载请自行联系原博主。


http://www.niftyadmin.cn/n/705477.html

相关文章

深度学习-吴恩达第一课第四周课程作业

在前面两节课的基础上&#xff0c;这次作业是训练一个N层神经网络&#xff0c;来判断一张图片是否有猫&#xff0c;实现过程其实和第三周很相似&#xff0c;因为层数不确定&#xff0c;所以在向前传播和反向传播的时候会用到for循环&#xff0c;代码相对而言反而更精简了。贴出…

TODO FIXME XXX 含义

转载:https://www.cnblogs.com/pengyingh/articles/2445826.html 代码里面增加的小注释. 实际上&#xff0c;在阅读一些开源代码时&#xff0c;我们常会碰到诸如&#xff1a;TODO、FIXME和XXX的单词&#xff0c;它们是有其特殊含义的。、 TODO: 说明&#xff1a; 如果代码中有…

神经网络优化-正则化DropOut

实现正则化主要需要在两个地方做出修改&#xff1a; 1.cost计算&#xff08;L2 regularization&#xff09; #正则化n len(parameters)//2cost_extra 0for x in range(n):w parameters[wstr(x1)]cost_extra np.sum(np.multiply(w,w))cost_extranp.squeeze(cost_extra)cost…

Linux系统目录

Linux 系统目录结构 登录系统后&#xff0c;在当前命令窗口下输入命令&#xff1a; ls / 你会看到如下图所示: 树状目录结构&#xff1a; 以下是对这些目录的解释&#xff1a; /bin&#xff1a;bin是Binary的缩写, 这个目录存放着最经常使用的命令。 /boot&#xff1a;这里存…

优化算法(一)SGD算法实现

SGD随机梯度下降算法&#xff0c;和最常用的GD相比&#xff0c;GD每一次迭代都是所有样本都一起进行计算&#xff0c;而SGD是每一次迭代中每个样本分别进行计算&#xff0c;梯度算法的最终目标是减少cost值&#xff0c;训练出最优的参数值&#xff0c;GD每一次迭代都让所有样本…

PL/SQL查看表结构

SET LONG 99999;SET LINESIZE 140 PAGESIZE 1000;SELECT DBMS_METADATA.GET_DDL(&OBJECT_TYPE,&NAME,&SCHEMA) FROM DUAL;转载于:https://www.cnblogs.com/chenlaichao/p/8005318.html

如何将linux下的代码上传到github上

2019独角兽企业重金招聘Python工程师标准>>> 本文适用情景&#xff1a;linux系统&#xff0c;第一次上传&#xff0c;远端没有对应厂库。其它情景仅作参考&#xff01;1.安装git 首先&#xff0c;你可以试着输入 git&#xff0c;看看系统有没有安装Git&#xff1a; …

Tensorflow(一)搭建环境可能遇到的问题

Anaconda 目前&#xff0c;python3.7是不支持tensorflow的&#xff0c;所以要学习tensorflow需要换成3.5或者3.6的版本 os是win10&#xff0c;以前已经安装了puthon3.6.7和jupyter&#xff0c;直接安装了tensorflow&#xff0c;后来想装一个anaconda3 5.2&#xff0c;anacond…