naviteContent viewer

2008-01-05
定义自己的Common Navigator三
关键字: common navigator

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));

}

}

};

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值