- 浏览: 115098 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
stringsdn:
不懂 你在加载前判断没有404 到加载后是404怎么半
Android WebView处理404等错误 -
zxjlwt:
学习了。http://surenpi.com
如何在console中加入文件连接 -
endison1111:
碰到了同样的问题,使用多页面MultiPage后,切换标签ou ...
Eclipse Multipage Page编辑器同步实践——OutlinePage -
Just2005:
已解决。谢谢。
GMF中控制Figure的大小和位置 -
Just2005:
源码呢 ?
GMF中控制Figure的大小和位置
GMF默认生成的outline很成问题,只能显示top level的图形,比如在logic例子中,画板中图形元素和outline对应如下:
可见非top level的图形并没有与之对应的Tree Item显示在outline tree上。
其实用过gef的人都很容易知道原因,因为outline上每一个节点对应的也是一个tree editpart,每个tree editpart复用对应画板图形元素相同的数据模型。因此很显然,GMF生成的outline 和TreeEditPart并不能满足具体应用的需求,用户需要自己订制每个图形元素对应的outline 元素,也就是为每个图形元素实现一个TreeEditPart。
如何定制outlinepage:
在LogicNotationEditor中重载方法getOutlineViewEditPartFactory(),不过要注意的是这个方法在gmf1.0.1之后再加入DiagramEditor中,在gmf1.0.0里面没有这个方法,由于DiagramEditor中的内部类DiagramOutlinePage是友好的,无法继承,所以要想在gmf1.0.0中定制自己的outline就只能重写自己的outline page类了。
protected EditPartFactory getOutlineViewEditPartFactory() {
return new EditPartFactory() {
public EditPart createEditPart(EditPart context, Object model) {
if (model instanceof Diagram) {
return new LogicDiagramTreeEditPart(model);
} else {
return this.getRightTreeEditPart(model);
}
}
private TreeEditPart getRightTreeEditPart(Object view) {
if(view instanceof Node &&
((Node) view).getElement() instanceof ContainerElement) {
return new LogicContainerTreeEditPart(view);
}
return new LogicChildTreeEditPart(view);
}
};
}
return new EditPartFactory() {
public EditPart createEditPart(EditPart context, Object model) {
if (model instanceof Diagram) {
return new LogicDiagramTreeEditPart(model);
} else {
return this.getRightTreeEditPart(model);
}
}
private TreeEditPart getRightTreeEditPart(Object view) {
if(view instanceof Node &&
((Node) view).getElement() instanceof ContainerElement) {
return new LogicContainerTreeEditPart(view);
}
return new LogicChildTreeEditPart(view);
}
};
}
LogicDiagramTreeEditPart.java
public class LogicDiagramTreeEditPart extends TreeDiagramEditPart{
public LogicDiagramTreeEditPart(Object model) {
super(model);
// TODO Auto-generated constructor stub
}
@Override
protected Image getImage() {
return LogicDiagramPlugin.getInstance().getBundledImage("icons/logic.gif");
}
@Override
protected String getText() {
return "Logic Diagram";
}
}
public LogicDiagramTreeEditPart(Object model) {
super(model);
// TODO Auto-generated constructor stub
}
@Override
protected Image getImage() {
return LogicDiagramPlugin.getInstance().getBundledImage("icons/logic.gif");
}
@Override
protected String getText() {
return "Logic Diagram";
}
}
LogicContainerTreeEditPart.java
public class LogicContainerTreeEditPart extends TreeContainerEditPart {
public LogicContainerTreeEditPart(Object model) {
super(model);
// TODO Auto-generated constructor stub
}
@Override
protected List getModelChildren() {
List children = ((View) this.getModel()).getChildren();
return children;
}
@Override
protected Image getImage() {
String path = "icons/logic.gif";
String type = getType();
if("circuit".equalsIgnoreCase(type)) {
path = "icons/circuit16.gif";
}
if("FlowContainer".equalsIgnoreCase(type)) {
path = "icons/logicflow16.gif";
}
return LogicDiagramPlugin.getInstance().getBundledImage(path);
}
@Override
protected String getText() {
// TODO Auto-generated method stub
return ((View) this.getModel()).getType();
}
private String getType() {
return ((View) getModel()).getType();
}
}
public LogicContainerTreeEditPart(Object model) {
super(model);
// TODO Auto-generated constructor stub
}
@Override
protected List getModelChildren() {
List children = ((View) this.getModel()).getChildren();
return children;
}
@Override
protected Image getImage() {
String path = "icons/logic.gif";
String type = getType();
if("circuit".equalsIgnoreCase(type)) {
path = "icons/circuit16.gif";
}
if("FlowContainer".equalsIgnoreCase(type)) {
path = "icons/logicflow16.gif";
}
return LogicDiagramPlugin.getInstance().getBundledImage(path);
}
@Override
protected String getText() {
// TODO Auto-generated method stub
return ((View) this.getModel()).getType();
}
private String getType() {
return ((View) getModel()).getType();
}
}
LogicChildTreeEditPart.java
public class LogicChildTreeEditPart extends TreeEditPart {
public LogicChildTreeEditPart(Object model) {
super(model);
// TODO Auto-generated constructor stub
}
@Override
protected Image getImage() {
String path = "icons/logic.gif";
String type = getType();
if("LED".equalsIgnoreCase(type)) {
path = "icons/ledicon16.gif";
}
if("AndGate".equalsIgnoreCase(type)) {
path = "icons/and16.gif";
}
if("OrGate".equalsIgnoreCase(type)) {
path = "icons/or16.gif";
}
if("XorGate".equalsIgnoreCase(type)) {
path = "icons/xor16.gif";
}
return LogicDiagramPlugin.getInstance().getBundledImage(path);
}
@Override
protected String getText() {
// TODO Auto-generated method stub
return ((View) this.getModel()).getType();
}
private String getType() {
return ((View) getModel()).getType();
}
}
public LogicChildTreeEditPart(Object model) {
super(model);
// TODO Auto-generated constructor stub
}
@Override
protected Image getImage() {
String path = "icons/logic.gif";
String type = getType();
if("LED".equalsIgnoreCase(type)) {
path = "icons/ledicon16.gif";
}
if("AndGate".equalsIgnoreCase(type)) {
path = "icons/and16.gif";
}
if("OrGate".equalsIgnoreCase(type)) {
path = "icons/or16.gif";
}
if("XorGate".equalsIgnoreCase(type)) {
path = "icons/xor16.gif";
}
return LogicDiagramPlugin.getInstance().getBundledImage(path);
}
@Override
protected String getText() {
// TODO Auto-generated method stub
return ((View) this.getModel()).getType();
}
private String getType() {
return ((View) getModel()).getType();
}
}
在LogicDiagramPlugin里面加入如下代码,主要用于获取icon image
public static ImageDescriptor getBundledImageDescriptor(String path) {
return AbstractUIPlugin.imageDescriptorFromPlugin("org.eclipse.gmf.examples.runtime.diagram.logic", path);
}
public Image getBundledImage(String path) {
Image image = getImageRegistry().get(path);
if (image == null) {
getImageRegistry().put(path, getBundledImageDescriptor(path));
image = getImageRegistry().get(path);
}
return image;
}
return AbstractUIPlugin.imageDescriptorFromPlugin("org.eclipse.gmf.examples.runtime.diagram.logic", path);
}
public Image getBundledImage(String path) {
Image image = getImageRegistry().get(path);
if (image == null) {
getImageRegistry().put(path, getBundledImageDescriptor(path));
image = getImageRegistry().get(path);
}
return image;
}
经过改进后的logic diagram outline page:
发表评论
-
向console中加入文件链接
2010-01-24 22:11 883之前写过一篇文章大概讲了向console中加入文件链接的原理, ... -
如何在console中加入文件连接
2010-01-17 10:59 957使用eclipse的人都知道,在console中打印的异常st ... -
Eclipse Multipage Page编辑器同步实践——PropertyPage
2009-12-20 17:08 1521在MultipageEditor应用中属性页(Property ... -
Eclipse Multipage Page编辑器同步实践——OutlinePage
2009-12-13 14:30 2138最近做个IDE的项目,要将文本编辑器和机遇gef的图形编辑器集 ... -
Run configure方式运行RCP与导出后运行RCP的差异
2009-11-22 21:21 1202前几天开发RCP应用过程中遇到了一个问题(其实也是经常遇到的问 ... -
启用EMF的自动生成UUID功能
2009-11-16 21:54 924原文:http://www.cnblogs.com/bjzha ... -
eclipse对于View的操作
2009-11-11 22:10 1576几个常用的关于View的操作: 1. findView I ... -
emf开发笔记
2009-11-07 11:17 1055原文:http://macrochen.iteye ... -
Draw2D 教程(四)(五)(六)
2009-11-01 15:25 1810原文: http://dev.csdn.net/autho ... -
Draw2D 教程(三)
2009-11-01 15:22 1927原文:http://dev.csdn.net/au ... -
Draw2D教程(二)
2009-11-01 15:21 2996原文:http://dev.csdn.net/aut ... -
Draw2d 教程(一)
2009-11-01 15:19 1556原文:http://dev.csdn.net/aut ... -
Eclipse应用如何获得runtime project的路径
2009-10-29 15:01 1366最近基于gef/emf开发一个图形化工具,用于设计手机屏幕。在 ... -
Eclipse - a tale of two VMs (and many classloaders)
2009-08-02 10:09 877原文地址:http://www.eclipsezone.com ... -
SWT中嵌入Swing
2009-07-20 15:15 2679原文地址:http://blog.sina.com.cn/s/ ... -
给eclipse viewer增加拖拽支持
2009-07-19 19:48 4262在jface中的viewer体系中(顶层抽象类org.ecli ... -
Eclipse开发中使用资源文件
2009-07-13 09:28 728在开发eclipse插件时,经常用到一些字符串常量,比如定义菜 ... -
eclipse中如何打开一个编辑器
2008-11-25 21:21 2129eclipse中打开一个编辑器要调用 IWorkbenchPa ... -
发现一个jet2的bug
2008-01-30 21:30 878最近在做一个代码生成 ... -
jet2的一些学习笔记(1)
2008-02-15 21:40 924jet的input model和模板集合的关系好比语言和co ...
相关推荐
在GMF 1.7版本中,可能包含以下改进: - **性能优化**:对图形渲染和编辑操作进行了优化,提高了响应速度和整体性能。 - **新功能引入**:可能新增了一些特性,如更丰富的图元库,或者对EMF模型的高级支持。 - **...
- 在实际项目中,GMF可以帮助开发人员构建定制化的模型编辑环境,提高生产力。 通过深入研究GMF ѧϰ和GMF 学习这两个文件,你将能够掌握GMF的基本概念,理解其工作原理,并具备使用GMF创建自己的图形编辑器的能力...
本文将深入探讨GMF中的RAR(Runtime Architecture Resource)组件,以及其在模型驱动开发中的关键作用。 首先,我们需要理解RAR的含义。"org.eclipse.gmf.rar"是Eclipse GMF运行时架构资源的标识符,它是GMF的核心...
9. **源码分析**:深入研究这个例子的源码,不仅可以学习GMF的使用方法,还可以了解如何将EMF和GEF结合,以及如何处理图形交互事件,这对于开发自己的图形化工具非常有帮助。 10. **社区支持**:由于GMF是开源项目...
- 在Eclipse中,通过`File` > `New` > `Project`,选择`New GMF Project`,创建名为`org.eclipse.gmf.examples.mindmap`的项目。 - 在创建项目时,可以选择显示Dashboard视图,便于后续操作。 2. **导入模型文件*...
GMF是Eclipse Modeling Framework (EMF)的扩展,用于构建可定制的、高效的图形编辑器。EMF提供了一种模型到代码的生成机制,而GMF则专注于生成图形用户界面,使得开发人员能够专注于业务逻辑,而不是底层UI实现。 ...
GMF区分了"toolsmith"(使用GMF构建插件的开发者)和"user"(使用这些插件的开发者),并强调在透视图中,GMF应尽可能隐藏内部模型的复杂性。 教程还涉及了GMF的核心组成部分——概念模型和工具定义模型。概念模型...
通过深入研究和重构Taipan,读者可以逐步熟悉GMF的API,理解其设计理念,并掌握如何使用GMF创建自己的图形化编辑器。这样的实践不仅有助于学习GMF本身,也为理解和应用EMF和GEF提供了宝贵的经验。
- **模型驱动的开发**:GMF提供了一整套模型驱动的开发环境,允许开发者通过图形界面定制自己的领域模型。开发者可以定义模型中的元素类型、关系以及其他特性,然后基于这个模型自动生产出相应的代码。这种方式极大...
通过重构Taipan应用程序或插件,开发者不仅可以掌握GMF的基本操作,还能探索其高级特性,如动态模型更新、定制编辑行为和扩展图形元素。 #### 结论:GMF——图形化编辑器的未来 GMF的出现极大地推动了图形化编辑器...
在地图制作方面,GMF提供了丰富的符号库和颜色表,可以根据需要定制地图的外观。学习如何使用`gmt makecpt`创建自定义颜色表,以及`gmt psimage`和`gmt psscale`等命令添加图像和比例尺,能够提升地图的专业性。 ...
通过理解并熟练运用GMF,你可以构建出高度定制化的、专业级的建模工具,满足各种复杂的软件设计需求。在实际工作中,结合Eclipse的其他工具和插件,如EMF和Tycho,可以构建出完整的MDE(Model Driven Engineering)...
【标题】:“一个简单的GMF实例” 在IT领域,GMF(Graphical Modeling Framework)是Eclipse项目的一部分,主要用于创建...通过阅读博文和研究提供的源码,可以深入理解GMF的工作原理,并能够将其应用到自己的项目中。
本文档将通过一个详细的案例来介绍如何使用GMF来开发一个FSM(Finite State Machine,有限状态机)图形编辑器,从而教会读者如何为自己定制化的建模工具开发图形界面。 #### 了解 GMF 的机制与流程 在深入学习如何...
- **GMF**作为一个强大的框架,提供了创建高度定制化的图形化用户界面的能力,特别适用于开发复杂的数据可视化应用或建模工具。 - **EMF**是一个用于构建模型驱动的应用程序的基础框架,支持模型的定义、实例化以及...
在Eclipse中,GEF(Graphical Editing Framework)、VE(Visual Editor)和GMF(Graphical Modeling Framework)是三个重要的插件或框架,主要用于图形化界面设计和建模。 1. GEF(Graphical Editing Framework) ...
- **启动GMF项目:** 在Eclipse中设置一个新的GMF项目是整个开发流程的第一步。 - **GMF Dashboard:** 创建新项目后,会显示GMF Dashboard(图1),它将指导用户完成整个开发过程,并成为主要的交互界面。 ##### ...
"gmf.edit"部分主要涉及到GMF中的编辑功能。在GMF中,编辑模块允许用户对地图数据进行增删改查操作。这包括添加新的地理对象,删除现有对象,修改对象属性,以及连接和断开对象之间的关系。编辑功能通常与图层的概念...