GEF实践总结(一)简洁的基础框架

一. 创建一个插件项目
通过从RCP application with a view 模板创建一个含ViewPart的Eclipse RCP项目。



二. 在MANIFEST.MF 添加对org.eclipse.gef插件的依赖。


三. 创建model
为了方便使用,我们了创建BaseModel和BaseContainerModel这两种基类。


BaseModel :所有模型的最基础类。一定要能够明白里面的PropertyChangeSupport和firePropertyChange的意义。
BaseContainerModel :父模型。
DiagramModel :最底层的模型,就跟jface.TreeViewer中,最底层的模型总是不显示的,从界面上无法直接看到,但却又真实存在。
RectModel :最简单的一个图形相关的模型,用来表示一个矩形。

注意: 我偷了一个懒,一般属性我fire的propertyName都是IPropertyConst.COMMON,只有添加、删除children的时候,对外fire的是IPropertyConst.CHILDREN。


四. 创建model对应的EditPart
同样的,我也创建了BaseEditPart和BaseContainerEditPart两个基础类型。


BaseEditPart :所有EditPart的基础类。extends于AbstractGraphicalEditPart,同时实现了PropertyChangeListener接口。
注意: propertyChange中对于IPropertyConst. CHILDREN IPropertyConst.COMMON 的不同属性改变的不同处理。

BaseContainerEditPart :所有父模型的基础类。作用和BaseContainerModel类似,都是为了处理父子结构。
注意:覆盖了getModelChildren()方法。

DiagramEditPart :DiagramModel对应的EditPart。
RectEditPart :RectModel对应的EditPart。

DiagramEditPartFactory :通过model得知应该创建哪种对应的EditPart。就和jface.TableView一样,知道通过model得到TableItem。和jface.TreeViewer一样,通过model知道生成TreeItem一样的功效。只是在GEF中model和EditPart过多,需要一个工厂类专门处理,而TableViewer和TreeViewer则不需要。

五. 创建EditPart对应的Figure


IBaseFigure :为了后面能方便获得模型而做的接口。
DiagramFigure :与DiagramEditPart对应。
RectFigure :与RectEditPart对应。


六. 在ViewPart中创建GraphicalViewer

 

graphicalViewer = new ScrollingGraphicalViewer();
graphicalViewer.createControl(bottomComposite);

graphicalViewer.setRootEditPart(new ScalableRootEditPart());
graphicalViewer.setEditPartFactory(new DiagramEditPartFactory());

graphicalViewer.setContents(this.buildModel());

 

代码很简洁,没有做任何多余的事情,先create一个GraphicalViewer,在赋予一个Root的EditPart,再指定EditPartFactory,最后,将构建的模型放入GraphicalViewer中。

七. 启动,查看运行效果


注意:

  1. 第一个灰边框:ViewPart的。
  2. 第二个黑边框:DiagramModel对应的DiagramFigure的。
  3. 第三个小框:RestModel对应的RestFigure的。


八. 总结
1. 写的非常简洁,没有Command,没有EditPolicy,没有多余的属性和方法,就基本将一个GEF的项目搭建出来了,完全可以作为通用的GEF框架。当然,前提是纯粹的GEF,而不是EMF,GMF等。
2. GEF中有些概念一定要搞清楚:

  1. PropertyChangeSupport和PropertyChangeListener
  2. Model与EditPart与Figure的一对一
  3. Model、EditPart与EditPartFactory
  4. EditPart与Figure
  5. Root的model(本文中的DiagramModel)
  6. RootEditPart

3. 本文基于Eclipse3.4
4. 后续文章会跟进的,尽量做成一个入门的系列。但是还是需要你能够预先知晓一些GEF的基本概念。并要明白model的变化是如果传递,并最终显示到UI界面的Figure上的。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值