Posted on 2007-05-06 17:24
xiaoxiaoleemin 閱讀(2075)
評論(2) 編輯 收藏 所屬分類:
EMF
前面的幾篇是讀了《EMF:A Developer's Guide》一書前三章的讀書筆記,我覺得這三章的內(nèi)容是最重要的,介紹了EMF Framework的一些設(shè)計、結(jié)構(gòu)以及實現(xiàn)的問題。但是這些只是一些原理性的東西,要熟練掌握EMF的方法是在項目中應(yīng)用它,我們可以從修改EMF生成的代碼入手。EMF生成的編輯器是MultiPageEditor,比較復(fù)雜,我們可以參考它自己寫一個普通的Editor,在這個過程中可以熟悉哪些代碼是用于實現(xiàn)哪些功能的。
下面用一個簡單的例子來說明如何實現(xiàn)PropertySheet,這里只關(guān)心與PropertySheet有關(guān)的代碼:
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);
}
}
創(chuàng)建PropertySheetPage之后,為它設(shè)置PropertySourceProvider,參數(shù)是一個AdapterFactoryContentProvider實例,在前面的帖子里邊說過,它實現(xiàn)了IPropertySourceProvider接口,其getPropertySource方法是這樣實現(xiàn)的:比如我們在編輯器里邊選中一個teacher對象,它先找到Teacher類對應(yīng)的實現(xiàn)了IItemPropertySource的TeacherItemProvider對象,然后以這兩個對象作為參數(shù)新建一個PropertySource。
getAdapter方法繼承自WorkbenchPart類(EditorPart和ViewPart都是它的子類,都可以重寫這個方法),當(dāng)我們需要打開屬性頁視圖時,該方法會被調(diào)用,傳入的參數(shù)就是IPropertySheetPage.class,因此返回我們新建的PropertySheetPage,屬性頁就出現(xiàn)了。