开发者社区> 青夜之衫> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

向GMF应用的Palette里添加工具

简介:
+关注继续查看

GMF能根据.gmftool里定义的工具项生成一个缺省的palette(在生成的XXXPaletteFactory类里实现,目前没有利用GMF扩展点),同时GMF Runtimeh还提供了org.eclipse.gmf.runtime.diagram.ui.paletteProviders扩展点,如果缺省palette里的工具项不能满足需要,利用这个扩展点可以添加我们需要的其他工具。下图是GMF的Logic例子里对这个扩展点的实现:


图:GMF的Logic例子利用paletteProviders扩展点添加工具项

实现paletteProviders扩展点的步骤并不复杂。首先是在plugin.xml里定义扩展点需要的信息,paletteProvider的class一般选org.eclipse.gmf.runtime.diagram.ui.providers.DefaultPaletteProvider即可,它会把下面定义的信息转换为实际的工具项添加到palette里。在paletteProvider下要创建一个editor项并指定id值;还要创建contribution项包含实际需要的工具项,contribution项里需要指定一个factoryClass,这个类要自己实现,并继承自PaletteFactory.Adapter,实现它的createTool()方法,这个方法根据此contribution项下面所定义的工具的id生成实际的工具实例。下面是GMF的Logic例子所使用的paletteFactory代码,可以看到所做的工作就是根据不同的toolId返回工具实例:

public class LogicPaletteFactory
    extends PaletteFactory.Adapter {
    
    /*
     *  Create the tool according to type       
     */
    public Tool createTool(String toolId) {
        if (toolId.equals(LogicConstants.TOOL_LED)){
            return new CreationTool(LogicSemanticType.LED);
        }else if (toolId.equals(LogicConstants.TOOL_CIRCUIT)) {
            return new CreationTool(LogicSemanticType.CIRCUIT);
        }else if (toolId.equals(LogicConstants.TOOL_ORGATE)) {
            return new CreationTool(LogicSemanticType.ORGATE);
        }else if (toolId.equals(LogicConstants.TOOL_ANDGATE)) {
            return new CreationTool(LogicSemanticType.ANDGATE);
        }else if (toolId.equals(LogicConstants.TOOL_XORGATE)) {
            return new CreationTool(LogicSemanticType.XORGATE);
        }else if (toolId.equals(LogicConstants.TOOL_FLOWCONTAINER)) {
            return new CreationTool(LogicSemanticType.FLOWCONTAINER);
        
        }else if (toolId.equals(LogicConstants.TOOL_CONNECTION)) {
            return new ConnectionCreationTool(LogicSemanticType.WIRE);
        }
        return null;
    }
}

在contribution项下面可以创建多种类型的工具项(entry),例如Drawer、Separator,Stack和Tool等等,每一个工具项除Label外需要有一个id和一个path,id的作用如刚刚提到的是给paletteFactory的createTool()方法的参数,后者根据id创建所需要的工具实例;path可以是"/"或"/entryId/"这样用来指定工具项在palette里的位置。

总结下来就是,在plugin.xml里指定各个工具项的位置,而paletteFactory负责工具id到实际工具的转换。

本文转自博客园八进制的博客,原文链接:向GMF应用的Palette里添加工具,如需转载请自行联系原博主。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
基于C#的ArcEngine二次开发31:addin开发时调用ArcMap的进度条
基于C#的ArcEngine二次开发31:addin开发时调用ArcMap的进度条
0 0
8. 关于Blender的窗口,你需要知道的细节
8. 关于Blender的窗口,你需要知道的细节
0 0
Qt开发技术:图形视图框架(二)场景QGraphicsScene、QGraphicsItem与QGraphicsView详解
Qt开发技术:图形视图框架(二)场景QGraphicsScene、QGraphicsItem与QGraphicsView详解
0 0
VTK 基础(一) — 常用控件介绍及实现圆锥体绘制
最近在做医学图像的相关处理,其中用到了可视化程序包 VTK,在学习过程中,准备写一系列相关教程,一方面用于巩固自己所学,主要自己太笨图片,另一方面加强一下知识理解。 利用 VTK 进行绘制物体时,常用到的组件有下面几种,为了加深理解,VTK 把一个物体的渲染过程比喻成了一场演出(真的很形象图片):
0 0
Customize Acrylic Brush in UWP Applications(在UWP中自定义亚克力笔刷)
原文 Customize Acrylic Brush in UWP Applications(在UWP中自定义亚克力笔刷) Windows 10 Fall Creators Update(Build 16299)添加了acrylic brush,这是一个类似于Windows 7 Aero效果的UI画笔。
1025 0
用SublimeText当Unity Shader的编辑器
用Visual Studio写shader实在蛋疼,那可能就会有人要问了,为啥不用插件可视化制作shader呢?因为我是新手,新手还是老老实实敲代码,慢慢来…   所以试着在网上找找,有没有类似的插件或者编辑器,被我找到了,也基本符合我的要求。
1281 0
【Telerik控件学习】-建立自己的图形编辑工具(Diagram)
Telerik提供了RadDiagram控件,用于图形元素的旋转,拖拽和缩放.更重要的是,它还拓展了许多绑定的命令(复制,剪切,粘贴,回退等等). 我们可以用来组织自己的图形编辑工具. Step1.
854 0
AVEVA PML二次开发之标注样式设置
AVEVA Draft Dimension Style eryar@163.com 在AVEVA Draft中可以标注尺寸,尺寸的标注也有一些样式。通过PML二次开发的小程序可以方便设置尺寸标注的样式。
1058 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载