文档章节

Eclipse插件开发根据需要显示按钮或菜单

素人派
 素人派
发布于 2016/12/31 20:46
字数 596
阅读 26
收藏 0
  • 介绍
有时候我们需要根据特定的情况来决定是否要实现菜单或者按钮,换句话说只有满足特定要求的情况下再显示或者变成可用的。这时候,可以借助Eclipse的表达式框架。 表达式框架是在插件org.eclipse.core.expressions中实现的。 另外,Eclipse的表达式框架还支持表达式的重用。如果某个表达会再多处使用,就不再需要重复定义了。
  • visibleWhen
这个可以用在command、menu子节点下,例如: [codesyntax lang="xml"]
<visibleWhen
      checkEnabled="false">
   <with
         variable="selection">
      <iterate
            ifEmpty="false"
            operator="or">
         <adapt
               type="org.eclipse.core.resources.IResource">
            <or>
               <test property="org.eclipse.core.resources.extension"
                     value="xml"/>
               <test property="org.eclipse.core.resources.projectNature"
                       	value="org.eclipse.m2e.core.maven2Nature" />
            </or>
         </adapt>
      </iterate>
   </with>
</visibleWhen>
[/codesyntax]
  • activeWhen
[codesyntax lang="xml"]
<activeWhen>
   <with
         variable="activePart">
      <instanceof value="org.eclipse.ui.internal.views.markers.ExtendedMarkersView"/>
      <test
            args="any"
            property="org.eclipse.ui.ide.contentGenerator">
      </test>
   </with>
</activeWhen>
[/codesyntax]
  • visibility
可以作用在objectContribution等子节点中,例如: [codesyntax lang="xml"]
<visibility>
  <and>
    <objectState name="open" value="true"/>
    <objectState name="nature" value="org.eclipse.m2e.core.maven2Nature"/>
  </and>
</visibility>
[/codesyntax] [codesyntax lang="xml"]
<visibility>
   <objectState name="name" value="pom.xml"/>
</visibility>
[/codesyntax]
  • selection
可以用在action标签下,例如: [codesyntax lang="xml"]
<selection class="org.eclipse.wst.server.ui.IServerModule" />
<selection class="org.eclipse.wst.server.core.IServer" />
[/codesyntax]
  • enablement
  • 表达式重用(Re-Usable expressions)
要使用表达式需要添加扩展点org.eclipse.core.expressions.definitions,重用的时候使用<reference>标签。例如: [codesyntax lang="xml"]
<extension point="org.eclipse.core.expressions.definitions">
	<definition id="org.acme.navigator.enablement">
		<or>
			<instanceof value="com.acme.navigator.ContainerObject">
			</instanceof>
			<instanceof value="com.acme.navigator.RootObject">
			</instanceof>
			<adapt type="org.eclipse.core.resources.IResource">
				<test property="org.eclipse.core.resources.projectNature"
					value="com.acme.navigator.nature">
				</test>
			</adapt>
		</or>
	</definition>
</extension>
<enablement>
	<reference definitionId="org.acme.navigator.enablement">
	</reference>
</enablement>
[/codesyntax] 可以在任何插件中申明definition,然后就可以在其他任何插件中使用,甚至不需要有依赖关系。
  • 表达式中的操作符
目前,表达式框架支持13中操作。有些是可以包含其他操作符的,例如:adapt。
  1. adapt,检查是否是某个类的子类
  2. and/or/not,将会返回布尔值
  3. count,用于判断集合的数量,不能包含其他操作,可以喝<iterate>联合使用。可以用的包含:*(匹配任何数字,包括0)、?(一个或者没有)、!(没有)、+(一个或者多个)、-NN)(小于个整数)、(NN-(大于一个整数)、NN(等于一个整数)。
  4. equals,检查是否相同
  5. instanceof,是否为某个类的子类
  6. iterate,有两个参数:operator和ifEmpty
  7. reference
  8. resolve
  9. systemTest,使用系统属性做测试结果,java.lang.System.getProperties()
  10. test
  11. with
  • 扩展点 org.eclipse.core.expressions.propertyTesters
[codesyntax lang="xml"]
<extension point="org.eclipse.core.expressions.propertyTesters">
	<propertyTester class="org.acme.PatternPropertyTester"
		id="org.acme.patternPropertyTester" namespace="org.acme"
		properties="matchesPattern, equalsPattern" type="org.eclipse.core.resources.IResource">
	</propertyTester>
</extension>
[/codesyntax]
  • 参考
https://wiki.eclipse.org/Platform_Expression_Framework http://help.eclipse.org/juno/index.jsp?topic=/org.eclipse.platform.doc.isv/guide/workbench_cmd_expressions.htm

本文转载自:http://surenpi.com/2015/08/21/eclipse%e6%8f%92%e4%bb%b6%e5%bc%80%e5%8f%91%e6%a0%b9%e6%8d%ae%e9%9c...

上一篇: Maven插件介绍
下一篇: Java泛型
素人派
粉丝 26
博文 1907
码字总数 10223
作品 6
东城
程序员
私信 提问

暂无文章

nginx学习笔记

中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯。 是连接两个独立应用程序或独立系统的软件。 web请求通过中间件可以直接调用操作系统,也可以经过中间件把请求分发到多...

码农实战
今天
5
0
Spring Security 实战干货:玩转自定义登录

1. 前言 前面的关于 Spring Security 相关的文章只是一个预热。为了接下来更好的实战,如果你错过了请从 Spring Security 实战系列 开始。安全访问的第一步就是认证(Authentication),认证...

码农小胖哥
今天
9
0
JAVA 实现雪花算法生成唯一订单号工具类

import lombok.SneakyThrows;import lombok.extern.slf4j.Slf4j;import java.util.Calendar;/** * Default distributed primary key generator. * * <p> * Use snowflake......

huangkejie
昨天
12
0
PhotoShop 色调:RGB/CMYK 颜色模式

一·、 RGB : 三原色:红绿蓝 1.通道:通道中的红绿蓝通道分别对应的是红绿蓝三种原色(RGB)的显示范围 1.差值模式能模拟三种原色叠加之后的效果 2.添加-颜色曲线:调整图像RGB颜色----R色增强...

东方墨天
昨天
11
1
将博客搬至CSDN

将博客搬至CSDN

算法与编程之美
昨天
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部