Posted on 2007-05-06 17:24
xiaoxiaoleemin 閱讀(2075)
評論(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,屬性頁就出現了。