GEF的ContentOutlinePage就是TreeViewer使用的例子.
下面直接貼代碼, 有空再進行整理:
[b]第一段代碼[/b], 在SWT的Composite的界面上添加一個GEF的TreeViewer.
treeViewer = new org.eclipse.gef.ui.parts.TreeViewer();
treeViewer.createControl(composite);
[b]第二段代碼[/b]: 設定TreeViewer
[b]第三段代碼[/b]: TreeViewer的EditPartFactory. [很簡單告訴TreeViewer怎麼從Model得到TreeEditPart]
public class TreeEditPartFactory implements EditPartFactory {
/**
* @see org.eclipse.gef.EditPartFactory#createEditPart(org.eclipse.gef.EditPart, java.lang.Object)
*/
public EditPart createEditPart(EditPart context, Object model) {
EditPart part = null;
if (model instanceof TemplateModel) {
part = new TemplateTreeEditPart();
}
if (part != null) {
part.setModel(model);
}
return part;
}
}
[b]第四部分[/b]: 一個基本的TreeEditPart的定義.
直接繼承于AbstractTreeEditPart. 也可以按照需要去覆寫裡面的getText, getImage等方法.
如果Model是父子結構的, 一定要覆寫getModelChildren方法.
public class TemplateTreeEditPart extends AbstractTreeEditPart {
@Override
protected List getModelChildren() { // 得到目前模型下的子模型.
TemplateModel model = (TemplateModel) this.getModel();
return model.getChildren();
// return super.getModelChildren();
}
}