GEF
cuser_online
致力于软件开发。
展开
-
GEF基本概念
1.GEF中的编辑器(Editor)org.eclipse.gef.ui.parts.GraphicalEditor是GEF中编辑器的根类,我们的Editor可以直接实现这个类;如果想带有调用色(palette),则至少需要继承GraphicalEditorWithPal原创 2011-09-03 00:55:25 · 520 阅读 · 0 评论 -
Handle是怎么被添加时Handle Layer的?
我们可以查看SelectionHandlesEditPolicy类的源码。/** * Adds the handles to the handle layer. */protected void addSelectionHandles() { removeSelectionHandles(); IFigure layer = getLayer(LayerConstants.原创 2011-11-17 22:50:11 · 606 阅读 · 0 评论 -
选中某个EditPart时,Handle怎么产生的?
一般而言,Handle是由EditPolicy产生的,而且在大多数情况下都是如此。有人可能要思考一个问题,那就是选中某个EditPart时形成的8个Handle点是由谁产生的?因为从代码上看,你可能并没有添加相对就的EditPolicy。你可能只添加了一个XYLayout策略。通过调试,我们发现在为某个EditPart添加Layout EditPolicy时,会为其孩子添加一些策略原创 2011-11-17 22:36:48 · 428 阅读 · 0 评论 -
Tool的职责
1.通知EditPart显示和隐藏FeedBack2.从EditPart中获取Command(当然,EditPart又会从EditPolicy去取Command)3.在命令堆栈里执行Command。AbstractTool里面的代码/** * Executes the given command on the command stack. * @since 3.1 *原创 2011-11-17 22:39:54 · 330 阅读 · 0 评论 -
什么时候产生Tool的实例?
通过查看EditDomain的源码可知。/** * Listens to the PaletteViewer for changes in selection, and sets the Domain's Tool * accordingly. * 监听工具箱里面工具的选中 */private PaletteListener paletteListener = new Pa原创 2011-11-17 22:40:37 · 382 阅读 · 0 评论 -
AbstractEditPart类中的几个重要方法的解析
1.refreshVisuals方法默认情况下,方法 refreshVisuals() 仅在 EditPart 初始化的过程中调用一次,并且决不会被再次调用。在响应模型通知时,应该由程序员负责根据需要再次调用 refreshVisuals()以更新图形(当需要利用来自模型的数据更新图形时,你可以在程序中调用该方法)。为改进性能,您可能希望将每个模型属性的代码分解成其自己的方法(或者是一个带有“原创 2011-11-17 22:42:08 · 609 阅读 · 0 评论 -
让EditPart无法改变大小
在其父亲上安装的LayoutEditPolicy实现类中重写createChildEditPolicy方法,返回NonResizableEditPolicy的实例@Override protected EditPolicy createChildEditPolicy(EditPart child) { return new NonResizableEditPolicy();//返原创 2011-11-17 22:45:42 · 534 阅读 · 0 评论 -
自定义反馈,比如定制椭圆形图形的选择柄
覆盖布局策略中的createChildEditPolicy方法@Override protected EditPolicy createChildEditPolicy(EditPart child) { return new CustomResizableEditPolicy(); } package tutogef.policies;import java.原创 2011-11-17 22:50:40 · 702 阅读 · 0 评论 -
GEF中区分mouse move和mouse drag
查看DomainEventDispatcher的源代码/** * @see EventDispatcher#dispatchMouseMoved(org.eclipse.swt.events.MouseEvent) */public void dispatchMouseMoved(org.eclipse.swt.events.MouseEvent me) { if (!edit原创 2011-11-19 00:12:11 · 1543 阅读 · 1 评论 -
对SelectionEditPolicy策略的源码分析
为什么,选中某个EditPart的时候会出现8个点组成的手柄(Handle)?在前面的博文中,已经提及,在为我们的EditPart安装LayoutEditPolicy策略时,LayoutEditPolicy会为它的所有孩子安装策略(decorateChildren),实际上是安装了PRIMARY_DRAG_ROLE策略,一般情况会是SelectionEditPolicy的子类。我们先来原创 2011-11-19 00:13:19 · 669 阅读 · 2 评论 -
学习GEF的一些资料
1.IBM关于GEF/EMF的红皮书(偏向于理论)2.德国人写的GEF Tutorial(偏向于实战,基本上涉及了GEF的大部分内容,例子虽然略显粗糙,但麻雀虽小,五脏俱全)这个示例建议全部手写。不要复制里面的代码。做完和复制的效果不一样。3.日本人写过一个GEF入门系列(网站现已关闭了)4.官方的GEF Programmer's Guide(概览与理论)5.Draw2d Ov原创 2011-11-23 22:36:53 · 586 阅读 · 0 评论 -
代表画布的Conent对应的EditPart是怎样被添加到Primary Layer上去的呢?
我们可以查看AbstractEditPart的addChild方法,具体跟踪一下addChildVisual方法,addChildVisual方法在AbstractGraphicalEditPart上的实现为,protected void addChildVisual(EditPart childEditPart, int index) { IFigure child = ((Grap原创 2011-11-24 22:09:36 · 551 阅读 · 0 评论 -
ConstrainedLayoutEditPolicy与ContainerEditPolicy的区别
二者都是布局策略。但ConstrainedLayoutEditPolicy更关注坐标位置信息。而ContainerEditPolicy适用于窗口操作,并不关心位置信息,可以选用ContainerEditPolicy来处理ADD、ORPHAN、CLONE请求中与而已无关的命令原创 2011-11-17 22:49:13 · 478 阅读 · 0 评论 -
连线(Connection)是怎么添加进Connection Layer的呢
阅读源代码。在AbstractConnectionEditPart方法中的addNotify实现为:/** * @see org.eclipse.gef.EditPart#addNotify() */public void addNotify() { activateFigure(); super.addNotify();}我们需要再看一看acitvateF原创 2011-11-17 22:48:24 · 557 阅读 · 0 评论 -
以鼠标进入EditPartViewer为例讲解GEF执行流程
鼠标进入EditPartViewer时,FigureCanvas会将MouseMove事件交给其监器处理,而FigureCanvas的监听器为LightweightSystem内部的EventHandler。eg:/**@see MouseMoveListener#m原创 2011-09-14 21:48:31 · 1000 阅读 · 0 评论 -
GEF:什么时候产生Tool的实例?
通过查看EditDomain的源码可知。/** * Listens to the PaletteViewer for changes in selection, and sets the Domain's Tool * accordingly. * 监听工具箱里面原创 2011-09-14 21:44:13 · 483 阅读 · 0 评论 -
GEF:谁生成Request?
一般而言,产生Request实例的有Action和Tool。原创 2011-09-14 21:47:15 · 357 阅读 · 0 评论 -
GEF:Tool的职责
1.通知EditPart显示和隐藏FeedBack2.从EditPart中获取Command(当然,EditPart又会从EditPolicy去取Command)3.在命令堆栈里执行Command。AbstractTool里面的代码/** * Executes原创 2011-09-14 21:54:28 · 470 阅读 · 0 评论 -
GEF中如何实现Direct Edit
DirectEdit是一项比较友好的功能。意指在图形上直接修改,直接响应。按照GEF的开发思路。1.显然我们要提供这样一种直接编辑的策略,然后将其安装到相应EditPart上。该策略继承自DirectEditPolicy即可。我们覆盖其抽象方法getDirec原创 2011-09-20 22:46:51 · 778 阅读 · 0 评论 -
对RootEditPart的理解
设置EditPartViewer的RootEditPart的时候,eg:GraphicalViewer viewer = getGraphicalViewer();ScalableRootEditPart rootEditPart = new ScalableRoot原创 2011-09-20 22:46:15 · 649 阅读 · 0 评论 -
GEF中的反馈
什么是反馈? 所谓反馈,是指操作时显示的一些提示信息,是对用户操作的某种响应,比如拖动某个图形时,我们一般会看到一个虚影,这就是反馈。 它告诉了用户这个图形在松开鼠标之后将会被放置在什么地方,这是一种很好的提高用户友好度的方式,也是反馈的主要目的。 反馈有两种:原创 2011-09-21 21:56:25 · 744 阅读 · 0 评论 -
GEF中常用策略
1.删除某个结点一般是继承ComponentEditPolicy策略。实现其createDeleteCommand方法。eg:protected Command createDeleteCommand(GroupRequest deleteRequest) { D原创 2011-09-22 23:24:12 · 582 阅读 · 0 评论 -
GEF模型的职责
模型要负责把自已的改变通知给EditPart,所以它内部一般有一个PropertyChangeSupport类型的成员变量,并提供了addPropertyChangeListener()、removePropertyChangeListener()和firePropertyC原创 2011-09-22 23:25:52 · 416 阅读 · 0 评论 -
GraphicalNodeEditPolicy接口解析
如果我们的节点被作为连接的端点,那么它通常需要安装EditPolicy.GRAPHICAL_NODE_ROLE策略,策略类通常是继承GraphicalNodeEditPolicy类eg:installEditPolicy(EditPolicy.GRAPHICAL_NODE_ROLE, CustomGraphicalNodeEditPolicy):它有四个需要实现的抽象方法。分别是原创 2011-11-17 22:39:04 · 604 阅读 · 0 评论 -
浅淡EditPolicy和GEF的执行流程
说说策略(EditPolicy),其实策略和命令是没有必然的对应关系的,至于GEF框架中内置的一些策略,大多不过是继承了AbstractEditPart。我们自己完全可以实现一个EditPolicy,重要的是你的EditPolicy能够处理什么请求,初学者往往困惑于使用什么策略,如何对应角色。其实角色那个键,也是GEF虚晃一枪,你取什么值都可以,但不要重复。那么,重要的是什么,重要的是原创 2011-11-17 22:47:40 · 1076 阅读 · 0 评论 -
编译运行xmind3.2源码
XMind是一款顶级 商业品质的思维导图(mindmap)和头脑风暴(brainstorm)软件,2008年“最佳Eclipse RCP商业应用”获奖产品。从2008年10月起,XMind 推出 开源版本,并荣获 sourceforge 社区 2009 最佳学术应用奖。它采用Java语言开发,基于Eclipse RCP体系结构,可以运行于Windows/Mac/Linux平台。其技术构架基原创 2012-10-26 09:52:50 · 1777 阅读 · 1 评论