实现ISelectionListener以监视项目资源管理器中的选定项目

时间:2012-09-13 16:21:04

标签: java eclipse eclipse-plugin eclipse-rcp eclipse-cdt

我正在尝试在我的eclipse插件中实现一个ISelectionListener,它将跟踪项目资源​​管理器中的选择并告诉我选择了哪些项目。因此,它与构建工具栏按钮找出每次选择要构建的项目的方式相同。我实现了那个监听器,但只有当用户点击实际项目而不是项目下的任何其他项目(如源代码,文件夹,包......)时,我才能选择项目,我的代码是:

    @Override
public void selectionChanged(IWorkbenchPart part, ISelection selection) {
    Object[] allselections= null;
    selectedProjects.clear();
    // TODO Auto-generated method stub

    if(selection instanceof IStructuredSelection) {
        //Object element = ((IStructuredSelection)selection).getFirstElement();
        allselections = ((IStructuredSelection)selection).toArray();
        for(Object element: allselections){

            if (element instanceof IResource) {
                selectedProjects.add(((IResource)element).getProject());

        }
    }
};

当元素不是IResource的实例并且是CModelManager,来自CDT的cSource / cxxSource ......以及可以作为项目一部分的任何其他内容时,是否有通用的方法来获取它所属的项目?

对于IResourceChangeListener,您可以使用IResourceDeltaVisitor,然后您可以使用以下内容将所有内容作为IResource实例获取:访问(IResourceDelta delta)函数中的IResource resource = delta.getResource()。 ISelectionListener有类似的东西吗?

2 个答案:

答案 0 :(得分:2)

答案 1 :(得分:0)

http://exploreeclipse.blogspot.com/2015/05/listening-to-project-explorer-changes.html

如果您想根据项目资源管理器中元素的选择来控制某些操作,我们可以通过服务注册表注册帖子选择更改。

//Register listener
ISelectionService ss = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getSelectionService();

ProjectExplorerSelectionListener selectionListener = new ProjectExplorerSelectionListener();
ss.addPostSelectionListener(IPageLayout.ID_PROJECT_EXPLORER, selectionListener);



//Listener
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.ui.ISelectionListener;
import org.eclipse.ui.IWorkbenchPart;

class ProjectExplorerSelectionListener implements ISelectionListener
{
 public void selectionChanged(IWorkbenchPart part, ISelection newSelection)
 {
  if (newSelection instanceof IStructuredSelection)
  {
   Object element = ((IStructuredSelection) newSelection).getFirstElement();
   if (element instanceof IAdaptable)
   {
    IResource resource = (IResource) ((IAdaptable) element).getAdapter(IResource.class);
    final IProject project = resource.getProject();

    //do your action here!!
   }
  }

 }

}