zoukankan      html  css  js  c++  java
  • GMF里实现editpolicyProviders扩展点

    通过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) {
    
        }
    
    }

    参考:

    http://dev.eclipse.org/newslists/news.eclipse.modeling.gmf/msg05684.html
    http://dev.eclipse.org/newslists/news.eclipse.modeling.gmf/msg00931.html

  • 相关阅读:
    防止域名恶意指向的解决办法
    Spring @Configuration @Import
    CAS 集成认证
    远程桌面登录蓝色屏幕、不显示桌面怎么解决?
    终端服务器超出了最大允许连接数
    Fiddler 常见几种解决捕获不到请求的方法
    android TimerTask 的简单应用
    Android 数字签名学习笔记
    Android 遍历卡数据并按图片,音乐等分类保存
    Android 最简单的SD卡文件遍历程序
  • 原文地址:https://www.cnblogs.com/bjzhanghao/p/858923.html
Copyright © 2011-2022 走看看