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



我正试图在我的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/cxSource。。。以及任何其他可以成为项目一部分的东西,有没有一种通用的方法来获得它所属的项目?

对于IResourceChangeListener,您可以使用IResource DeltaVisitor,然后可以使用visit(IResourcyDelta-delta)函数中的:IResoursourceresource=delta.getResource()将所有内容作为IResources实例获取。ISelectionListener有类似的东西吗?

http://www.eclipsezone.com/articles/what-is-iadaptable/

http://wiki.eclipse.org/FAQ_How_do_I_use_IAdaptable_and_IAdapterFactory%3F

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!!
}
}
}
}

相关内容

最新更新