GEF的ContentOutlinePage就是TreeViewer使用的例子.
下面直接贴代码, 有空再进行整理:
[b]第一段代码[/b], 在SWT的Composite的界面上添加一个GEF的TreeViewer.
[b]第二段代码[/b]: 设置TreeViewer
[b]第三段代码[/b]: TreeViewer的EditPartFactory. [很简单告诉TreeViewer怎么从Model得到TreeEditPart]
[b]第四部分[/b]: 一个基本的TreeEditPart的定义.
直接继承于AbstractTreeEditPart. 也可以按照需要去覆盖里面的getText, getImage等方法.
如果Model是父子结构的, 一定要覆盖getModelChildren方法.
下面直接贴代码, 有空再进行整理:
[b]第一段代码[/b], 在SWT的Composite的界面上添加一个GEF的TreeViewer.
treeViewer = new org.eclipse.gef.ui.parts.TreeViewer();
treeViewer.createControl(composite);
[b]第二段代码[/b]: 设置TreeViewer
treeViewer.setEditDomain(new EditDomain());
RootTreeEditPart rootTreeEditPart = new RootTreeEditPart();
rootTreeEditPart.setWidget((Tree) treeViewer.getControl()); // 注意这里
treeViewer.setRootEditPart(rootTreeEditPart);
treeViewer.setEditPartFactory(new TreeEditPartFactory());
treeViewer.setContents(templateModel); // 模型
getSynchronizer().addViewer(treeViewer); // getSynchronizer()是一个SelectionSynchronizer.
[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();
}
}