文档章节

Eclipse插件开发菜单篇

素人派
 素人派
发布于 2016/12/31 20:49
字数 506
阅读 856
收藏 0
  • 介绍
在Eclipse中,菜单是非常重要的一个角色,下面就介绍如何自定义菜单。 菜单包括有主菜单、视图菜单、上下文菜单。 Eclipse提供了两种方式扩展菜单,分别是通过org.eclipse.ui.commands和org.eclipse.ui.actionSets。
  • 扩展点org.eclipse.ui.actionSets
[codesyntax lang="xml"]
<extension point="org.eclipse.ui.actionSets">
<actionSet label="EasyShell Action Set"
    visible="true"
    id="org.suren.easyshell.actionSet">
 <menu label="Explorer &amp;Menu"
       id="suren.menu">
    <separator
	  name="surenGroup">
    </separator>
 </menu>
 <action label="&amp;Explorer Action"
       icon="icons/fldr_obj.gif"
       class="org.suren.easyshell.actions.ExplorerAction"
       tooltip="Explorer Resources"
       menubarPath="suren.menu/surenGroup"
       toolbarPath="surenGroup"
       id="org.suren.easyshell.actions.ExplorerAction">
 </action>
</actionSet>
</extension>
[/codesyntax]
  • org.eclipse.ui.actionSets实现类
可以实现接口org.eclipse.ui.IWorkbenchWindowActionDelegate 这种方式并没有把界面和实现分离,而下面的commands的方式确做到了分离的效果。
  • 扩展点org.eclipse.ui.commands
[codesyntax lang="xml"]
<extension point="org.eclipse.ui.commands">
	<command categoryId="org.suren.easyshell.command.category"
	    id="org.suren.easyshell.command.shellExplore"
	    name="Easy Shell Explore" />
</extension>

<extension point="org.eclipse.ui.handlers">
	<handler class="org.suren.easyshell.command.EasyShellCommand"
	    commandId="org.suren.easyshell.command.command.shellExplore">
	</handler>
</extension>

<extension point="org.eclipse.ui.menus">
	<command
	    categoryId="org.suren.easyshell.command.command.category1"
	    id="org.suren.easyshell.command.command.shellExplore"
	    name="Easy Shell Explore">
	</command>

	<menuContribution locationURI="popup:org.eclipse.ui.popup.any?before=additions">
	 <menu id="com.tetrade.eclipse.plugins.easyshell.menu"
	       label="Easy Shell">
	    <command
		  commandId="org.suren.easyshell.command.command.shellExplore"
		  icon="icons/fldr_obj.gif"
		  label="Explore..."
		  style="push">
	    </command>
	 </menu>
	</menuContribution>

	<menuContribution
	    locationURI="toolbar:org.eclipse.ui.main.toolbar?after=additions">
	 <toolbar id="org.suren.easyshell.toolbars.shellExplore">
	    <command commandId="org.suren.easyshell.command.command.shellExplore"
		  icon="icons/fldr_obj.gif"
		  tooltip="Explore..."
		  id="org.suren.easyshell.toolbars.shellExplore.cmd">
	    </command>
	 </toolbar>
	</menuContribution>
</extension>
[/codesyntax] menuContribution的语法:locationURI="[scheme]:[id]?[argument-list]" scheme表明了菜单应该出现的区域——menu为视图的下拉菜单,toolbar为视图的工具栏 id为菜单区域的id argument-list为该菜单项出现在菜单的位置,这里的参数常见的如:after=additions。如果你想要把你的菜单项放到一个确切的菜单项后面的话,把additions修改为那个菜单项的id即可。
  • org.eclipse.ui.commands实现类
步骤如下:
  1. 通过org.eclipse.ui.commands来扩展命令(类别category)
  2. 通过org.eclipse.ui.menus来指定命令在哪里出现
  3. 通过org.eclipse.ui.handlers指定命令的实现类
[codesyntax lang="java"]
package org.suren.easyshell.actions;

import org.eclipse.jface.action.IAction;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.IWorkbenchWindowActionDelegate;
import org.eclipse.jface.dialogs.MessageDialog;

public class ExplorerAction implements IWorkbenchWindowActionDelegate {
	private IWorkbenchWindow window;
	public ExplorerAction() {
	}

	public void run(IAction action) {
		MessageDialog.openInformation(
			window.getShell(),
			"SEasyshell",
			"Hello, Eclipse world");
	}

	public void selectionChanged(IAction action, ISelection selection) {
	}

	public void dispose() {
	}

	public void init(IWorkbenchWindow window) {
		this.window = window;
	}
}
[/codesyntax] 要实现上下文的菜单扩展的话,要使用org.eclipse.ui.popupMenus来实现。
  • 参考
http://www.ibm.com/developerworks/cn/opensource/os-cn-ecl-menuext/ http://www.fengfly.com/plus/view-179398-1.html

本文转载自:http://surenpi.com/2015/07/24/eclipse%e6%8f%92%e4%bb%b6%e5%bc%80%e5%8f%91%e8%8f%9c%e5%8d%95%e7%af...

素人派
粉丝 26
博文 1907
码字总数 10223
作品 6
东城
程序员
私信 提问

暂无文章

TypeScript……真香

写前端或者用 node 写命令行小工具一直采用的 es6 的语法,对于 TypeScript 则是秉持敬而远之的态度,毕竟团队中多推广一门语言所需要花费的精力都是让人望而却步的。所以对于 JavaScript 的...

郁也风
33分钟前
2
0
shell基本案例

1、自定义rm linux系统的rm命令太危险,一不小心就会删除掉系统文件。 写一个shell脚本来替换系统的rm命令,要求当删除一个文件或者目录时,都要做一个备份,然后再删除。下面分两种情况,做...

寰宇01
39分钟前
2
0
分享一波 ZooKeeper 面试题

ZooKeeper是什么? ZooKeeper提供了什么? Zookeeper文件系统 ZAB协议? 四种类型的数据节点 Znode Zookeeper Watcher 机制 -- 数据变更通知 客户端注册Watcher实现 服务端处理Watcher实现 ...

搜云库技术团队
53分钟前
1
0
谈谈你对volatile的理解

1、volatile是Java虚拟机提供的轻量级的同步机制 -保证可见性 -不保证原子性 -禁止指令重排 2、JMM你谈谈 JMM(Java内存模型,简称JMM)本身是一种抽象的概念并不真实存在 ,它描述的是一组规...

一只小青蛙
今天
2
0
Redox OS 发布 0.5 版

Redox OS 是一个几乎完全以 Rust 语言编写的通用操作系统及周围生态(例如文件系统、显示服务器及 Rust 版本的 libc)。其遵循微内核架构,在一定程度上兼容于 POSIX。 该项目于日前发布了 ...

linuxCool
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部