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中的资源一致。
- 扩展
org.eclipse.ui.navigator.viewer
扩展点org.eclipse.ui.navigator.viewer
是CNF视图扩展的入口,
viewer
表示导航使用的视图,viewerId
绑定到导航栏ID即可viewerContentBinding
表示视图中展现的资源有哪些,可以通过incloud
和excloud
指定包含或者排除哪些资源。一般情况下我们使用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>
- 扩展
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适配。
很简单,在ApplicationWorkbenchAdvisor
的initialize
方法中适配即可,如果需要设置根项目的展示图片,可以配置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