天天看點

GEF TreeViewer使用

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();
	}
}