Posted on 2007-05-06 17:24
xiaoxiaoleemin 阅读(2059)
评论(2) 编辑 收藏 所属分类:
EMF
前面的几篇是读了《EMF:A Developer's Guide》一书前三章的读书笔记,我觉得这三章的内容是最重要的,介绍了EMF Framework的一些设计、结构以及实现的问题。但是这些只是一些原理性的东西,要熟练掌握EMF的方法是在项目中应用它,我们可以从修改EMF生成的代码入手。EMF生成的编辑器是MultiPageEditor,比较复杂,我们可以参考它自己写一个普通的Editor,在这个过程中可以熟悉哪些代码是用于实现哪些功能的。
下面用一个简单的例子来说明如何实现PropertySheet,这里只关心与PropertySheet有关的代码:
public class MySchoolEditor extends EditorPart implements ISelectionListener{
...
PropertySheetPage propertySheetPage;
public void init(IEditorSite site, IEditorInput input) throws PartInitException {
...
propertySheetPage = getPropertySheetPage();
}
public PropertySheetPage getPropertySheetPage() {
if (propertySheetPage == null) {
propertySheetPage = new PropertySheetPage();
propertySheetPage.setPropertySourceProvider(new AdapterFactoryContentProvider(adapterFactory));
}
return propertySheetPage;
}
public Object getAdapter(Class key) {
if (key.equals(IPropertySheetPage.class))
return getPropertySheetPage();
else
return super.getAdapter(key);
}
}
创建PropertySheetPage之后,为它设置PropertySourceProvider,参数是一个AdapterFactoryContentProvider实例,在前面的帖子里边说过,它实现了IPropertySourceProvider接口,其getPropertySource方法是这样实现的:比如我们在编辑器里边选中一个teacher对象,它先找到Teacher类对应的实现了IItemPropertySource的TeacherItemProvider对象,然后以这两个对象作为参数新建一个PropertySource。
getAdapter方法继承自WorkbenchPart类(EditorPart和ViewPart都是它的子类,都可以重写这个方法),当我们需要打开属性页视图时,该方法会被调用,传入的参数就是IPropertySheetPage.class,因此返回我们新建的PropertySheetPage,属性页就出现了。