GEF
文章平均质量分 86
liugang594
这个作者很懒,什么都没留下…
展开
-
GEF中修改默认的FeedBack
假如我们有两个模型:RouteMap和Homuncule,其中Homuncule是包含在RouteMap中。RouteMap上安装有用于Homuncule拖动和定大小的Policy:HomunculeLayoutPolicy. 要修改Homuncule默认的FeedBack,我们需要重写HomunculeLayoutPolicy的createChildEditPolicy(EditPart...2008-07-09 16:21:44 · 133 阅读 · 0 评论 -
GEF增加之连接助手二
上一篇说过怎么实现悬浮连接助手。一直想要怎么实现悬浮连接助手。 相对于创建一个元素说来,创建一个连接我觉得要麻烦一些,不能通过直接构建一个命令来完成。 后来终于想到一个简单的办法了:直接设置当前editdomain的activeTool为connection的tool,并且设置它的targetEditpart即可。 简单明了,呵呵 ...2009-10-29 16:01:39 · 108 阅读 · 0 评论 -
定制GEF的Palette
用GEF框架实现一个Editor时,会有一个默认的paletteViewer。 看源码就知道,这个paletteViewer也是用一种和GEF框架一样的方式实现的。要定制PaletteViewer,我们可以从重写editor的createPaletteViewerProvider()方法开始。 在createPaletteViewerProvider()需要返回一个palette的...2009-11-23 16:35:09 · 227 阅读 · 0 评论 -
增加Palette的拖放支持
默认情况下,GEF中要创建一个新的结点都是通点在Palette上选择一个结点,然后在Editor区域单击实现的。 也有一些是通过拖放Palette中的一个对象到Editor区域来实现的。 要实现一个拖放支持也是很容易的。GEF中默认实现了一组drag-drop listener用来支持拖放实现: 1。TemplateTransferDropTargetListener ...2008-12-19 14:08:29 · 98 阅读 · 0 评论 -
GEF中增加ContextMenu的支持
GEF中,增加对EditPart的右键菜单的支持是很普遍的一个需求。 这里就简单介绍一下增加右键菜单的方法。 首先需要了解的就是要支持右键菜单,就需要有一个用来管理和显示菜单的MenuManager对象加到图元对象上去,类似于JFace中对MenuManager的支持。 GEF中有一个类:ContextMenuProvider,就是用来实现对ContextMenu的支持。...2008-12-19 22:32:14 · 137 阅读 · 0 评论 -
GEF中一个模型的多层图的问题
一般来说,我们在做GEF的时候,通常是一个模型对应一个图,这个图例如就是简单的通过继承Figure得来的。 也有可能我们需要的图比较复杂,需要通过多个图的组合来得到一个模型的图。举个最简单的使用: 假如我们希望模型A的图是这个样子:有一个title区域和一个body区域,其中body区域是可以滚动的,如下: figure 1 那么简单的,可以有一个大图,大图的c...2008-12-26 16:00:45 · 224 阅读 · 0 评论 -
改变GEF的一些默认行为
一、改变Layer GEF中会根据editpart的类型,把它们放在某个类型的Layer上,例如Scalable Layer, Handle Layer, FeedBack Layer. 根据设置的RootEditPart的类型,得到的Layer的类型和层次也是不同的。例如: 对于ScalableFreeformRootEditPart: layeredPane.a...2008-12-29 14:12:23 · 87 阅读 · 0 评论 -
GEF中扩大、缩小时处理编辑行为
我们为GEF应用提供了ZoomIn和ZoomOut功能之后,在图放大缩小的时候,如果有一个类似于TextCellEditor这样的直接编辑行为放在某个EditPart上,在未做处理的情况下,编辑控件的显示可能会不如人意。 因此我们希望在Figure变大缩小的时候,编辑控件也能随之变化。 要达到这个效果其他也不能。只要在控件显示之前计算正确控件大小,位置,和字体就可以了。 这...2008-12-30 10:54:01 · 156 阅读 · 0 评论 -
GEF中实现“拷贝为图片”
在一个GEF的编辑器中,编辑器上是一个个的Figure,从外观上看,其实也是一张张的图片。那么如果能实现一个功能,把任意选择的几个Figure,能粘贴到例如Windows的画图工具,或者是Word里,直接就变成一张图片,那是多美的一件事啊。如下所示: 直接把GEFEditor中的任意选中图元作为图片复制出来。我们就需要做一些事情,我一开始的思路是把一个个图元作为一个图片来对...2009-09-06 09:13:54 · 113 阅读 · 0 评论 -
GEF功能增强之连接助手
GEF图形编辑器中,通常会有连接线的存在,如果没有,这篇文章你有兴趣也可以看看。要连接两个图元,通常我们的作法是:选择palette中的connectionTool,然后选择一个图,再拖去鼠标到另一个图元上去。 我看的有editor会有一些快捷方式,支持我称之为连接助手的功能:选择一个图元,在图元的右下角会长出一些功能图元,选择其中一个(例如connection的功能),就可以直接拖动...2009-09-10 14:45:17 · 247 阅读 · 0 评论 -
GEF的动态变化二
之前有一篇文件介绍怎么实现GEF Editor中的图元的渐近、动态变化过程的显示技巧。 在GEF的Flow例子里,已经提供了另一种实现动态变化的方式,这个实现方法主要由以下三部分组成: 需要有一个辅助类,用于记录初始和终态,并计算渐近过程需要自定义一个布局类,借助上面的辅助类来给出当前布局需要窗口类控制器需要监听状态变化,以决定什么时候开始激活动态过程每个可能属于变...原创 2011-04-13 10:47:26 · 188 阅读 · 0 评论 -
Draw2d的ScrollPane的使用
ScrollPane scrollpane = new ScrollPane(); headerFigure = new FreeformLayer(); headerFigure.setOpaque(true); ToolbarLayout layout = new ToolbarLayout(false); layout.setSpacing(2);// ...2011-04-19 15:05:48 · 228 阅读 · 0 评论 -
增加GEF的动态性
在一个GEF应用中,最常的操作是移位和缩放。移位和缩放实现本身很简单,绝大部分应用的最终结果是鼠标拖动操作一放下,所操作的图就直接变幻到最终状态,虽然结果是正确的。不过总是觉得缺少一些动感。在GEF插件自带的示例中,有一个"org.eclipse.gef.example.flow"的例子,它做的就比较炫,能动慢动作的形式展示图形变换的一个动画过程。思路其实是很简单的,就是分别记住初态和终态,然后按...2011-01-06 10:25:15 · 245 阅读 · 0 评论 -
(译)Eclipse Zest一
1. Eclipse Zest1.1 概述Eclipse Zest是一个可视化的图形工具。它基于SWT/Draw2D。Zest还支持JFace中Viewer的概念,因此允许模型和视图的分离。这篇文章假设你已经熟悉了Eclipse RCP或Eclipse Plugin开发。 (我注:其实也可以在一个普通的SWT程序中使用Zest) 1.2 组件Eclipse Zest有以...原创 2011-01-07 15:14:30 · 212 阅读 · 0 评论 -
(译)Eclipse Zest二
5. Zest和JFace的例子5.1 创建工程创建一个RCP应用"de.vogella.zest.jface",使用"RCP Application with a view"做为模板。增加zest的依赖项。修改Pespective.java如下: package de.vogella.zest.jface;import org.eclipse.ui.IPageLay...原创 2011-01-07 15:41:00 · 127 阅读 · 0 评论 -
GEF中Palette项的属性页显示
一般来说我们只需要在GraphicalViewer部分显示在Property页即可。 要支持GraphicalViewer和PaletteViewer都能对属性页有支持,就有点复杂。 每个Site只能有一个SelectionProvider,正是这个SelectionProvider里选中的对象才有可能显示在属性页。在GEF中,情况下,GraphicalViewer被设置为这个Ed...2010-11-04 14:25:27 · 171 阅读 · 0 评论 -
GEF功能增强之创建助手
用过GMF就知道,GMF默认生成的editor有一个悬浮的创建助手功能:当把鼠标移动到某个editpart上,稍停,则会出现一个提示条,上面列出当前位置的editpart上可以新建的子元素,直接选择某项进行新建而无需Palette的参与。 就像之前那篇连接助手一样,使用此功能可以大大方便新建过程。所以这里就和大家讨论一下这个功能的自我实现。 没有详细的研究过GMF中这个功能的实现代...2009-09-28 09:09:25 · 132 阅读 · 0 评论 -
GEF理解系列九
到目前为止,其实我们已经有了一个虽然简单,但还算完整的应用。不过总是有点单调。这一节我们给我们的Editor加一点其他的东西。严格来说已经不属性GEF的范围了。一、增加属性页的支持 在Eclipse里要支持属性页,你选择的对象必须是实现了ISelectionProvider接口。幸好,在GEF里,所有的选择都返回的是一个EditPart,而这些EditPart已经默认实现了这...2008-01-01 13:25:37 · 167 阅读 · 0 评论 -
GEF理解系列八
这一节,我们继续来看一下连接线。一、带箭头的连接线带箭头本身其实通常来说都不是模型需要的,只是为了看起来方便而已。呵呵。这里我们就做这样的假设。所以要实现一个带箭头的连接线,只要让连线figure加一个箭头就可以了。之前我们建了一个抽象的连接模型,但是一直只有一个子类。这里它终于又要派上用场了。我们再建一个连接线模型:ArrowConnectionModel,让它也继承Abstra...2008-01-01 00:32:23 · 219 阅读 · 0 评论 -
(接上篇)关于GEF Feedback的补充
重复上篇,我们有以下类:1、模型相关:RouteMap、Homuncule,其中RouteMap含有一个或多个Homuncule2、Policy相关:HomunculeLayoutPolicy;安装在RouteMapEditPart上用于移动Homuncule或重置它 的大小3、EditPart相关:对应于RouteMap的RouteMapEditPart;对应于Homunc...2008-07-10 10:18:18 · 136 阅读 · 0 评论 -
GEF中导视图的使用
有时增加一个导视图能给用户很大的方便性,例如在outline视图里使用导视图,可以很方便的看到整体与局部的关系。GEF中也提供了导视图功能。这里就讨论一下它的使用。 首先我们要知道几个概念: 1、Viewport:视口,也就是当前你能看到的部分,比如一个Editor中的可见部分。 2、Thumbnail:GEF中的导...2008-07-10 17:01:24 · 111 阅读 · 0 评论 -
修改GEF中Connection的端点
GEF中,选中一条连接线,默认的端点是两个小黑框,如下: Figure 1 这个可用,不过终究是不太美观。这里介绍一下怎么修改这个选中的端点外观。修改后的效果如下: Figure 2 首先有一点我们知道:通常要使得连线能够被选中,我们要在连接线对应的EditPart上安装以下Policy:installEditPolicy(EditPolicy.C...2008-07-14 16:09:29 · 189 阅读 · 0 评论 -
给GEF拖放功能
我们知道SWT支持Native的拖放。GEF使用SWT的拖放来实现自己的拖放功能。不过不需要像SWT中需要定义DragSource和DropTarget。在GEF中,我们只需要继承AbstractTransferDragSourceListener来实现拖放源;继承AbstractTransferDropTargetListener来实现放置地。 这里以放置地为例! 首先,写一个继...2008-07-17 10:26:53 · 197 阅读 · 0 评论 -
GEF理解系列一
这两天又重新看了一下GEF。现在理解起来感觉比以前要容易的多了。这里就把一些心得整理一下,写了一个系列,以期与大家共同探讨。一、创建Editor 一般来说GEF都是用来实现一个Editor的。因此这里我也以Editor为例来说明。首先要做的一点就是实现一个Editor的扩展。具体怎么实现这里就不讨论,不明白的可以去找一个关于Eclipse插件开发方面的文章看看就知道了。 ...2007-12-31 21:27:27 · 246 阅读 · 0 评论 -
GEF理解系列二
系列一中,我们完成了一个MVC结构,并初步构造了一个Editor,不过到现在Editor里什么东西都还没有,这节中我们要给它加一点东西。一、配置和初始化Editor要想让Editor真正开始工作,我们就需要做一些基础工作了。我们可以看到,当我们写了一个继承自GraphicalEditorWithPalette类的editor时,默认有几个方法需要实现。其中有一个方法:initializeG...2007-12-31 21:36:52 · 141 阅读 · 0 评论 -
GEF理解系列三
经过以上步骤,我们已经有办法显示多个图形了。还是重提一下:Editor的初始状态由initializeGraphicalViewer()方法决定。不过在我们已经完成的过程,我们会发现,初始状态,也是最终状态,我们甚至不能移动任何一个图,当然了也不能增加和删除。下面我们要逐一的实现这些功能。在继续之前,我们先了解一下GEF执行操作的过程,看下图: 图一 从上图可以看到。GEF把SWT...2007-12-31 21:52:02 · 245 阅读 · 0 评论 -
GEF理解系列四(1)
在开始之前,我们先讲一点预备的(我自己的理解,如果有错不能怪我)。 1. GEF中,一个连接线模型要成功创建,则这个模型必须有个源和目标。大家可以试一下连接一个源,再把目的随便在某个点一下,线是不会出来的(当然如果任务一个点都可以是目标的话,那就另论了)。 2. GEF中,一个连接线模型即使已经被附着到了源和目的上,也不一定会被显示出来。这就要提到AbstractGra...2007-12-31 21:59:08 · 175 阅读 · 0 评论 -
GEF理解系列四(2)
二、添加调色板 到现在为止,我们完成的都是静态创建模型。还没动态创建过。要动态创建就要用到调色板了。所以现在是时候添加调色板元素了。 要添加调色板,我们就要回到Editor类里,看Editor中默认要实现的另一个方法:getPaletteRoot()。 这个方法就是用来完成调色板内容的。这个没什么可以多讲的。这里直接给出例子: @Override p...2007-12-31 22:04:41 · 95 阅读 · 0 评论 -
GEF理解系列五(1)
到目前为止,我们已经有了一些模型和一些调色析工具箱了。但是我们的工具箱还不能真正的创建出新的模型来。这一节我们就要实现创建模型操作。一、新建模型结点首先我们看一下创建结点模型操作。以我们HelloWorldModel为例。每个HelloWorldModel只有加到了作为Editor的content的DiagramRootContent对象上才能被显示出来。因此,我们要想再追加显示一...2007-12-31 22:09:12 · 134 阅读 · 0 评论 -
GEF理解系列五(2)
二、新建连接模型新建连接模型,过程大同小异。此时需要在结点模型上安装Policy,Policy的类型为:GraphicalNodeEditPolicy。 在HelloWorldEditPart的createEditPolicies()方法里追加: installEditPolicy(EditPolicy.GRAPHICAL_NODE_ROLE, new HelloWorldGrap...2007-12-31 22:11:29 · 100 阅读 · 0 评论 -
GEF理解系列六(1)
这一节我们主要讲结点和连接的删除,另外就是连接的重定向。一、连接线的选中与重定向因为和系列五还有点扯,所以先讲一下连接的重定向。在上一节中,我们创建了一个用来新建连接的Policy:HelloWorldGraphicalNodeEditPolicy,它还有两个方法在上一节中一直没有提到: @Override protected Command ge...2007-12-31 22:17:24 · 129 阅读 · 0 评论 -
GEF理解系列六(2)
三、删除结点时删除连接线刚才我们已经完成了删除结点的操作。不过它有一个问题:结点是被删除了,可连在它上面的连接线还存在。这是一个很可笑しい的结果。所以这里我们要修改一下,删除结点时,把它上面的连接线也一并删除。这个操作要关注的地方只有一个,就是删除结点命令。之前我们说过,一个连接线要想被显示出来的条件。这里我们可以借助这个条件来实现连接线的删除:让连接线脱离源的目标。所以删除结...2007-12-31 22:21:19 · 196 阅读 · 0 评论 -
GEF理解系列七(1)
到现在为止,我们已经完成了很多工作了:图形的缩放,移动;增加,删除;连线的增加删除,重定向。不过我们还没有办法修改我们HelloWorld上的文字。这一节我们就来实现对文字的修改。一、直接编辑的支持要想支持编辑功能。显示我们也需要安装Policy,写command。那好,我们先做好这部分工作。EditPolicy里有一个直接编辑Policy:DirectEditPolicy。我们写...2007-12-31 22:26:03 · 130 阅读 · 0 评论 -
GEF理解系列七(2)
二、放置EditManager在GEF的EditPart里,有一个方法可以用来处理此事:performRequest();那我们就把我们的EditManager放在这吧。如下: @Override public void performRequest(Request req) { if (req.getType().equa...2007-12-31 22:31:54 · 118 阅读 · 0 评论 -
GEF中用鼠标移动画布
第一步 增加Palette项: moveTool = new PanningSelectionTool() { private Point viewLocation; protected Cursor getDefaultCursor() { return new Cursor(PlatformUI.createDisplay(), Activator ...原创 2011-12-27 13:37:50 · 185 阅读 · 0 评论