【问题标题】:Start listening to user selections on Eclipse start-up在 Eclipse 启动时开始监听用户选择
【发布时间】:2017-04-03 17:05:26
【问题描述】:

我正在开发一个 Eclipse 插件,用于对两个程序执行等价检查。一旦用户在项目浏览器中选择了两个程序,“初始灰显”图标就会被启用,用户可以点击它进行等价检查。

问题是,当我在 Eclipse 中安装插件时,它不会听取用户的选择。不知何故,我必须在 Eclipse 启动时“激活”我的选择类。为此,我使用了一个实现 IStartup 的类。

如果需要,这是我的选择类;

import java.util.ArrayList;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.ISelectionListener;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.part.ViewPart;

public class SelectionView extends ViewPart{

static ArrayList<String> paths=new ArrayList<>(2);

private ISelectionListener listener = new ISelectionListener() {
    public void selectionChanged(IWorkbenchPart sourcepart, ISelection selection) {
        if (sourcepart != SelectionView.this) {
            showSelection(sourcepart, selection);
        }
    }
};

public void showSelection(IWorkbenchPart sourcepart, ISelection selection) {
    if (selection instanceof IStructuredSelection) {        
        IStructuredSelection ss = (IStructuredSelection) selection;
        Object[] ob=ss.toArray();
        String path=getPath().substring(0,getPath().lastIndexOf('/'));
        String file=null;
        for(int i=0;i<ob.length;i++){
            if((file=ob[i].toString()).endsWith(".c")){
                paths.add(0,path+"/"+file);
                if(paths.size()>=2){
                    Handler.return_val=true;
                    Handler.arg1=paths.get(0);
                    Handler.arg2=paths.get(1);
                }
            }
        }

    }

}
public String getPath(){
    IWorkbenchPart workbenchPart = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActivePart(); 
    IFile file = (IFile) workbenchPart.getSite().getPage().getActiveEditor().getEditorInput().getAdapter(IFile.class);
    String path=ResourcesPlugin.getWorkspace().getRoot().getLocation().toString()+file.getFullPath();
    return path;
    }   
public void createPartControl(Composite parent) {   
    getSite().getWorkbenchWindow().getSelectionService().addSelectionListener(listener);
    }

public void dispose() {
    getSite().getWorkbenchWindow().getSelectionService().removeSelectionListener(listener);
    super.dispose();
    }
@Override
public void setFocus() {}

}

有人可以帮助我如何在 Eclipse 启动时“激活”这个类吗?也就是在IStartup接口的earlyStartup()方法中写什么代码,Eclipse一启动就开始监听用户选择?

谢谢!

【问题讨论】:

  • 您在此处显示的代码都是视图的一部分,您无法在 earlyStartup 中设置作为视图一部分的侦听器。您必须重构此代码,或者只在视图打开时检查选择。
  • @greg-449,有没有其他方法可以在不打开视图的情况下收听选择?请原谅我的天真,但我对 Eclipse 插件开发很陌生。但是我确实理解您所写的内容,在视图打开之前,我无法听取选择。您能建议我如何修改此代码以在早期启动时收听选择吗?
  • @greg-449 我想出了一种方法来使用您在同一问题上的许多其他答案之一。谢谢!

标签: java eclipse eclipse-plugin eclipse-rcp


【解决方案1】:

您有自己的激活器,您可以在激活器启动方法上挂钩工作区选择服务。

【讨论】:

  • 您可以从 eclipse 内置的上下文菜单激活中找到最佳实践的代码。
猜你喜欢
  • 2016-02-27
  • 1970-01-01
  • 1970-01-01
  • 2015-12-20
  • 2020-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-19
相关资源
最近更新 更多