1.新建一个Plug-in Project, 名为FlowPlugin, Templates选择Multi-page editor, 后缀指定为flow

2.分为2个页签: 源码和设计, 源码使用XMLEditor作为EditorPart(XMLEditor可以使用向导生成后复制过来),

private XMLEditor srcEditor;void createSrcPage() {try {srcEditor = new XMLEditor();int index = addPage(srcEditor, getEditorInput());setPageText(index, " 源 码 ");} catch (PartInitException e) {ErrorDialog.openError(getSite().getShell(),"Error creating nested text editor",null,e.getStatus());}}

设计使用GraphicalEditorWithFlyoutPalette作为EditorPart(这是内置好的画板工具栏)

private GraphicalEditorWithFlyoutPalette designEditor;
void createDesignPage() {try {designEditor = new FlowDiagramEditor();IPath path = ((IFileEditorInput) getEditorInput()).getFile().getProjectRelativePath();IEditorInput input = new FlowDiagramEditorInput(path);int index = addPage(designEditor, input);setPageText(index, " 设 计 ");setPartName(getEditorInput().getName()); // 设置标题} catch (PartInitException e) {ErrorDialog.openError(getSite().getShell(),"Error creating nested text editor",null,e.getStatus());}}

3.自定义FlowDiagramEditor继承GraphicalEditorWithFlyoutPalette添加我们的模型组件工具箱

import flowplugin.Activator;
import flowplugin.factory.EditPartFactory;
import flowplugin.model.HelloModel;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.gef.DefaultEditDomain;
import org.eclipse.gef.GraphicalViewer;
import org.eclipse.gef.SnapToGrid;
import org.eclipse.gef.palette.CreationToolEntry;
import org.eclipse.gef.palette.MarqueeToolEntry;
import org.eclipse.gef.palette.PaletteDrawer;
import org.eclipse.gef.palette.PaletteGroup;
import org.eclipse.gef.palette.PaletteRoot;
import org.eclipse.gef.palette.SelectionToolEntry;
import org.eclipse.gef.palette.ToolEntry;
import org.eclipse.gef.requests.SimpleFactory;
import org.eclipse.gef.ui.parts.GraphicalEditorWithFlyoutPalette;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.ui.plugin.AbstractUIPlugin;public class FlowDiagramEditor extends GraphicalEditorWithFlyoutPalette {
//1.添加ID,与扩展点ID保持一致,因此为了避免出错,建议ID统一为全类名public static final String ID = "flowplugin.editors.FlowDiagramEditor";// 2.视图GraphicalViewer viewer;public FlowDiagramEditor() {setEditDomain(new DefaultEditDomain(this));}/*** 1.首先配置视图* */@Overrideprotected void configureGraphicalViewer() {super.configureGraphicalViewer();// 1.1 获取视图viewer = getGraphicalViewer();viewer.setProperty(SnapToGrid.PROPERTY_GRID_ENABLED, true); // 启用网格viewer.setProperty(SnapToGrid.PROPERTY_GRID_VISIBLE, true); // 显示网格// 1.2 设置EditPartFactoryviewer.setEditPartFactory(new EditPartFactory());}/*** 3.配置调色板*/@Overrideprotected PaletteRoot getPaletteRoot() {// 在 Palette 中添加工具箱// 1.创建一个 Palette的rootPaletteRoot root = new PaletteRoot();// 2.创建一个工具组用来放置常规ToolPaletteGroup toolGroup = new PaletteGroup("ToolGroup");// 3.创建一个GEF提供的Selection工具并将其放到ToolGroup中ToolEntry tool = new SelectionToolEntry();toolGroup.add(tool);root.setDefaultEntry(tool); // 设置该工具是缺省被选择的工具// 4.创建一个GEF提供的"Marquee多选"工具并将其放到toolGroup中tool = new MarqueeToolEntry();toolGroup.add(tool);// 5.创建一个Drawer(抽屉)放置绘图工具,该抽屉名称为"画图"PaletteDrawer drawer = new PaletteDrawer("画图");// 指定"创建HelloModel模型"工具所对应的图标ImageDescriptor imageDescriptor = AbstractUIPlugin.imageDescriptorFromPlugin(Activator.PLUGIN_ID, "/gar.ico");// 6.创建"创建HelloModel模型"工具CreationToolEntry creationEntry = new CreationToolEntry("绘制HelloModel", // The character string displayed on a palette"创建HelloModel模型", // Tool 提示new SimpleFactory(HelloModel.class), // The factory which createsimageDescriptor, // The image of 16X16 displayed on a paletteimageDescriptor);// The image of 24X24 displayed on a palettedrawer.add(creationEntry); // (7)将其加到前面创建的抽屉中// 8.最后将创建的两组工具加到root上.root.add(toolGroup);root.add(drawer);return root;}@Overridepublic void doSave(IProgressMonitor arg0) {// TODO Auto-generated method stub}}

4.自定义FlowDiagramEditorInput继承IPathEditorInput, 来设置编辑器输入来源

import org.eclipse.core.runtime.IPath;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.ui.IPathEditorInput;
import org.eclipse.ui.IPersistableElement;public class FlowDiagramEditorInput implements IPathEditorInput {private IPath path;public FlowDiagramEditorInput(IPath path) {this.path = path;}@Overridepublic boolean exists() {// TODO Auto-generated method stubreturn false;}@Overridepublic ImageDescriptor getImageDescriptor() {// TODO Auto-generated method stubreturn null;}@Overridepublic String getName() {// TODO Auto-generated method stubreturn path.toString();}@Overridepublic IPersistableElement getPersistable() {// TODO Auto-generated method stubreturn null;}@Overridepublic String getToolTipText() {// TODO Auto-generated method stubreturn null;}@Overridepublic <T> T getAdapter(Class<T> arg0) {// TODO Auto-generated method stubreturn null;}@Overridepublic IPath getPath() {// TODO Auto-generated method stubreturn path;}}

5.重写编辑器工程EditPartFactory,将我们的模型组件放入工厂中代管理

import flowplugin.control.ContentsEditPart;
import flowplugin.model.HelloModel;
import org.eclipse.gef.EditPart;public class EditPartFactory implements org.eclipse.gef.EditPartFactory {@Overridepublic EditPart createEditPart(EditPart context, Object model) {// 1.根据模型创建其对应的控制器EditPart part = getPartForElement(model);// 2.将模型存入到控制器中part.setModel(model);return part;}/*** Maps an object to an EditPart.* * @throws RuntimeException if no match was found (programming error)*/private EditPart getPartForElement(Object modelElement) {// 根据模型创建其对应的控制器if (modelElement instanceof HelloModel)return new ContentsEditPart();throw new RuntimeException("Can't create part for model element: "+ ((modelElement != null) ? modelElement.getClass().getName() : "null"));}
}

6.创建图形编辑器ContentsEditPart继承AbstractGraphicalEditPart, 可以将初始化图形添加到画面上

import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.Layer;
import org.eclipse.gef.editparts.AbstractGraphicalEditPart;public class ContentsEditPart extends AbstractGraphicalEditPart {/*** 1.创建图形元素*/@Overrideprotected IFigure createFigure() {Layer figure = new Layer();return figure;}@Overrideprotected void createEditPolicies() {// TODO Auto-generated method stub}}

7.创建自定义模型HelloModel

public class HelloModel {/*** 1.展示的文本*/private String text = "Hello World";public String getText() {return text;}public void setText(String text) {this.text = text;}}

最终运行效果

源码 https://download.csdn.net/download/svygh123/12035876

eclipse插件开发(四) 流程图绘制插件(雏形)相关推荐

  1. android 流程图绘制插件,PlantUML高效绘制流程图

    背景 最近需要绘制较多的流程图,结果发现原始的绘图方式不便于维护调整,后来发现PlantUML可以代码的方式实现,感觉不错.目前比较方便的工具是IntelliJ IDEA提供的PlantUML插件了. ...

  2. eclipse插件开发_开发Eclipse插件

    eclipse插件开发 最近,我开始与一个团队合作开发Eclipse插件. 团队开发了一个很棒的插件,可以实现预期的目的. 因此,我检查了源并尝试构建它. 项目源包含所有必需的库,并且只能在Eclip ...

  3. tomcat9扩展php 插件,Eclipse插件开发tomcat扩展

    介绍 本文介绍如何给Eclipse自带的tomcat插件添加一些功能. 右键菜单扩展 添加扩展点 org.eclipse.ui.popupMenus [codesyntax lang="xm ...

  4. [转]Eclipse插件开发之基础篇(3) 插件的测试与调试

    原文地址:http://www.cnblogs.com/liuzhuo/archive/2010/08/17/eclipse_plugin_1_1_2.html 1. 使用JUnit对插件进行测试 E ...

  5. java 插件开发 互相依赖_java – Eclipse插件开发:有没有办法控制有关我的插件缺少依赖项的安装程序消息?...

    我正在开发一个依赖于 Eclipse平台4.2(Juno)的eclipse插件,并且不能安装在旧版本的eclipse上. 当用户尝试在旧eclipse上安装我的插件(通过更新站点)时,Eclipse安 ...

  6. sketch 流程图_眼前一亮!2款免费手绘风流程图绘制工具

    我在另外一篇文章:[一款让Python开发效率提升50%的工具包]画了几张手绘风格的流程图,文章发表之后有读者私信我: "这种风格的流程图好漂亮啊,请问是用什么工具画的啊?" 的确 ...

  7. eclipse插件开发资料 参考代码

    首页 zhangxinzhou 的BLOG 写留言 邀请进圈子 发消息 加友情链接 进家园 加好友 2011年度IT博客大赛 十大杰出IT博客评选中 博客统计信息 用户名:zhangxinzhou 文 ...

  8. ActivitiBpm6.0官方流程图绘制工具搭建-bpm

    ActivitiBpm6.0官方流程图绘制工具搭建 文章目录 前言 一.jar包下载 二.使用步骤 1.相应工具下载 2.环境配置 3.使用 4.修改数据库连接 总结 前言 项目使用Idea进行开发, ...

  9. 绘制业务流程图:流程图绘制工具

    文章描述:什么是流程图?流程图和其他图表(如线框图,概念图,架构图,用例图)有什么不同? 图1:用即时贴与白板做的简单流程图 转载请注明来处,关注我请点击:http://weibo.com/heidi ...

最新文章

  1. Linux 网络编程—— libpcap 详解
  2. lua 区间比较_TI-Lua 系列教程2.4.1: 条件分支
  3. nginx linux windows 忽略大小写_React 基础 在 Windows 下使用 React , 你需要注意这些问题...
  4. Windows对象管理器
  5. 高质量 Android 开发框架 LoonAndroid 详解
  6. div+css命名大全
  7. 【Android容器组件—AdapterView】
  8. Linux常用命令英文全称以及中文解释
  9. 跨越异构鸿沟,Redis 迁移同步过程中的挑战与解决方案
  10. QLU_ACM 2021 专题训练(一)题解 [暴力、排序、贪心、二分]
  11. 计算机专业的工匠精神例子,市计算机:传承中华传统文化,弘扬工匠精神
  12. thinkpad笔记本电脑怎么关闭触摸板
  13. 雾霾环保主题动态网站设计作业
  14. 交换机进行syslog服务器设置
  15. Python免费字幕翻译(google)
  16. 原生1.1.2固件iPhone降级至1.0.2教程
  17. vhost dpdk 共享内存
  18. 浅谈社交电商产品设计的10个深刻的知识
  19. 计网-2-标准化工作及其相关组织
  20. Python-批处理调整音频文件的音量大小

热门文章

  1. JDBC的DML增删改查的代码重构设计(下)
  2. CentOS7在/etc/grub2.conf引导中配置1G大页内存
  3. linux内核 struct page结构的三种存放方式
  4. (1)Linux进程调度
  5. srsLTE源码学习:网络附属存储抓包nas_pcap.h
  6. 使用jsp循环查询mysql_[JSP] 创建mysql数据库利用JSP进行数据库查询(1)
  7. Hadoop之深入HDFS原理<一>
  8. scal的函数定义(day01)
  9. java html写入到word文档_java 使用jacob将html页面写入word
  10. caffe模型文件解析_「机器学习」截取caffe模型中的某层