2012-09-13 37 views
2

我想在我的eclipse插件中實現一個ISelectionListener,它將跟蹤我的項目瀏覽器中的選擇並告訴我哪些項目被選中。因此,它與構建工具欄按鈕找出每次選擇構建哪些項目的方式相同。我實現了這個監聽器,但只有當用戶點擊實際項目而不是項目下的任何其他項目時(如源代碼,文件夾,包...),我纔可以選擇項目。我的代碼是:實現一個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,然後您可以在訪問(IResourceDelta delta)函數中使用IResource resource = delta.getResource()獲取所有IResource實例。 ISelectionListener是否有類似的東西?

回答

0

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

如果你想控制基於從Project Explorer的元素的選擇一些動作,我們可以通過註冊服務註冊後選擇更改。

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

} 

} 
相關問題