`
gdwrx_winson
  • 浏览: 131631 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论
阅读更多
转自 http://blog.csdn.net/wu_07/archive/2009/06/15/4271423.aspx GMF 经验点滴积累(一) 收藏 1、修改Connection的默认路由(Router)风格(默认的初始风格为oblique)。 覆盖DiagramConnectionsPreferencePage的initDefaults方法: view plaincopy to clipboardprint? public static void initDefaults(IPreferenceStore preferenceStore) { preferenceStore.setDefault(IPreferenceConstants.PREF_LINE_STYLE, Routing.RECTILINEAR); } 2、选中子图形的同时选中父图形(为了能拖动子图形时,父图形也被拖动),这种方法有一个问题,即因为同时选择中了两个对象,因此属性页中无法对子图形的属性进行编辑,需要修改属性分区(*PropertySection )的setInput代码。 父图形EditPart: view plaincopy to clipboardprint? /** * @generated NOT */ protected LayoutEditPolicy createLayoutEditPolicy() { FlowLayoutEditPolicy lep = new FlowLayoutEditPolicy() { @Override protected Command createAddCommand(EditPart child, EditPart after) { // TODO Auto-generated method stub return null; } @Override protected Command createMoveChildCommand(EditPart child, EditPart after) { // TODO Auto-generated method stub return null; } @Override protected Command getCreateCommand(CreateRequest request) { // TODO Auto-generated method stub return null; } @Override protected EditPolicy createChildEditPolicy(EditPart child) { if (child instanceof ShapeEditPart) { return ((ShapeEditPart) child).getPrimaryDragEditPolicy(); } NonResizableEditPolicy policy = (NonResizableEditPolicy) super .createChildEditPolicy(child); // disable drag functionality policy.setDragAllowed(false); return policy; } }; return lep; } 子图形EditPart: view plaincopy to clipboardprint? /** * @generated NOT */ public EditPolicy getPrimaryDragEditPolicy() { return new NonResizableEditPolicy() { protected void showSelection(){ super.showSelection(); IWorkbenchPart wp=PlatformUI.getWorkbench(). getActiveWorkbenchWindow().getActivePage().getActivePart(); if (wp instanceof IDiagramWorkbenchPart) { IDiagramWorkbenchPart diagramPart=(IDiagramWorkbenchPart)wp; diagramPart.getDiagramGraphicalViewer().appendSelection(getHost().getParent()); } } } ; } 另外变通的方法,即拖动子图形的时候拖动父图形,但这种方法无法选择中子图形: view plaincopy to clipboardprint? //In the child Edit part add: @Override public DragTracker getDragTracker(Request request) { return getParent().getDragTracker(request); } 3、修改自动布局(Arrange All、Arrange Selection)方式 默认的自动布局方式是从上到下,其Provider为TopDownProvider,如果我们需要修改为其他或自定义的布局方式,如从左到右的布局方式,可以采用定义扩展和修改代码两种方式: (1)定义扩展(extensions),注意这里的Priority不能为Lowest view plaincopy to clipboardprint? <extension point="org.eclipse.gmf.runtime.diagram.ui.layoutProviders"><layoutprovider class="org.eclipse.gmf.runtime.diagram.ui.providers.LeftRightProvider"><priority name="Low"></priority></layoutprovider></extension> (2)代码硬编程,主要方法为在??DiagramEditPart中覆盖安装EditPolicy.CONTAINER_ROLE ,这里参考了Gmf例子taipan中的PortEditPart相关代码 view plaincopy to clipboardprint? private LeftRightProvider layoutProvider = new LeftRightProvider(); protected void createDefaultEditPolicies() { super.createDefaultEditPolicies(); installEditPolicy(EditPolicyRoles.SEMANTIC_ROLE, new DFDDiagramItemSemanticEditPolicy()); installEditPolicy(EditPolicyRoles.CANONICAL_ROLE, new DFDDiagramCanonicalEditPolicy()); installEditPolicy(EditPolicy.CONTAINER_ROLE, new ContainerEditPolicy() { protected Command getArrangeCommand(ArrangeRequest request) { // DeferredCommand is patched to arrange all children when no viewAdapters is specified if (RequestConstants.REQ_ARRANGE_DEFERRED.equals(request.getType())) { String layoutType = request.getLayoutType(); TransactionalEditingDomain editingDomain = ((IGraphicalEditPart) getHost()).getEditingDomain(); return new ICommandProxy(new DeferredLayoutCommand(editingDomain, request.getViewAdaptersToArrange(), (IGraphicalEditPart) getHost(), layoutType) { @Override protected CommandResult doExecuteWithResult(IProgressMonitor progressMonitor, IAdaptable info) throws ExecutionException { if (viewAdapters == null || viewAdapters.isEmpty()) { viewAdapters = new ArrayList(DFDDiagramEditPart.this.getChildren()); } return super.doExecuteWithResult(progressMonitor, info); } }); } // Snap to grid command is stripped off to prevent loops String layoutDesc = request.getLayoutType() != null ? request.getLayoutType() : LayoutType.DEFAULT; boolean offsetFromBoundingBox = false; List editparts = new ArrayList(); if ((ActionIds.ACTION_ARRANGE_ALL.equals(request.getType())) || (ActionIds.ACTION_TOOLBAR_ARRANGE_ALL.equals(request.getType()))) { editparts = ((IGraphicalEditPart) getHost()).getChildren(); request.setPartsToArrange(editparts); } if ((ActionIds.ACTION_ARRANGE_SELECTION.equals(request.getType())) || (ActionIds.ACTION_TOOLBAR_ARRANGE_SELECTION.equals(request.getType()))) { editparts = request.getPartsToArrange(); if (!(((GraphicalEditPart) ((EditPart) editparts.get(0)).getParent()).getContentPane().getLayoutManager() instanceof XYLayout)) { return null; } offsetFromBoundingBox = true; } if (RequestConstants.REQ_ARRANGE_RADIAL.equals(request.getType())) { editparts = request.getPartsToArrange(); offsetFromBoundingBox = true; layoutDesc = LayoutType.RADIAL; } if (editparts.isEmpty()) { return null; } List nodes = new ArrayList(editparts.size()); ListIterator li = editparts.listIterator(); while (li.hasNext()) { IGraphicalEditPart ep = (IGraphicalEditPart) li.next(); View view = ep.getNotationView(); if (ep.isActive() && view != null && view instanceof Node) { Rectangle bounds = ep.getFigure().getBounds(); nodes.add(new LayoutNode((Node) view, bounds.width, bounds.height)); } } if (nodes.isEmpty()) { return null; } List hints = new ArrayList(2); hints.add(layoutDesc); hints.add(getHost()); IAdaptable layoutHint = new ObjectAdapter(hints); Runnable layoutRun = layoutNodes(nodes, offsetFromBoundingBox, layoutHint); return ((IInternalLayoutRunnable) layoutRun).getCommand(); } public Runnable layoutNodes(List nodes, boolean offsetFromBoundingBox, IAdaptable layoutHint) { return layoutProvider.layoutLayoutNodes(nodes, offsetFromBoundingBox, layoutHint); } }); // removeEditPolicy(org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles.POPUPBAR_ROLE); } 4、通过设置WorkspaceViewerPreference,设定默认打印题头和显示页面分割线 view plaincopy to clipboardprint? /** * class ??DiagramEditorUtil * @generated NOT */ public static boolean openDiagram(Resource diagram) throws PartInitException { IWorkbenchPage page = PlatformUI.getWorkbench() .getActiveWorkbenchWindow().getActivePage(); DiagramEditor editor = (DiagramEditor) page.openEditor(new URIEditorInput(diagram.getURI()), DfdDiagramEditor.ID); //打开编辑器后设定WorkspaceViewerPreference,包括是否打印题头和显示页面分割符 IPreferenceStore preferences; preferences =editor.getWorkspaceViewerPreferenceStore(); preferences.setValue(WorkspaceViewerProperties.HEADER_PREFIX+WorkspaceViewerProperties.PRINT_TITLE_SUFFIX, true); preferences.setValue(WorkspaceViewerProperties.VIEWPAGEBREAKS,true); // preferences.setValue(WorkspaceViewerProperties.HEADER_PREFIX+WorkspaceViewerProperties.PRINT_TEXT_SUFFIX, // getPartName()); return true; } 5、以代码方式触发ARRANGE_ALL action view plaincopy to clipboardprint? IGraphicalEditPart rp = (IGraphicalEditPart) editor .getDiagramGraphicalViewer().getContents(); try { ArrangeRequest arrangeRequest = new ArrangeRequest( ActionIds.ACTION_ARRANGE_ALL); List l = rp.getChildren(); arrangeRequest.setPartsToArrange(l); Command arrangeCmd = rp.getCommand(arrangeRequest); arrangeCmd.execute(); //System.out.println("ARRANGEAll"); } catch (Exception e) { e.printStackTrace(); }
分享到:
评论

相关推荐

    org.eclipse.gmf.rar

    《深入解析Eclipse GMF RAR技术》 在软件开发领域,Eclipse是一个广泛使用的集成开发环境(IDE),而GMF(Graphical Modeling Framework)则是Eclipse社区提供的一款强大的图形建模框架。本文将深入探讨GMF中的RAR...

    gmf 1.7 最新版的gmf

    GMF(Generic Model Framework)是Eclipse平台下的一款强大的图形建模框架,它为开发者提供了构建图形用户界面(GUI)的工具,特别是用于创建复杂的图形编辑器和图表应用程序。GMF 1.7是最新的版本,它在前一版本的...

    GMF教程.doc

    【GMF教程】GMF(Graphics Modeling Framework)是Eclipse平台下的一个图形建模框架,用于构建基于模型的图形编辑工具。本教程是基于英文教程的实践与翻译,旨在帮助读者理解并掌握如何使用GMF创建一个Mindmap编辑器...

    GMF Tutorial中文版

    【GMF Tutorial中文版】是一套面向初学者的Eclipse GMF(Graphical Modeling Framework)入门教程。GMF是Eclipse建模项目的一个子项目,它的主要目标是为Eclipse Modeling Framework (EMF)和Graphical Editing ...

    15 分钟学会 Eclipse GMF

    Eclipse GMF(Graphics Modeling Framework)是Eclipse平台下的一个开源工具,用于构建图形化建模和编辑环境。本教程将带你快速掌握Eclipse GMF的核心概念和使用方法,让你在15分钟内对GMF有初步的认识。 一、...

    GMF数据表建模例子

    GMF(Generic Modeling Framework)是Eclipse平台下的一个开源项目,它为开发可扩展的图形化建模工具提供了基础框架。这个"GMF数据表建模例子"显然是一个利用GMF构建的数据库设计工具,可以帮助用户以图形化的方式...

    GMF实例解析(PDF版)

    ### GMF实例解析:Taipan案例深度剖析 #### 前言:GMF与图形化编辑器的革新 在IT领域,特别是软件工程中,图形化编辑器的开发一直是复杂且具有挑战性的任务。传统的图形编辑器开发往往依赖于MVC(Model-View-...

    GMF实例解析.pdf

    【GMF实例解析】 GMF,全称是Graphical Modeling Framework,是Eclipse建模项目中的一个重要组成部分,它建立在GEF(Graphical Editor Framework)和EMF(Eclipse Modeling Framework)之上,为开发基于图形界面的...

    GMF Tourial中文版(一)

    ### GMF Tourial中文版(一)核心知识点详解 #### 一、引言与背景介绍 **GMF Tourial**是一系列针对Eclipse平台下的**图形化模型框架(Graphical Modeling Framework, GMF)**的教程。该框架作为Eclipse建模项目的一...

    图形建模框架GMF综述

    ### 图形建模框架GMF综述 #### 引言 在软件开发过程中,图形建模作为一种有效的沟通手段,帮助工程师们清晰地表达系统结构、流程逻辑和其他关键要素。传统上,开发人员依赖如Rational Rose或Sybase PowerDesigner...

    eclipse gef ve gmf

    在Eclipse中,GEF(Graphical Editing Framework)、VE(Visual Editor)和GMF(Graphical Modeling Framework)是三个重要的插件或框架,主要用于图形化界面设计和建模。 1. GEF(Graphical Editing Framework) ...

    GMF开发FSM的完整的例子

    ### GMF 开发 FSM 的完整实例解析 #### 引言 GMF(Graphical Modeling Framework)是Eclipse项目的一部分,它提供了一套完整的工具和框架用于创建图形化编辑器,帮助开发者快速构建复杂的模型编辑器。本文档将通过...

    gmf-runtime-2.1.2.zip

    GMF(Graphical Modeling Framework)是Eclipse基金会推出的一个开源项目,主要用于构建图形化建模工具。这个"gmf-runtime-2.1.2.zip"压缩包文件包含了Eclipse图形化开发插件GMF的运行时组件,版本为2.1.2。此插件...

    一个简单的GMF实例

    【标题】:“一个简单的GMF实例” 在IT领域,GMF(Graphical Modeling Framework)是Eclipse项目的一部分,主要用于创建图形化编辑器。这个“一个简单的GMF实例”可能是一个教程或者示例项目,旨在帮助开发者理解...

    GMF03x数据手册_V1.01

    《GMF03x数据手册_V1.01》是一份详细的技术文档,由深圳市汇顶科技股份有限公司发布,主要用于介绍其GMF03x系列芯片的相关特性、应用场景、型号规格以及内部架构。以下是对这份手册内容的深入解析: 1. **产品特性*...

    GMF EMF

    GMF(Generic Modeling Framework)是Eclipse Modeling Framework (EMF)的一个扩展,它提供了一种通用的方法来构建基于模型的应用程序。GMF旨在简化图形用户界面(GUI)的开发,特别是那些涉及图表编辑和可视化任务...

    eclipse GMF 制作简单工作流流程设计器(3)

    标题 "Eclipse GMF 制作简单工作流流程设计器(3)" 暗示了这是一个关于使用Eclipse Graphical Modeling Framework (GMF) 创建工作流流程设计工具的系列教程的第三部分。GMF是Eclipse平台上的一个开源项目,它提供了一...

    Eclipse插件 GMF

    Eclipse插件GMF,全称为Graphical Modeling Framework,是Eclipse平台上的一个重要组成部分,主要用于构建可视化的建模工具。这个框架提供了一种强大的方式,让开发者能够创建出具有图形界面的模型编辑器,用于设计...

Global site tag (gtag.js) - Google Analytics