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已经定义好的资源就以足够。如<contentExtension pattern="org.eclipse.ui.navigator.resourceContent" />,该资源是在org.eclipse.ui.navigator.resource实现的。当然您可以不适用它,而直接使用自己定义的资源<contentExtension pattern="main-navigator-content.navigator-content"" />
  • 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,代码如下:

	@Override
	public void initialize(IWorkbenchConfigurer configurer) {
//		// 配置 project 默认图标
//		configurer.declareImage(IDE.SharedImages.IMG_OBJ_PROJECT,
//				AppActivator.getImageDescriptor(ContentSystemImg.PROJECT_IMG), true);

		// 初始化
		super.initialize(configurer);

		// IDE适配
		IDE.registerAdapters();
	}

运行效果

在这里插入图片描述
其中项目testProject01和testProject02初始化创建见文章
Eclipse插件(RCP)初始化资源文件

系列文章

[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 实践(五)菜单及工具条定制

资料

项目地址

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值