eclipse插件开发(四) 流程图绘制插件(雏形)
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插件开发(四) 流程图绘制插件(雏形)相关推荐
- android 流程图绘制插件,PlantUML高效绘制流程图
背景 最近需要绘制较多的流程图,结果发现原始的绘图方式不便于维护调整,后来发现PlantUML可以代码的方式实现,感觉不错.目前比较方便的工具是IntelliJ IDEA提供的PlantUML插件了. ...
- eclipse插件开发_开发Eclipse插件
eclipse插件开发 最近,我开始与一个团队合作开发Eclipse插件. 团队开发了一个很棒的插件,可以实现预期的目的. 因此,我检查了源并尝试构建它. 项目源包含所有必需的库,并且只能在Eclip ...
- tomcat9扩展php 插件,Eclipse插件开发tomcat扩展
介绍 本文介绍如何给Eclipse自带的tomcat插件添加一些功能. 右键菜单扩展 添加扩展点 org.eclipse.ui.popupMenus [codesyntax lang="xm ...
- [转]Eclipse插件开发之基础篇(3) 插件的测试与调试
原文地址:http://www.cnblogs.com/liuzhuo/archive/2010/08/17/eclipse_plugin_1_1_2.html 1. 使用JUnit对插件进行测试 E ...
- java 插件开发 互相依赖_java – Eclipse插件开发:有没有办法控制有关我的插件缺少依赖项的安装程序消息?...
我正在开发一个依赖于 Eclipse平台4.2(Juno)的eclipse插件,并且不能安装在旧版本的eclipse上. 当用户尝试在旧eclipse上安装我的插件(通过更新站点)时,Eclipse安 ...
- sketch 流程图_眼前一亮!2款免费手绘风流程图绘制工具
我在另外一篇文章:[一款让Python开发效率提升50%的工具包]画了几张手绘风格的流程图,文章发表之后有读者私信我: "这种风格的流程图好漂亮啊,请问是用什么工具画的啊?" 的确 ...
- eclipse插件开发资料 参考代码
首页 zhangxinzhou 的BLOG 写留言 邀请进圈子 发消息 加友情链接 进家园 加好友 2011年度IT博客大赛 十大杰出IT博客评选中 博客统计信息 用户名:zhangxinzhou 文 ...
- ActivitiBpm6.0官方流程图绘制工具搭建-bpm
ActivitiBpm6.0官方流程图绘制工具搭建 文章目录 前言 一.jar包下载 二.使用步骤 1.相应工具下载 2.环境配置 3.使用 4.修改数据库连接 总结 前言 项目使用Idea进行开发, ...
- 绘制业务流程图:流程图绘制工具
文章描述:什么是流程图?流程图和其他图表(如线框图,概念图,架构图,用例图)有什么不同? 图1:用即时贴与白板做的简单流程图 转载请注明来处,关注我请点击:http://weibo.com/heidi ...
最新文章
- Linux 网络编程—— libpcap 详解
- lua 区间比较_TI-Lua 系列教程2.4.1: 条件分支
- nginx linux windows 忽略大小写_React 基础 在 Windows 下使用 React , 你需要注意这些问题...
- Windows对象管理器
- 高质量 Android 开发框架 LoonAndroid 详解
- div+css命名大全
- 【Android容器组件—AdapterView】
- Linux常用命令英文全称以及中文解释
- 跨越异构鸿沟,Redis 迁移同步过程中的挑战与解决方案
- QLU_ACM 2021 专题训练(一)题解 [暴力、排序、贪心、二分]
- 计算机专业的工匠精神例子,市计算机:传承中华传统文化,弘扬工匠精神
- thinkpad笔记本电脑怎么关闭触摸板
- 雾霾环保主题动态网站设计作业
- 交换机进行syslog服务器设置
- Python免费字幕翻译(google)
- 原生1.1.2固件iPhone降级至1.0.2教程
- vhost dpdk 共享内存
- 浅谈社交电商产品设计的10个深刻的知识
- 计网-2-标准化工作及其相关组织
- Python-批处理调整音频文件的音量大小
热门文章
- JDBC的DML增删改查的代码重构设计(下)
- CentOS7在/etc/grub2.conf引导中配置1G大页内存
- linux内核 struct page结构的三种存放方式
- (1)Linux进程调度
- srsLTE源码学习:网络附属存储抓包nas_pcap.h
- 使用jsp循环查询mysql_[JSP] 创建mysql数据库利用JSP进行数据库查询(1)
- Hadoop之深入HDFS原理<一>
- scal的函数定义(day01)
- java html写入到word文档_java 使用jacob将html页面写入word
- caffe模型文件解析_「机器学习」截取caffe模型中的某层