使用eclipse进行开发的人肯定对Project Explorer不陌生,这个view能够让你对你的工程进行管理,同时配有强大的排序和过滤功能,那么在一个RCP程序中,该如何来使用eclipse自带的资源导航器呢?
在eclipse3.2之前,ResourceNavigator就是这个资源导航器的实现,然后eclipse的开发者们并不希望RCP开发者直接使 用,因为它会使得你的rcp程序一下子变得庞大而臃肿,不仅容量增大了20M+,而且还会引入很多你并不需要的功能。但是本着方便及对Eclipse代码 健壮性肯定的原则,还是有不少开发者讲其使用在自己的程序中,Eclipse3.2之后,Eclipse的开发者们为了满足广大开发者的需求,开发了 Common Navigator Framework,让其代替Eclipse Resource Navigator,现在我们在Eclipse3.4上使用ResourceNavigator就会看到一条横线,代表不推荐使用,在下一个版本将会去 掉。
本文讲简要介绍如何使用Common Navigator Framework:
第一步,需要在我们的程序中导入以下需要依赖的插件:
- org.eclipse.ui.navigator
- org.eclipse.ui.navigator.resources
- org.eclipse.ui.ide
- org.eclipse.core.resources
第二步,在org.eclipse.ui.views扩展点上新增一个view,其class选择org.eclipse.ui.navigator.CommonNavigator
<extension
point="org.eclipse.ui.views">
<view
name="View"
class="org.eclipse.ui.navigator.CommonNavigator"
id="example.view">
</view>
</extension>
第三步,在你的Perspective里面增加view的显示,方便我们查看显示效果,代码如下:
public void createInitialLayout(IPageLayout layout) {
String editorArea = layout.getEditorArea();
layout.setEditorAreaVisible(false);
layout.addStandaloneView("example.view", true /* show title */, IPageLayout.LEFT, 1.0f, editorArea);
//your code
}
到这里就可以看到我们的Navigator已经出来了,只不过还没有任何的内容,action也是仅有的两个。
为了看到内容,我们可以将工作区里的工程导入进Navigator来显示,所以你需要在你的WorkbenchAdvisor里重写getDefaultPageInput方法,代码如下:
public IAdaptable getDefaultPageInput() {
IWorkspace workspace = ResourcesPlugin.getWorkspace();
return workspace.getRoot();
}
上面的方法需要返回一个IAdaptable的接口,这个接口定义一个适配对象,能够动态地被扩展来提供不同的接口;我们需要将其和RCP平台挂钩上,我们需要在initialize方法里面增加以下代码:
WorkbenchAdapterBuilder.registerAdapters();
我们会注意到,这个WorkbenchAdapterBuilder .registerAdapers()方法是一个内部方法,而不是eclipse API的一部分,有可能在下一个release被替换掉,但是会有新的API来代替它。
现在我们运行一下我们的RCP程序,我们就可以看到我们这个程序的workspace下的工程的目录情况。
如果需要添加一个自带的Action,比如导入,新建工程等,我们可以添加 org.eclipse.ui.navigator.viewer 扩展点,建立viewerActionBinding和viewerContentBinding,均指向上面的view。
在 viewerActionBinding中将include org.eclipse.ui.navigator.resources
在 viewerContentBinding中将include
- org.eclipse.ui.navigator.resources
- org.eclipse.ui.navigator.resourceContent
- org.eclipse.ui.navigator.resources.filters
- org.eclipse.ui.navigator.resources.linkHelper
- org.eclipse.ui.navigator.resources.workingSets
<extension
point="org.eclipse.ui.navigator.viewer">
<viewerActionBinding
viewerId="example.view">
<includes>
<actionExtension pattern="org.eclipse.ui.navigator.resources.*" />
</includes>
</viewerActionBinding>
<viewerContentBinding
viewerId="example.view">
<includes>
<contentExtension pattern="org.eclipse.ui.navigator.resourceContent" />
<contentExtension pattern="org.eclipse.ui.navigator.resources.filters.*"/>
<contentExtension pattern="org.eclipse.ui.navigator.resources.linkHelper"/>
<contentExtension pattern="org.eclipse.ui.navigator.resources.workingSets"/>
</includes>
</viewerContentBinding>
</extension>
那么现在运行一下,看看效果吧,是不是有点eclipse的里的感觉了?