文章Common Navigator Framework 实践(四)文件过滤最后遗留了个问题,这一篇文章来解决。
目标
如上图所示,现在的导肮栏视图中有视图菜单和一些工具菜单,本文将讲述如何去掉这些菜单和工具菜单。
分析
这些视图菜单和工具菜单其实是视图菜单的扩展,是CNF框架自动默认构建的,有两种方法可以优化,一、使用CNF提供的配置选项进行配置;二、在导航视图实现类中修改视图菜单和工具菜单功能。
实现
一、CNF 实现
CNF导航视图扩展点org.eclipse.ui.navigator.viewer 提供了options 标签,用于配置默认导航视图菜单是否显示。其扩展点文档描述如下:
<extension
point="org.eclipse.ui.navigator.viewer">
<viewer
popupMenuId="org.eclipse.ui.tests.navigator.TestView#PopupMenu"
viewerId="org.eclipse.ui.tests.navigator.TestView">
<options>
<property
name="org.eclipse.ui.navigator.hideAvailableExtensionsTab"
value="true"/>
<property
name="org.eclipse.ui.navigator.hideAvailableCustomizationsDialog"
value="true"/>
<property
name="org.eclipse.ui.navigator.hideLinkWithEditorAction"
value="true"/>
<property
name="org.eclipse.ui.navigator.hideCollapseAllAction"
value="true"/>
</options>
</viewer>
</extension>
使用这种方式配置很简单,只要粘贴相关代码即可。配置后的plugin.xml信息为:
<extension
point="org.eclipse.ui.navigator.viewer">
<viewer viewerId="com.xzbd.views.MainNavigator">
<options>
<property
name="org.eclipse.ui.navigator.hideAvailableExtensionsTab"
value="true"/>
<property
name="org.eclipse.ui.navigator.hideAvailableCustomizationsDialog"
value="true"/>
<property
name="org.eclipse.ui.navigator.hideLinkWithEditorAction"
value="true"/>
<property
name="org.eclipse.ui.navigator.hideCollapseAllAction"
value="true"/>
</options>
</viewer>
此时导航栏视图所有菜单都被隐藏了,如下图所示
二、自定义视图菜单
方法一只能控制CNF提供的视图菜单,无法扩展。因此方法二相较于方法一更加灵活。 扩展后的导航视图实现类
package com.xzbd.navigator;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.IViewSite;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.navigator.CommonNavigator;
import com.xzbd.actions.NavMenuAction01;
import com.xzbd.actions.NavMenuAction02;
import com.xzbd.actions.NavMenuAction03;
public class MainNavigator extends CommonNavigator {
public static final String ID = "com.xzbd.views.MainNavigator";
@Override
public void createPartControl(Composite aParent) {
super.createPartControl(aParent);
addMenus();
}
@Override
public void init(IViewSite site) throws PartInitException {
super.init(site);
}
private void addMenus() {
IActionBars actionBars = getViewSite().getActionBars();
IMenuManager menuManager = actionBars.getMenuManager();
IToolBarManager toolBarManager = actionBars.getToolBarManager();
toolBarManager.add(new NavMenuAction01());
toolBarManager.add(new NavMenuAction02());
menuManager.add(new NavMenuAction01());
menuManager.add(new NavMenuAction02());
menuManager.add(new NavMenuAction03());
}
}
添加菜单可以重写createPartControl 和init ,建议在createPartControl 中重写。重写后的类中使用到的NavMenuAction01 、NavMenuAction02 、NavMenuAction03 ,代码比较简单,详见项目epx,NavMenuAction01 示例如下:
package com.xzbd.actions;
import org.eclipse.jface.action.Action;
import com.xzbd.advisor.AppActivator;
import com.xzbd.utils.AppPrinter;
public class NavMenuAction01 extends Action{
public static final String ID = NavMenuAction01.class.getSimpleName();
public static final String TEXT = "刷粉";
public NavMenuAction01() {
setText(TEXT);
setToolTipText(TEXT);
setImageDescriptor(AppActivator.getImageDescriptor("icons/20220417/zhangfenrenwu.png"));
}
@Override
public void run() {
AppPrinter.println("我是导航菜单,我的任务是刷粉……");
}
}
效果展示
注意,如果导航视图比较窄,展示效果将如下图所示
总结
文章目的是扩展CNF导航视图的工具条及菜单定制,使用了两种方法。第一种是CNF提供的方法,采用xml配置方式;第二种使用扩展视图类的实现。推荐使用第二种方式,这种方式是视图菜单及工具条添加菜单的原生方法,它能实现方法一的效果,并能灵活扩充。
系列文章
CNF系列汇总 Common Navigator Framework 实践(一)自定义导航 Common Navigator Framework 实践(二)菜单扩展 Common Navigator Framework 实践(三)文件拖拽控制 Common Navigator Framework 实践(四)文件过滤 Common Navigator Framework 实践(五)菜单及工具条定制
资料
项目地址
|