2

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を使用してから、visit(IResourceDelta delta)関数でIResource resource = delta.getResource()を使用してすべてをIResourceインスタンスとして取得できます。ISelectionListenerに似たものはありますか?

4

2 に答える 2

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

 }

}
于 2015-10-10T02:02:07.360 に答える