RCP:如何移除Search对话框中不需要的项

 

前言

很久没写文章了,准备写一系列关于Eclipse RCP /Plugin的文章。 这些文章都是trouble shooting性质的,不准备写的很细,当你碰到这样的问题,google到时,能帮你把问题解决了,这就ok了。另外有些问题我也是不求甚解的,哈。

 

正文

Search Dialog中可能出现一些你不需要的项,比如“Java Search”,这个项是org.eclipse.jdt.ui贡献的,如果你因为某些需要引用了这个包,比如我需要用到这个包中的org.eclipse.jdt.ui.action.MoveAction,用来在Project Explorer右键菜单添加Move。 那么“Java Search”就会被贡献到Search Dialog中,我们有两个办法去除这些不需要的项:

1,在plugin.xml中添加org.eclipse.ui.activities扩展点来过滤。我读过源代码,通过activities应该是可以生效的,但是我没有成功,可能还是匹配符不对。贴出我的代码,只供参考:

<extension
       point="org.eclipse.ui.activities">
       <activity
    id="com.balabala.JavaSearchPage"
        name="DisableJavaSearch"></activity>
    <activityPatternBinding
          activityId="com.balabalaactivityPatternBinding1"
          isEqualityPattern="true"
          pattern="org\.eclipse\.jdt\.ui/org\.eclipse\.jdt\.ui\.JavaSearchPage">
    </activityPatternBinding>
</extension>

有兴趣的可以参考以下连接自己研究:

http://stackoverflow.com/questions/11188145/how-to-remove-java-search-entry-from-search-group-icon-in-eclipse-pde-using-ac/13293606#13293606

2,通过继承org.eclipse.search.internal.ui.SearchDialog来去除多余的项,重写createPageArea方法,把TabFolder中不需要的TabItem移除掉。

CustomSearchDialog.java:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
protected Control createPageArea(Composite parent) {
    Control control = super.createPageArea(parent);
    Composite composite = (Composite)control;
    Control[] controls = composite.getChildren();
    for(Control c: controls)
    {
        if(c instanceof TabFolder)
        {
            TabFolder tabFolder =(TabFolder)c;
            for(int i=tabFolder.getItemCount()-1;i>=0;i--)
            {
                TabItem item = tabFolder.getItem(i);
                if(!item.getText().equals("File Search"))
                {
                    item.dispose();
                }
            }
        }
    }
    return control;
}

 

然后,需要继承org.eclipse.search.internal.ui.OpenSearchDialogAction, 重写run方法:

CustomSearchDialogAction.java:

1
2
3
4
5
6
7
8
public void run() {
    if (workbenchWindow.getActivePage() == null) {
        SearchPlugin.beep();
        return;
    }
    CustomSearchDialog dialog= new CustomSearchDialog(workbenchWindow, null);
    dialog.open();
}

最后在Menu和toolbar中调用CustomSearchDialogAction。

posted @   Binhua Liu  阅读(1962)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端
点击右上角即可分享
微信分享提示