> 文档中心 > Common Navigator Framework 实践(一)自定义导航

Common Navigator Framework 实践(一)自定义导航

本节介绍根据CNF框架自定义导航。

分析

此处我们**约定:**Epx的导航和Eclipse的导航一样,是一种基于文件资源的树形导航(CNF最适合做这类导航)。

若需要非文件资源的导航,而是一些类web功能集的菜单导航或者功能集的树形导航,并且需要每个功能菜单的右键菜单都不一致,或没有功能菜单。那么CNF可能不太适合做这样的业务,读者可以自己定义一个视图,根据业务实现自己的导航需要,然后此视图置为导航视图。

导入插件

如图引入插件org.eclipse.ui.ide,org.eclipse.ui.navigator,org.eclipse.ui.navigator.resource

在这里插入图片描述

扩展视图

  • org.eclipse.ui.views扩展视图 导航栏
      <extension  point="org.eclipse.ui.views">      <view     class="com.xzbd.navigator.MainNavigator"     id="com.xzbd.views.MainNavigator"     name="导航栏"     restorable="true">      </view>     </extension>
  • 实现com.xzbd.navigator.MainNavigator,使其继承 CommonNavigator
public class MainNavigator extends CommonNavigator {public static final String ID = "com.xzbd.views.MainNavigator";}

注意:
为了方便管理,约定实现类中定义该视图的ID,plugin.xml 中引用该ID的值

丰富导航栏视图

定义得导航视图现在什么都没有,我们得给他添加资源。依照约定,导航中的资源与Eclipse中的资源一致。

  1. 扩展org.eclipse.ui.navigator.viewer
    扩展点org.eclipse.ui.navigator.viewer是CNF视图扩展的入口,
  • viewer 表示导航使用的视图,viewerId绑定到导航栏ID即可
  • viewerContentBinding 表示视图中展现的资源有哪些,可以通过incloudexcloud 指定包含或者排除哪些资源。一般情况下我们使用Eclipse已经定义好的资源就以足够。如,该资源是在org.eclipse.ui.navigator.resource实现的。当然您可以不适用它,而直接使用自己定义的资源
  • viewerActionBinding 表示视图中的资源选中后的右击菜单。
    示例配置如下:
   <extension  point="org.eclipse.ui.navigator.viewer">      <viewer viewerId="com.xzbd.views.MainNavigator"> </viewer>      <viewerContentBinding viewerId="com.xzbd.views.MainNavigator">  <includes><contentExtension pattern="org.eclipse.ui.navigator.resourceContent" />      <contentExtension pattern="org.eclipse.ui.navigator.resources.filters.*"/></includes>      </viewerContentBinding> <viewerActionBinding viewerId="com.xzbd.views.MainNavigator">    <includes><actionExtension pattern="org.eclipse.ui.navigator.resources.*"/>    </includes>   </viewerActionBinding></extension>
  1. 扩展org.eclipse.ui.navigator.navigatorContent
    org.eclipse.ui.navigator.navigatorContent 表示扩展导航内容
  • id 表示改内容的唯一编号
  • name 表示资源的名称
  • labelProvider 表示资源的展示,用于定义颜色、大小、图片、文字、特效等
  • contentProvider 表示资源内容,用于定义那些资源可以被展示,及如何查找资源的父、子资源。
  • possibleChildren 表示导航中可能的资源类型
<extension  point="org.eclipse.ui.navigator.navigatorContent">      <navigatorContent     activeByDefault="true"     id="main-navigator-content.navigator-content"     name="mainNavigatorContent"     labelProvider="com.xzbd.navigator.provider.MainLabelProvider"     contentProvider="com.xzbd.navigator.provider.MainContentProvider"     priority="normal">     <triggerPoints>    <or> <and>    <instanceof value="org.eclipse.core.resources.IResource"/>    <test   forcePluginActivation="true"   property="org.eclipse.core.resources.extension"   value="properties"/> </and>  </or> </triggerPoints>      <possibleChildren>      <or>  <instanceof value="org.eclipse.core.resources.IWorkspaceRoot" /> <instanceof value="org.eclipse.core.resources.IProject" /> <instanceof value="org.eclipse.core.resources.IResource" /> <instanceof value="org.eclipse.core.resources.IFolder" /><instanceof value="org.eclipse.core.resources.IFile" />   </or>  </possibleChildren>      </navigatorContent>   </extension>
  • labelProvider 实现
package com.xzbd.navigator.provider;import org.eclipse.ui.model.WorkbenchLabelProvider;public class MainLabelProvider extends WorkbenchLabelProvider {}

我们定义的MainLabelProvider继承自WorkbenchLabelProvider,很容易发现没有做任何实现,因此我们其实在plugin.xml 中直接使用org.eclipse.ui.model.WorkbenchLabelProvider 或其他类似的类

  • contentProvider 实现
package com.xzbd.navigator.provider;import org.eclipse.ui.model.WorkbenchContentProvider;public class MainContentProvider extends WorkbenchContentProvider {}

contentProvider 实现类与labelProvider同理。

适配

最后一点,因为我们实现的是类似于Eclipse的资源导航,所以我们需要做一下IDE适配。
很简单,在ApplicationWorkbenchAdvisorinitialize方法中适配即可,如果需要设置根项目的展示图片,可以配置IDE.SharedImages.IMG_OBJ_PROJECT,代码如下:

@Overridepublic void initialize(IWorkbenchConfigurer configurer) {//// 配置 project 默认图标//configurer.declareImage(IDE.SharedImages.IMG_OBJ_PROJECT,//AppActivator.getImageDescriptor(ContentSystemImg.PROJECT_IMG), true);// 初始化super.initialize(configurer);// IDE适配IDE.registerAdapters();}

运行效果

在这里插入图片描述

系列文章

[CNF系列汇总](https://blog.csdn.net/m0_4740683
2/article/details/123890933)
Common Navigator Framework 实践(一)自定义导航
Common Navigator Framework 实践(二)菜单扩展
Common Navigator Framework 实践(三)文件拖拽控制
Common Navigator Framework 实践(四)文件过滤
Common Navigator Framework 实践(五)菜单及工具条定制

资料

  • Common Navigator Framwork 参考资料

项目地址

  • epx