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に似たものはありますか?