Eclipse Action学习 2

 Object Action
这种Action是跟弹出的上下文菜单相关的, 因此它主要用在org.eclipse.ui.popupMenus扩展点下的objectContribution 节点中, 这里有几个属性需要做一下说明
:
adaptable:true
表示能将选中对象适配为objectClass中指定的类型

nameFilter:
这个是用来指定哪种文件类型为当前contribution可用, 比如设置为*.java表示当前action只针对java文件
objectClass:
指定contribution只用于那种对象类型
contribution
的其他属性跟前面介绍的大同小异

contribition过滤和可用性的控制
只有当前选中的文件类型是nameFilter指定的类型, 或者选中的对象是objectClass指定的类型,contribution才会在右键菜单中出现,而是否可用则要通过判断选中的对象是否和enablesFor属性中表达式规定的数量, 表达式的定义包括:!表示选中0, ?表示0个或1, +表示1个或多个, multiple, 2+两个或多个, n表示具体个数, *表示任意个

objectContribution还提供visibility节点来控制contribution可见性, 它比通过nameFilter objectClass控制功能更强, 比如要达到和objectClass="org.eclipse.core.resources.IResource"同样的效果可以这样写:

xml 代码

<objectContribution ...   

  <visibility>  

      <objectClass  

         name="org.eclipse.core.resources.IResource"/>  

  visibility>  

   ...the other stuff here...   

objectContribution>  

如果当前contribution只用于可写的对象,可以这样写:

xml 代码

<objectContribution ...>  

   <visibility>  

      <and>  

         <objectClass  

            name="org.eclipse.core.resources.IResource"/>  

         <objectState name="readOnly" value="false"/>  

      and>  

    visibility>  

   ... the other stuff here ...   

objectContribution>  

visibility包括了not, andor逻辑表达式节点以及adaptBoolean表达式节点, adapt节点会先将选中对象适配为指定类型然后给其下级节点使用,比如这里:

xml 代码

<adapt type="org.eclipse.core.resources.IResource">  

   <objectState name="readOnly" value="false"/>  

adapt>  


首先适配成IResource,然后判断其状态,该节点通常和and操作符结合使用, 如果适配器或者引用的类型没有加载,那么将返回EvaluationResult.NOT_LOADED, 如果指定的类型不存在,将抛出ExpressionException 异常
and
节点只有下级子节点表达式都返回true才为true
instanceof
节点 只有选中的对象是指定的名称时才为true, objectClass不同之处在于,它还可以与其他的元素通过andor元素一起使用

not
节点只有在下级节点返回false才为true
objectClass
看上面的例子就知道了

objectState
比较选中的对象的状态是否指定的值
or
节点只要下级节点中有一个为true就返回为true
pluginState
节点对指定的插件的状态进行检测, 这里的状态有两种:installed或者actived, 比如这样写:

xml 代码

<pluginState id="org.eclipse.pde" value="installed"/>   


表示只有org.eclipse.pde插件安装才可见
systemProperty
举个例子就知道怎么用了

xml 代码

<systemProperty name="user.language" value="en"/>  


systemTest
systemProperty大同小异,只不过它可以通过andor与其他的节点联合使用
test
节点举个例子来说吧:

xml 代码

<test  

    property="org.eclipse.debug.ui.projectNature"  

    value="org.eclipse.jdt.core.javanature"/>  


表示只有选中的是java项目下的对象当前contribution才可见, 如果进行比较的property没有加载,将返回EvaluationResult.NOT_LOADED, 这里指定的进行比较的属性能通过使用org.eclipse.core.expressions.propertyTesters进行扩展,具体的实现可参考org.eclipse.debug.internal.ui.ResourceExtender

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值