eclipsegef:[Eclipse]GEF入门系列( 2、GEF概述)来源: 发布时间:星期四, 2009年1月8日 浏览:105次 评论:0
在前面帖子已经提到GEF(Graphical Editor Framework)是个图形化编辑框架它允许开发人员以图形化方式展示和编辑模型从而提升用户体验这样应用有很多例如:UML类图编辑器、图形化XML编辑器、界面设计工具以及图形化数据库结构设计工具等等归结下可以发现它们在图形化编辑方面具有以下共同的处:
提供个编辑区域和个工具条用户在工具条里选择需要工具以拖动或单击方式将节点或连接放置在编辑区域; 节点可以包含子节点; 用户能够查看和修改某个节点或连接大部分属性; 连接端点锚定在节点上; 提供上下文菜单和键盘命令; 提供图形缩放功能; 提供个大纲视图显示编辑区域缩略图或是树状模型结构; 支持撤消/重做功能; 等等 图3 EditPart对象 用户编辑操作被转换为系列请求(Request)有很多种类请求这些种类在GEF里被称为角色(Role)GEF里有图形化和非图形化这两大类角色前者比如Layout Role对应和布局有关操作后者比如Connection Role对应和连接有关操作等等角色这个概念是通过编辑策略(EditPolicy)来实现EditPolicy主要功能是根据请求创建相应命令(Command)而后者会直接操作模型对象对每个EditPart你都可以"安装"些EditPolicy用户对这个EditPart特定操作会被交给已安装对应EditPolicy处理这样做直接好处是可以在区别EditPart的间共享些重复操作 在GEF SDK提供帮助文档(GEF开发指南)里有份详细EditPolicy、Role和Request类型列表这里就不赘述了 视图:前面说过GEF视图可以有很多种GEF目前提供了图形(GraphicalViewer)和树状(TreeViewer)这两种前者利用Draw2D图形(IFigure)作为表现方式多用于编辑区域后者则多用于实现大纲展示视图任务同样繁重除了模型显示功能以外还要提供编辑功能、回显(Feedback)、工具提示(ToolTip)等等 GEF使用EditPartViewer作为视图它作用和JFace中Viewer十分类似而EditPart就相当于是它ContentProvider和LabelProvider通过Contents思路方法来指定我们经常使用Editor是个GraphicalEditorWithPalette(GEF提供Editor是EditorPart子类具有图形化编辑区域和个工具条)这个Editor使用GraphicalEditViewer和PaletteViewer这两个视图类PaletteViewer也是GraphicalEditViewer子类开发人员要在configureGraphicalViewer和initializeGraphicalViewer这两个思路方法里对EditPartViewer进行定制包括指定它contents和EditPartFactory等等 EditPartViewer同时也是ISelectionProvider这样当用户在编辑区域做选择操作时注册SelectionChangeListener就可以收到选择事件EditPartViewer会维护各个EditPart选中状态如果没有被选中EditPart则缺省选中是作为contentsEditPart 初步了解了GEFMVC实现方式让我们看看典型GEF应用是什么样子大部分GEF应用都实现为EclipseEditor也就是说整个编辑区域是放置在个Editor里所以典型GEF应用具有个图形编辑区域包含在个Editor(例如GraphicalEditorWithPalette)里可能有个大纲视图和个属性页个用于创建EditPart例子EditPartFactory些表示业务模型对象和模型对象对应些EditPart每个EditPart对应个IFigure子类对象显示给用户些EditPolicy对象以及些Command对象 GEF应用工作方式如下: EditPartViewer接受用户操作例如节点选择、新增或删除等等每个节点都对应个EditPart对象这个对象有组按操作Role分开EditPolicy每个EditPolicy会对应些Command对象Command最终对模型进行直接修改用户操作转换为Request分配给适当EditPolicy由后者创建适当Command来修改模型这些Command会保留在EditDo(专门用于维护EditPartViewer、Command等信息对象般每个Editor对应唯个该对象)命令堆栈里用于实现撤消/重做功能 以上介绍了GEF中些比较重要概念不知道看过的后你是否对它有了个大概印象如果没有也没关系在后面帖子里将会有结合例子讲解我们使用例子就是序言里提到第 6个项目 0
相关文章
读者评论发表评论 |