- 浏览: 131631 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
jingjieyiman:
引用
[url][/url][flash=200,200][ ...
Java 学习入门到高深 -
Technoboy:
...
AOP 的利器:ASM 3.0 介绍 -
kingkan:
非常支持,我有意愿加入。。。如果可以,请给我短消息,je我每天 ...
【征集】做一个管理人际关系的应用 -
夜之son:
csuzm0613 写道能否直接做成Android应用程序呢? ...
【征集】做一个管理人际关系的应用 -
gdwrx_winson:
谢谢异常哥的回复,目前的想法是做成一个web应用抛出异常的爱 ...
【征集】做一个管理人际关系的应用
转自 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();
}
发表评论
-
暂存的多少钱
2010-08-20 15:34 940与配置管理工具集成 企业级大型项目,往往需要可靠稳 ... -
获取Eclipse平台插件路径
2010-04-19 19:26 1568很多时候,我们需要获取Eclipse平台中相关插件的信息,如位 ... -
Object CLass
2010-03-10 11:01 903Eclipse 中扩展点可能会需要Object Class的东 ... -
Eclipse Preferences 扩展点
2010-02-25 11:29 1002Preferences in the Eclipse Work ... -
Nature
2010-02-24 13:50 1533Nature和Builder的使用介绍 http://liu ... -
Mylyn简介
2010-02-21 17:46 1841Mylyn简介——一个不错的eclipse工具 ... -
GMF context 菜单工具栏
2010-01-06 20:14 1395转自http://blog.csdn.net/wu_07/ar ... -
RCP构建
2009-11-29 20:02 919转自http://blog.csdn.net/xiaoxi ... -
Eclipse Nebula 部件入门2
2009-11-24 23:51 2087Eclipse Nebula 部件入门 Ec ... -
Eclipse Nebula 部件入门1
2009-11-24 23:49 1840转自https://www6.software ... -
Eclipse Nebula 部件入门
2009-11-24 23:47 2138转自https://www6.software.ibm.com ... -
SWT自定义组件之Slider
2009-11-24 00:10 1142转自http://www.blogjava.net/javag ... -
用SWT实现MSN风格的下拉框
2009-11-24 00:08 1048转自http://www.blogjava.net/j ... -
SWT控件的CompositeSize
2009-11-23 16:37 957在Window上所有的元件都是用畫出來的,所以redraw的觀 ... -
自定义控件资料
2009-11-23 12:42 844Eclipse官网对自定义控件 http://www.ecl ... -
开发Eclipse自定义控件
2009-11-23 12:40 903转自 http://www.ibm.com/developer ... -
GMF同一模型,多个Editor
2009-11-12 09:00 790转自http://yiliner.iteye.co ... -
Eclipse3.4版本以上打包
2009-11-11 18:22 1779我现在在编写一个JAVA工程,是提供给客户调用的API,但是我 ... -
RCP构建
2009-11-11 13:27 1148想分析插件对Eclipse本身插件的依赖,可以使用Deb ... -
Eclipse常见界面
2009-11-02 09:26 820Section的创建 Section input ...
相关推荐
《深入解析Eclipse GMF RAR技术》 在软件开发领域,Eclipse是一个广泛使用的集成开发环境(IDE),而GMF(Graphical Modeling Framework)则是Eclipse社区提供的一款强大的图形建模框架。本文将深入探讨GMF中的RAR...
GMF(Generic Model Framework)是Eclipse平台下的一款强大的图形建模框架,它为开发者提供了构建图形用户界面(GUI)的工具,特别是用于创建复杂的图形编辑器和图表应用程序。GMF 1.7是最新的版本,它在前一版本的...
【GMF教程】GMF(Graphics Modeling Framework)是Eclipse平台下的一个图形建模框架,用于构建基于模型的图形编辑工具。本教程是基于英文教程的实践与翻译,旨在帮助读者理解并掌握如何使用GMF创建一个Mindmap编辑器...
【GMF Tutorial中文版】是一套面向初学者的Eclipse GMF(Graphical Modeling Framework)入门教程。GMF是Eclipse建模项目的一个子项目,它的主要目标是为Eclipse Modeling Framework (EMF)和Graphical Editing ...
Eclipse GMF(Graphics Modeling Framework)是Eclipse平台下的一个开源工具,用于构建图形化建模和编辑环境。本教程将带你快速掌握Eclipse GMF的核心概念和使用方法,让你在15分钟内对GMF有初步的认识。 一、...
GMF(Generic Modeling Framework)是Eclipse平台下的一个开源项目,它为开发可扩展的图形化建模工具提供了基础框架。这个"GMF数据表建模例子"显然是一个利用GMF构建的数据库设计工具,可以帮助用户以图形化的方式...
### GMF实例解析:Taipan案例深度剖析 #### 前言:GMF与图形化编辑器的革新 在IT领域,特别是软件工程中,图形化编辑器的开发一直是复杂且具有挑战性的任务。传统的图形编辑器开发往往依赖于MVC(Model-View-...
【GMF实例解析】 GMF,全称是Graphical Modeling Framework,是Eclipse建模项目中的一个重要组成部分,它建立在GEF(Graphical Editor Framework)和EMF(Eclipse Modeling Framework)之上,为开发基于图形界面的...
### GMF Tourial中文版(一)核心知识点详解 #### 一、引言与背景介绍 **GMF Tourial**是一系列针对Eclipse平台下的**图形化模型框架(Graphical Modeling Framework, GMF)**的教程。该框架作为Eclipse建模项目的一...
### 图形建模框架GMF综述 #### 引言 在软件开发过程中,图形建模作为一种有效的沟通手段,帮助工程师们清晰地表达系统结构、流程逻辑和其他关键要素。传统上,开发人员依赖如Rational Rose或Sybase PowerDesigner...
在Eclipse中,GEF(Graphical Editing Framework)、VE(Visual Editor)和GMF(Graphical Modeling Framework)是三个重要的插件或框架,主要用于图形化界面设计和建模。 1. GEF(Graphical Editing Framework) ...
### GMF 开发 FSM 的完整实例解析 #### 引言 GMF(Graphical Modeling Framework)是Eclipse项目的一部分,它提供了一套完整的工具和框架用于创建图形化编辑器,帮助开发者快速构建复杂的模型编辑器。本文档将通过...
GMF(Graphical Modeling Framework)是Eclipse基金会推出的一个开源项目,主要用于构建图形化建模工具。这个"gmf-runtime-2.1.2.zip"压缩包文件包含了Eclipse图形化开发插件GMF的运行时组件,版本为2.1.2。此插件...
【标题】:“一个简单的GMF实例” 在IT领域,GMF(Graphical Modeling Framework)是Eclipse项目的一部分,主要用于创建图形化编辑器。这个“一个简单的GMF实例”可能是一个教程或者示例项目,旨在帮助开发者理解...
《GMF03x数据手册_V1.01》是一份详细的技术文档,由深圳市汇顶科技股份有限公司发布,主要用于介绍其GMF03x系列芯片的相关特性、应用场景、型号规格以及内部架构。以下是对这份手册内容的深入解析: 1. **产品特性*...
GMF(Generic Modeling Framework)是Eclipse Modeling Framework (EMF)的一个扩展,它提供了一种通用的方法来构建基于模型的应用程序。GMF旨在简化图形用户界面(GUI)的开发,特别是那些涉及图表编辑和可视化任务...
标题 "Eclipse GMF 制作简单工作流流程设计器(3)" 暗示了这是一个关于使用Eclipse Graphical Modeling Framework (GMF) 创建工作流流程设计工具的系列教程的第三部分。GMF是Eclipse平台上的一个开源项目,它提供了一...
Eclipse插件GMF,全称为Graphical Modeling Framework,是Eclipse平台上的一个重要组成部分,主要用于构建可视化的建模工具。这个框架提供了一种强大的方式,让开发者能够创建出具有图形界面的模型编辑器,用于设计...