- 浏览: 978482 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
运乃强谦:
老哥,你确定这个wsdl 地址 可以访问?
[CXF] Server与Client实现方式五:HTTPS -
wangyudong:
由CXF实现的微服务需要有比较好的工具去测试RESTful A ...
[CXF] Server与Client实现方式四:JMS -
dengmiao:
JAXB学习三 (验证) -
panamera:
你好。可以提供maven pom配置是怎么配置的?不知道你使用 ...
[CXF] Server与Client实现方式四:JMS -
u010221220:
请问楼主一二三部分的代码都应该放在哪个函数体中。
使用JDI监听Java程序运行
OK,我们已经有了一个初步可运行的Navigator了,现在它看起来已经比较丰富了。不过我们在xml文件下的任意结点上点右键时,都没有菜单显示。另外假如我们有一个新的wizard,我们也想像java的package explorer视图一样显示在new菜单的那一层。那我们应该怎么做呢?这一节就来介绍这部分的实现。
实际上,从上面的介绍里,很多人可能都已经知道了怎么完成这些事情。不过这里还是写一个完整的介绍过程。
先说一下我们的目标:在IResource对象的new菜单里,加上java project wizard。在xml文件的node上,加一个菜单用来显示它的所有属性。
首先我们完成第一件事。
增加快捷Wizard
第二节中,我们提到过,在org.eclipse.ui.navigator.navigatorContent扩展点的navigatorContent里也有两个子扩展:commonWizard和actionProvider。
这里要加一个wizard的快捷方式,就是需要扩展这个commonWizard。所以在上面我们扩展的navigatorContent里,我们再声明子扩展:commonWizard。如下:
<commonWizard
type="new"
wizardId="org.eclipse.jdt.ui.wizards.JavaProjectWizard">
<enablement>
<instanceof
value="org.eclipse.core.resources.IResource">
</instanceof>
</enablement>
</commonWizard>
有三种类型的wizard,这里我们选择new;然后就是指定wizardId,这里我们指定为java project wizard的ID;最后就是定义出现在条件,这里定义的条件就是如果选择的对象为IResource对象,则出现。
最后我们的图如下:
图九
显然你可以很简易的推到其他两种类型wizard的快捷定义。
增加自定义菜单
现在看我们的XML下的那些结点,点右键时没有菜单显示。这里我们就给他们加一个显示值的菜单。
要实现自定义菜单,我们就需要扩展和上面的commonWizard在同一级的actionProvider。先看一下我们的声明:
<actionProvider
class="com.tibco.cdc.liugang.navigator.actions.LiugangCommonActionProvider"
id="com.tibco.cdc.liugang.navigator.navigatorContent.actions">
<enablement>
<instanceof
value="org.w3c.dom.Node">
</instanceof>
</enablement>
</actionProvider>
这里有五个属性定义,不过我们需要关心的只有上面两个:class用来定义实现类;id唯一标识这个actionProvider。然后我们加了一个可用的约束条件:选择的对象需要是一个Node实例。
定义完actionProvider之后,我们就要注册这个actionProvider了。在我们的viewer扩展的viewerActionBinding的includes下面加一句就行了:
<actionExtension pattern="com.tibco.cdc.liugang.navigator.navigatorContent.actions">
</actionExtension>
好,接下来我们先完成实现类,如下:
public class LiugangCommonActionProvider extends CommonActionProvider {
private Action propertyAction;
private ICommonViewerSite viewSite;
public LiugangCommonActionProvider() {
}
@Override
public void init(ICommonActionExtensionSite site) {
super.init(site);
viewSite = site.getViewSite();
propertyAction = new Action("Show Property") {
@Override
public void run() {
IStructuredSelection selection = (IStructuredSelection) viewSite
.getSelectionProvider().getSelection();
Object firstElement = selection.getFirstElement();
if (firstElement instanceof Node) {
Node selectedNode = (Node) firstElement;
MessageDialog.openInformation(viewSite.getShell(),
"Property", getAllAttributes(selectedNode));
}
}
};
}
@Override
public void fillContextMenu(IMenuManager menu) {
menu.add(propertyAction);
}
private String getAllAttributes(Node node) {
NamedNodeMap attributes = node.getAttributes();
String content = "<";
for (int i = 0; i < attributes.getLength(); i++) {
Node item = attributes.item(i);
content += item.getNodeName() + "=" + item.getNodeValue() + " ";
}
content += ">";
return content;
}
}
看起来像是我们已经完成了所有的过程。不过如果此时我们在node上点右键的话,并不出现右键菜单。为什么呢?
这里我们需要提到另一个扩展元素:possibleChildren。它和triggerPoints在同一层。
这个扩展元素指出我们的内容扩展中的哪些结点类型可以指供label和parent。如果你要实现editor link或者是想使得setSelection()方法可用,则必须提供这个扩展元素的声明。
这里,对应于我们点右键菜单,显然我们应该使得setSelection()方法可用,这样才能知道我们在资源树上选择了哪个node结点,最后传到我们的actionProvider的实现。完成我们的右键菜单。这里我们可以如下声明:
<possibleChildren>
<or>
<instanceof
value="org.w3c.dom.Node">
</instanceof>
</or>
</possibleChildren>
最后效果如下:
图十
评论
http://surenpi.com
按你说的步骤树型菜单不显示
发表评论
-
在OSGI容器Equinox中嵌入HttpServer
2011-12-27 18:01 10703简单介绍一下如何在一个osgi的bundle中内嵌使用http ... -
GEF中用鼠标移动画布
2011-12-27 13:37 1320第一步 增加Palette项: moveTool = n ... -
在Eclipse中使用Maven
2011-09-29 13:41 1235上一篇讲了Maven的基础知识,这一篇讲怎么在Eclipse里 ... -
增加Table的Column右键菜单
2011-03-15 15:55 1442table.addListener(SWT.MenuDete ... -
RGB与HSB之间的相互转换
2010-10-29 15:14 12274[引用:] [ http://www.missyuan.com ... -
给Table和Tree的Header加右键菜单
2010-10-29 11:26 2463通常,如果不做特殊处理的话,在表头(树头,以下统称表头)的上点 ... -
给Editor加上Annotation
2010-10-27 17:27 2694要自定义Annotation,需要实现以下扩展点: “ ... -
org.eclipse.ui.navigator.linkHelper的使用
2010-08-06 15:43 2383org.eclipse.ui.navigator.linkHe ... -
让表项支持鼠标拖动移位,并自动滚动滚动条
2010-04-07 11:43 2638设想我们有一个表,表中有很多数据(多到竖起滚动条至少要出现)。 ... -
Eclipse截屏插件
2010-01-19 15:59 2679闲来无事,就写了一个截屏插件,见附件,直接放在eclipse的 ... -
Eclipse取得路径的方法
2009-11-27 10:30 1863从插件中获得绝对路径: TestPlug ... -
实现自己的团队协作客户端一
2009-11-12 15:04 1389在Eclipse里自带了团队协 ... -
扩展Eclipse Java编辑器的链接功能
2009-09-09 09:35 3581在JDT中,可以在一个类,或者是方法,或者是变量上进行跳转。这 ... -
添加监听到EMF对象、加密保存
2009-08-14 10:10 958一、可以注册监听来获取EMF模型改变事件,例如: pu ... -
使用Tab键实现表格的跳转
2009-08-12 21:29 2929在Excel中,如果按Tab键,则焦点会在相邻的方格中不断的跳 ... -
StyledCellLabelProvider的应用
2009-08-11 16:47 2237昨天写了EditingSupport的应用,可以方便的编辑Ta ... -
EditingSupport的应用
2009-08-10 15:20 2921Eclipse3.3中提供了一个EditingSupport类 ... -
合理的自定义扩展点
2009-06-26 01:43 1767Eclipse中提供了各种各样的用于扩展Eclipse功能的 ... -
关键字高亮插件
2009-06-26 00:59 1889在eclipse中,如果用Ctrl+F来进行查找,它只会一个一 ... -
置窗口于显示器中央
2009-05-06 09:46 891要把窗口置于显示器的中央,也是很容易的。如下: ...
相关推荐
附件代码 博文链接:https://liugang594.iteye.com/blog/153420
Eclipse RCP CNF(Common Navigator)的例子,在导航视图右键可以新建项目,项目图标可以正常显示
Common Navigator Framework学习资料
Common Navigator Framework (CNF) 是一套帮助用户开发基于 eclipse 的内容导航视图的框架,通过这套框架开发者可以迅速地将特定的资源与模型无缝地集成到 eclipse 中,并利用其提供的的 API 以树型的结构展示出来...
CommonNavigatorCommonNavigator
salever_Common_Navigator_Framework_分析
使用CommonNavigator开发资源管理器.doc
对eclipse插件开发中导航视图内容的描述,个人理解
使用CommonNavigator开发资源管理器.pdf
对应我的博客讲解http://blog.csdn.net/sidihuo/article/details/40188203
vue3前端js通过navigator.serial直接连接地磅仪串口显示重量 vue3前端js通过navigator.serial直接连接地磅仪串口显示重量 vue3前端js通过navigator.serial直接连接地磅仪串口显示重量 vue3前端js通过navigator....
SQL Navigator 5.5
CNF 学习必备,很好的资源啊,CNF导航----building-common-navigator-framework-viewer
SQL Navigator一个神级的oracle数据库工具,比pl/sql工具要方便很多,某上市公司指定oracle开发工具,执行几十M的脚本一点不卡。
Eclipse 插件开发,CNF导航----building-common-navigator-framework-viewer
Eclipse 插件开发,CNF导航----building-common-navigator-framework-viewer
OptiX Navigator 6.2
Source-Navigator is a source code analysis tool. With it, you can edit your source code, display relationships between classes and functions and members, and display call trees. You can also build ...