博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
GMF里实现editpolicyProviders扩展点
阅读量:6075 次
发布时间:2019-06-20

本文共 1619 字,大约阅读时间需要 5 分钟。

通过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类。

这里定义的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) {    }}

本文转自博客园八进制的博客,原文链接:,如需转载请自行联系原博主。

你可能感兴趣的文章
用了那么多年MySQL不知道Explain?怪不得性能那么差!
查看>>
java 字符流 字节流
查看>>
mysql实战14 | count(*)这么慢,我该怎么办?
查看>>
wireshark的ubuntu更新ppa源
查看>>
AngularJs 学习 (二)
查看>>
0302感想
查看>>
实验四 主存空间的分配和回收
查看>>
解决eclipse之ADT与SDK版本不一致问题
查看>>
jQuery 属性操作
查看>>
小甜点,RecyclerView 之 ItemDecoration 讲解及高级特性实践
查看>>
387. 字符串中的第一个唯一字符
查看>>
(转)ORA-01245错误 (2013-04-13 18:37:01)
查看>>
shiro笔记-AuthenticatingRealm和AuthorizingRealm关系
查看>>
内联网
查看>>
从键盘上连续录入一批整数,比较并输出其中的最大值和最小值,当输入数字0时结束循环...
查看>>
mysql中触发器如何监听本身并且改变本身的字段?
查看>>
VBA 高级筛选
查看>>
设置应用图标badge(徽章)
查看>>
洛谷P4891 序列
查看>>
省选前做题记录
查看>>