- 浏览: 2477648 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (574)
- Book (62)
- Architecture (6)
- Java (39)
- Taobao (41)
- Distributed (4)
- Life (72)
- Database (7)
- Spring (16)
- Photography (15)
- Bicycle (41)
- Test (20)
- jBPM (8)
- Business (12)
- Movie (3)
- Ajax (15)
- Code (7)
- Eclipse (96)
- VIM (2)
- Music (6)
- Groovy (10)
- AutoHotKey (3)
- Dorado (10)
- Maven (7)
- Scrum (5)
- English (20)
- Financial (12)
- OSGi (3)
- Other (4)
- Tool (6)
- Browser (1)
- PPT (1)
- Project Management (4)
- Agile (6)
- Nosql (1)
- Search engine (6)
- Shell (2)
- Open Source (4)
- Storm (10)
- Guava (3)
- Baby (1)
- netty (1)
- Algorithm (1)
- Linux (1)
- Python (2)
最新评论
-
roy2011a:
https://github.com/ebottabi/sto ...
storm的序列化问题及与spring的结合方式 -
roy2011a:
能抗能打 写道哥们儿,你好!能共享下那个storm与sprin ...
storm的序列化问题及与spring的结合方式 -
Alick1:
兄弟,你之前是不是在深圳的正阳公司呆过啊?
storm的ack和fail -
liuleixwd:
先点个赞,写的非常好!有个问题请教下,如果我再bolt里不用e ...
storm的ack和fail -
yao-dd:
solr的facet查询
在EMF自动生成的editor中,只提供了TreeViewer作为编辑控件,自动生成的代码能让TreeViewer处理Redo&Undo操作,如果还需要对EMF对应的Attribute使用Text, Combo等Widget进行编辑的话,那么如何将这些Widget的编辑也能实现Undo&Redo操作呢?
首先我们来分析一下,对于TreeViewer是如何实现Redo&Undo操作的,在生成的editor代码中有类似这样的一句(这个是我改写后的,实际生成的可能有所区别):为了只针对Redo&Undo对UI进行更新,还需要对RedoAction和UndoAction做进一步处理:
其做法就是要让editor知道当前的Action,然后在修改UI的时候,取得该Action看是否是我们指定的Action(RedoAction&UndoAction).
- viewer.setContentProvider(new AdapterFactoryContentProvider(
- getAdapterFactory()));
AdapterFactoryContentProvider实现了INotifyChangedListener接口,该接口就是用来处理在EMF模型发生变动时,如何更新绑定的UI控件:
- public void notifyChanged(Notification notification)
- {
- if (viewer != null && viewer.getControl() != null && !viewer.getControl().isDisposed())
- {
- // If the notification is an IViewerNotification, it specifies how ViewerRefresh should behave. Otherwise fall
- // back to NotifyChangedToViewerRefresh, which determines how to refresh the viewer directly from the model
- // notification.
- //
- if (notification instanceof IViewerNotification)
- {
- if (viewerRefresh == null)
- {
- viewerRefresh = new ViewerRefresh(viewer);
- }
- if (viewerRefresh.addNotification((IViewerNotification)notification))
- {
- viewer.getControl().getDisplay().asyncExec(viewerRefresh);
- }
- }
- else
- {
- NotifyChangedToViewerRefresh.handleNotifyChanged(
- viewer,
- notification.getNotifier(),
- notification.getEventType(),
- notification.getFeature(),
- notification.getOldValue(),
- notification.getNewValue(),
- notification.getPosition());
- }
- }
- }
再看代码:
- public AdapterFactoryContentProvider(AdapterFactory adapterFactory)
- {
- this.adapterFactory = adapterFactory;
- if (adapterFactory instanceof IChangeNotifier)
- {
- ((IChangeNotifier)adapterFactory).addListener(this);
- }
- }
这里关键的一句就是:
- ((IChangeNotifier)adapterFactory).addListener(this);
它将更新UI的通知操作与adapterFactory关联起来,然后在EMF模型发生变动的时候,会从adapterFactory来找到所有注册的INotifyChangedListener
因此做法就相当简单了,即将EMF模型对应的编辑控件实现INotifyChangedListener接口,然后拿到adapterFactory,并把该控件注册进去.
下面我的一个实现:
AbstractDoradoSection包含了EMF模型当前节点属性的对应编辑控件集合,让其实现INotifyChangedListener接口
并在构造函数中注册到adapterFactory中:
- public AbstractDoradoSection(IAdaptable adaptable, Object input,
- Composite parent, String title, int style) {
- this.adaptable = adaptable;
- this.input = input;
- this.title = title;
- this.style = ExpandableComposite.TITLE_BAR | style;
- AdapterFactory adapterFactory = (AdapterFactory) adaptable
- .getAdapter(AdapterFactory.class);
- ((IChangeNotifier) adapterFactory).addListener(this);
- initialize(parent);
- }
- /**
- * 当emf模型发生变化之后,更新ui,主要针对redo和undo处理
- *
- * @see org.eclipse.emf.edit.provider.INotifyChangedListener#notifyChanged(org.eclipse.emf.common.notify.Notification)
- */
- public void notifyChanged(final Notification notification) {
- IActionProvider actionProvider = (IActionProvider) adaptable
- .getAdapter(IActionProvider.class);
- if (actionProvider.getAction() instanceof NotifierAction) {
- Object feature = notification.getFeature();
- if (feature instanceof EAttribute && rows != null) {
- for (Iterator iter = rows.iterator(); iter.hasNext();) {
- final AttributeRow row = (AttributeRow) iter.next();
- if (row.getAttribute() == feature) {
- row.setTextContent(notification.getNewStringValue(), true);
- break;
- }
- }
- }
- }
- }
发表评论
-
Java程序员25个必备的Eclipse插件
2012-01-12 22:36 21940原文:http://www.fromdev.com/2012/ ... -
关于插件更新安装的错误
2007-12-21 20:12 2221在更新插件的时候出现这样的错误: Unable to comp ... -
最近做eclipse branding, features的一些经验
2007-12-16 01:24 4561知道eclipse的splash怎么做 ... -
GEF学习笔记
2007-12-07 20:20 4168GEF以前学习过, 而且还 ... -
SWT布局深入学习
2007-11-30 23:00 7951以下内容是学习"The Definitive Gui ... -
Eclipse Action 深入学习笔记(3)
2007-11-25 17:59 4100filter元素是用来指定当 ... -
Eclipse Action 深入学习笔记(2)
2007-11-25 17:14 5227Object Action 这种Action是跟弹出的上下文菜 ... -
Eclipse Action 深入学习笔记(1)
2007-11-25 17:07 7679以前做插件用到的ActionSet都只是依葫芦画瓢,没有真正理 ... -
JFace Text Editor完全掌握之终极指南(4)
2007-11-24 17:08 5681错误标识(Error Marking) Error Marki ... -
JFace Text Editor完全掌握之终极指南(3)
2007-11-24 16:56 5513内容大纲 之所以要给编 ... -
JFace Text Editor完全掌握之终极指南(2)
2007-11-24 16:53 6739最后一步就是实现各种功能 语法高亮 首先我们要实现的是语法高亮 ... -
JFace Text Editor完全掌握之终极指南(1)
2007-11-24 16:17 10006JFace Text Editor是JFace里面一个功能强大 ... -
最近的Eclipse plugin开发总结
2007-11-24 11:30 4947List控件没有提供addDblClickListener方法 ... -
eclipse3.3关于JavaFileEditorInput兼容性问题的解决
2007-11-24 11:22 4680在eclipse3.3中,JavaFileEditor ... -
Eclipse WTP Projects Facets实战指南(2)
2007-11-21 21:13 5267修饰工作 给facet在选择列表中添加图标 格式如下: xml ... -
Eclipse WTP Projects Facets实战指南(1)
2007-11-21 20:21 9592这个文章基本是"Building Project F ... -
也说关于WizardPage的动态生成
2007-11-05 14:26 5160在Eclipse中一个Wizard=Wiza ... -
关于多页编辑器中不同Editor之间的Redo&Undo冲突的解决
2007-09-03 15:17 4068在我们的插件工具的开 ... -
TextEditor原理分析笔记
2007-08-23 15:48 3387Editor的语法着色原理:Eclipse使用damage , ... -
最近的Eclipse开发总结
2007-08-23 15:46 2129java.lang.IllegalAccessError: t ...
相关推荐
文件“如何使EMF模型对应的编辑控件能处理Undo&Redo操作”则揭示了一个常见需求,即在模型编辑中实现撤销/重做功能,这是任何用户友好的编辑环境中的重要特性。 在EMF中,模型的改变通常会触发事件,这些事件可以被...
EMF是Eclipse项目中的一个子项目,它提供了一种创建、操作和共享复杂的领域特定语言(DSL)模型的框架。EMF.compare允许用户比较两个EMF模型实例,识别它们之间的差异,并可选择性地合并这些差异。 这篇博客文章...
这些编辑器支持模型实例的创建、修改和查看,使开发者能够直观地操作模型数据。 EMF还支持模型验证,可以检查模型实例是否符合模型定义的约束。EMF验证规则可以通过EMF自身的DSL定义,也可以通过外部DSL定义。验证...
在处理XML数据时,EMF提供了一种高效且灵活的方式,能够将XML文档转换为可操作的对象模型,进而进行读取、解析和编辑。下面将详细介绍EMF读取XML的相关知识点。 1. **EMF模型与XML的关系** - EMF模型是面向对象的...
- **高级编辑器支持**:EMF还支持图形化编辑器,帮助开发者更直观地操作模型数据。 **1.1.3 文档和资源** EMF的官方文档和相关资源可以在Eclipse官方网站上找到,包括用户指南、开发指南和技术文档等。 ##### 1.2...
2. **EMF.Edit**:这部分建立在Ecore之上,提供了一组用于查看和修改模型的方法,还包括了一个内置的模型编辑器,使得开发人员可以直接在Eclipse环境中对模型进行操作。 #### EMF的适用场景 EMF非常适合于那些需要...
此外,还可以使用 EMF 的资源框架来管理模型实例的加载和保存操作。 #### 2. EMF 编辑框架程序员指南 **EMF Edit Framework Programmer's Guide** 重点介绍了如何使用 EMF 创建用户界面,以便编辑和查看 EMF 模型...
通过实际操作,你会学习如何创建一个简单的Ecore模型,生成对应的Java代码,然后使用这些代码创建和操作模型实例。此外,你还将了解如何利用EMF插件进行模型的比较和可视化。 8. **最佳实践** 学习EMF的同时,...
它们通常包括图形视图、编辑器和控制器,提供拖放、连线和其他直观的交互方式,使得非程序员也能理解和操作模型。 开发基于EMF的图形化编辑程序涉及以下步骤: 1. **定义模型**:首先,你需要定义你的模型结构,这...
Visual Editor是基于EMF和GEF构建的,专门用于创建可视化的模型编辑器。它提供了一系列预定义的组件和工具,可以快速构建出具有拖放、连接线、属性编辑等功能的图形界面,大大简化了创建复杂编辑器的工作。 在"emf-...
在“深入理解EMF&graphiti”教程中,你可能会学习到如何使用EMF来定义和操作模型,如何利用Ecore生成相应的Java代码,以及如何将这些模型与数据库或其他系统集成。同时,教程还会涵盖Graphiti的基本概念,如图形化的...
通过结合EMF,开发者可以轻松地将数据模型转化为可交互的图形表示,使得用户能够直观地操作和编辑模型。 VE,即Visual Editor,是Eclipse的一种可视化编辑器,它主要针对Java应用程序的开发。VE 提供了一种拖放式的...
- **可视化编辑**:利用SDK中的GUI组件,开发者可以构建可视化的模型编辑器,让用户以图形化方式操作和修改数据模型。 总的来说,"emf-sdo-xsd-SDK-2.3.2.zip"是一个强大的工具,它结合了EMF的模型驱动开发能力、...
5. **图形单元(Graphical User Interface, GUI)支持**:EMF与Eclipse的GMF(Graphical Modeling Framework)结合,可以生成基于模型的图形编辑器,使模型的可视化和编辑变得更加直观。 6. **版本控制**:EMF模型...
5. 编写应用程序:使用生成的Java类进行编程,利用EMF提供的API操作模型。 总结,Java开发工具EMF插件是Eclipse IDE中的一个强大工具,它简化了模型驱动开发的过程,提高了开发效率。无论是进行软件设计、数据库...
5. **编辑器(Editor)**:EMF提供了用于创建图形化或文本编辑器的工具,使用户可以直观地编辑模型实例。 6. **转换(Transformation)**:EMF支持模型到模型(M2M)和模型到文本(M2T)的转换,可以实现不同模型...
开发者可以构建基于EMF的Eclipse插件,提供图形化的模型编辑器和验证工具。 7. **扩展性**:EMF的设计使其易于扩展,开发者可以通过实现自定义的适配器、工厂和策略来扩展其功能,以满足特定项目需求。 "eclipse" ...
- **模型编辑器(Model Editor)**:EMF提供了一套图形化的工具,帮助开发者创建、编辑和查看模型。 - **数据持久化(Persistence)**:EMF支持XML和RDF等格式的数据持久化,方便模型的存储和交换。 - **转换与...