没有姚明高,没有华仔帅
努力啊,奋斗!
在Eclipse中去掉多余的UI组件的几个方法
Eclipse的扩展机制是其一个重要特色,但随着Eclipse功能越做越强,插件越来越多,你会发现GUI上的图标越来越多,Menu,toolbar,context menu都被占满了,其实很多item并不是我们需要的,但是contribute这些item的插件我们是需要的,那怎么去掉它们扩展的那些菜单项呢?
1.在Plugin.xml中定制
这是最简单的办法,很多时候我们自己想写代码来去掉一些菜单项,但效果并不好.所以能在Plugin.xml中定制的,我们就 尽量写在plugin.xml里面.下面举一个右键菜单的例子:
扩展右键菜单需要扩展org.eclipse.ui.popupMenus扩展点,我们一般都在它下面new一个action,但这个action扩展之后不管在 任何界面都会出现,如果我们想在某些条件下隐藏掉它该怎么办?仔细观察下org.eclipse.ui.popupMenus扩展点,其实我们还可以新建objectContribution扩展
<extension
point="org.eclipse.ui.popupMenus">
<objectContribution
id="my.example.objectContribution"
nameFilter="*example*"
objectClass="java.io.File">
<action
class="my.example.MyAction"
id="my.example.MyAction"
label="Exe"
menubarPath="additional">
</action>
</objectContribution>
</extension>
objectContribution里面也包含一个action,但这个action在popupmenu里出现是有条件的:我们给它定义了一个nameFilter, 只有当selection()的path中包含了"example"才会显示,否则这个action是不会出现在 popupmenu里的.这里的selection假设选中的是一个File,如果选中的是你自己写的类,那namefilter会在你的类的toString方法里面找keyword.
2.使用Eclipse的Activities扩展
plugin.xml并不能解决所有问题,当我们实在没有办法在plugin.xml中限制某些extension的出现的时候,可以考虑使用Eclipse的Activities.Activities的官方定义大家可以google一下eclipse的help.我个人的理解就是它可以和perspective一样控制UI的显示,但是Perspective设计的太易于扩展了,假如Plugin A在perspective上扩展了一个UI,那么Plugin B在每次进入这个perspective的时候就一定可以看得见它,而且在Eclipse的扩展机制下,Plugin B是没有权利去删了Plugin A的contribution的(Eclipse的ExtensionRegistry倒是提供了一个removeExtension方法,但运行的时候会报错).在这样的情况下,Activities的价值就体现出来了,你只要给它一个Extension的id,它就可以帮你把这个Extension disable掉.例如:
<extension
point="org.eclipse.ui.activities">
<activity
id="my.example.activity"
name="WizardActivity">
</activity>
<activityPatternBinding
activityId="my.example.activity"
pattern="my\.example/mywizard">
</activityPatternBinding>
</extension>
比较重要的是activityPatternBinding中的pattern属性,它是由plugin id + "/" + local-id组成.比如在插件my.example中扩展了 org.eclipse.ui.newWizards,id是mywizard,那么上面这个activityPatternBinding就会disable掉my.example的mywizard扩展,你在 GUI中就看不见这个wizard了.pattern是支持正则表达式的,所以如果有"."的话需要用转义字符\.注意,这里的disable的意思并不是说我把mywizard这个扩展删掉了,而是屏蔽了它,mywizard仍然在 ExtensionRegistry中.
3.用代码来动态控制UI
方法2只是隐藏掉一些扩展,但是有一些需求并不是简单的隐藏就可以了,我最近碰到的一个需求就是:有一个flag,只有当flag==1的时候扩展是可见的,否则是不可见的,需要disable这个扩展.这时就必须要加一些代码才能实现了,还是以方法2中的mywizard为例:
IWorkbenchActivitySupport workbenchActivitySupport = PlatformUI.getWorkbench().getActivitySupport();
IActivityManager activityManager = workbenchActivitySupport.getActivityManager();
Set enabledActivityIds = new HashSet(activityManager.getEnabledActivityIds());
if(flag==1)
{
if (enabledActivityIds.add("my.example.activity"))
workbenchActivitySupport.setEnabledActivityIds(enabledActivityIds);
}
else{
if(enabledActivityIds.remove("my.example.activity"))
workbenchActivitySupport.setEnabledActivityIds(enabledActivityIds);
}
Activities可以是enable或者disable的,当你在plugin.xml中定义好了一个Activity,缺省它是disable的,就是说activityPatternBinding 匹配的扩展是会被disable的,但你也可以把Activities设成enable的(在plugin.xml或者用代码都可以设置),它匹配的扩展是可以正常使用的.
在上面的code sample中,我们通过activityManager.getEnabledActivityIds()得到所有enable的Activities.如果flag==1,那my.example.activity 也应该被加入到enable Activities中,这样mywizard就可以显示在界面上,反之,就要在enable Activities中remove掉my.example.activity,它就变成
disable,会把mywizard隐藏.
posted on 2009-07-26 15:59
小牛小虾
阅读(2024)
评论(0)
编辑
收藏
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
知识库
C++博客
博问
管理
Powered by:
BlogJava
Copyright © 小牛小虾
<
2024年11月
>
日
一
二
三
四
五
六
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
导航
BlogJava
首页
新随笔
联系
聚合
管理
统计
随笔 - 25
文章 - 1
评论 - 26
引用 - 0
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(6)
给我留言
查看公开留言
查看私人留言
随笔档案
2010年12月 (1)
2010年7月 (2)
2010年4月 (1)
2009年7月 (1)
2009年6月 (1)
2009年5月 (1)
2009年2月 (1)
2008年12月 (1)
2008年10月 (1)
2008年8月 (2)
2008年5月 (2)
2007年7月 (2)
2007年6月 (1)
2007年4月 (1)
2007年1月 (1)
2006年12月 (3)
2006年11月 (1)
2006年10月 (2)
文章档案
2007年2月 (1)
eclipse
rcp
(rss)
搜索
最新评论
1. re: 定制Eclipse的Content assist(代码补全),比如空格键不上屏[未登录]
好文章 ,不过记得要用eclpse的SE版本,不能用EE版本。EE版本导入的工程不一样
--桃子
2. re: 定制Eclipse的Content assist(代码补全),比如空格键不上屏
怎么我找不到src这个文件夹的
--Milanor
3. re: 定制Eclipse的Content assist(代码补全),比如空格键不上屏
评论内容较长,点击标题查看
--小牛小虾
4. re: 定制Eclipse的Content assist(代码补全),比如空格键不上屏
@bluesky
你放心,这段code我都自己试过了,我的eclipse跑了一个多月都没问题.'='其实就是=号的ascii码了,当然可以用==或!=来判断
--小牛小虾
5. re: 定制Eclipse的Content assist(代码补全),比如空格键不上屏
My Pleasure!I am very glad to hear that it really help you.@Christain Louboutin
--小牛小虾
阅读排行榜
1. 定制Eclipse的Content assist(代码补全),比如空格键不上屏(5796)
2. java生成xml文件的时候如何控制xml的缩进格式(3969)
3. InstallShield InstallAnywhere 培训要点记录(二) (3347)
4. Eclipse中如何消除快捷键定义冲突(keybinding conflict)(3294)
5. hotmail邮箱无法登录的解决办法(3097)
评论排行榜
1. 定制Eclipse的Content assist(代码补全),比如空格键不上屏(8)
2. java生成xml文件的时候如何控制xml的缩进格式(5)
3. Eclipse的奇怪问题总结(不断更新)(3)
4. GEF中同时使用两个Router(2)
5. InstallShield InstallAnywhere 培训要点记录(一)(2)