GMF生成的工程中,实现了一个默认的navigator viewer,请参见plugin.xml中的扩展点org.eclipse.ui.navigator.viewer、org.eclipse.ui.navigator.navigatorContent,默认继承的viewer是ProjectExplorer资源视图,其viewerId是org.eclipse.ui.navigator.ProjectExplorer。在view中对一个目标对象进行解析,通常需要定义两个provider,一个是content provider,另一个是label provider。content provider是用来解析目标对象包含的children,label provider是用来解析目标对象对应的名字和图标。
navigator viewer对应生成的代码通常是放在XXX.XXX.navigator包中,重点分析content provider和label provider两个类。
project explorer视图对应的ContentProvider类需要实现ICommonContentProvider接口。其中getChildren()方法就是用来返回目标对象的子结点集合。要定制project explorer视图的逻辑解析结构,只需重写getChildren方法即可。另外还需要提一下WorkspaceSynchronizer对象,它会监听工作空间中的resource状态,从而同步更新navigator视图。
project explorer视图对应的LabelProvider类需要实现ICommonLabelProvider接口。 其中getImage()方法返回目标对象对应的图标,getText()方法返回目标对象对应的text信息。
注意project explorer是一个资源导航视图,其解析的根结点对象都是一些resource资源,比如IProject、IFolder、IFile对象。