EMF不光为我们生成了模型类的代码。还为我们提供了一个默认的模型编辑器。要看到这个模型编辑器我们只需要运行一下就可以看到了(用Eclipse Application的方式)。
他默认的编辑器如下图所示
共有三个部:
1. 编辑器的主体。包括六种呈现方式。
a) Selection.
b) Parent.
c) List.
d) Tree
e) Table
f) Tree With Columns.
2. Outline部分。
Properties,会根据选择不同的对象而改变显示的内容。
关于Jface部分的工作模式我在《Table View 的合作类的模式》一文中有提到,不过需要说明的是,在Jface中的Viewer他们的ContentProvider可能不一样的。
要完成这部分的功能emf的产生代码中分别放到了两个插件里实现了他们分别是edit和editor。
Edit提供了Item 的Provider,他存在的意义就在于把逻辑对象和UI分割开。而Editor通过使用edit提供的Provider实现了一个编辑器的UI和Command部分,他是正真的用户界面部分。
下面我们就先来看看edit中的类。
好了,首先edit中使用的是adapt模型。所以edit中的插件对象会实现所有的viewer,Properties所需要的接口。
Emf为我们实现通用的接口。所以这绝对是一个学习的好机会。
废话不多说了,来看代码把。
首先看声明:
public class FamilyItemProvider
extends ItemProviderAdapter
implements
IEditingDomainItemProvider,
IStructuredItemContentProvider,
ITreeItemContentProvider,
IItemLabelProvider,
IItemPropertySource {
他的继承关系可以用下图来表示:
他们之间的职能以及实现的接口可用下图来描述:
AdapterImpl是为了实现Adapter模式而设定.
ItemProviderAdapter完成一些基本功能。下面就分别从不同的接口来说明
1. ResourceLocator:该接口是用来进行资源定位的。
2. IDisposable 是emf框架提供的一种析构接口。
3. IChangeNotifier 为"Notification and Adapters"模式提供必需的方法。
CreateChildCommand.Helper
最下面的EMF根据我们的模型产生的Provider的了。他实现了5个接口。
1. IEditingDomainItemProvider
这部分我还清楚,怀疑和command有关。
2. IStructuredItemContentProvider
该接口为TableViewer,ListViewer,TreeViewer提供服务。
This is the interface needed to populate the top level items in a TreeViewer, the items of a ListViewer, or the rows of a TableViewer.
3. ITreeItemContentProvider
This is the interface needed to populate subtrees in a TreeViewer
4. IItemLabelProvider
This is the interface implemented to provide a label text and even a label icon for an item;
it receives delegated calls from ILabelProvider.
5. IItemPropertySource
This is the interface is needed to populate property sheet items。it is the same as IpropertySource。except that the object is passed as the first parameter for each method.
这一篇还只是edit部分刚开一个头。
下一期会介绍一下他的command部分。