JDT:Choose Source Container Dialog(选择src目录的功能)

来源:互联网 发布:直通车关键词软件 编辑:程序博客网 时间:2024/05/29 09:26

源码位于org.eclipse.jdt.ui.wizards.NewContainerWizardPage类中,注意一下ElementTreeSelectionDialog对话框的使用。

// ------------- choose source container dialog/** * Opens a selection dialog that allows to select a source container. * * @return returns the selected package fragment root  or <code>null</code> if the dialog has been canceled. * The caller typically sets the result to the container input field. * <p> * Clients can override this method if they want to offer a different dialog. * </p> * * @since 3.2 */protected IPackageFragmentRoot chooseContainer() {IJavaElement initElement= getPackageFragmentRoot();Class[] acceptedClasses= new Class[] { IPackageFragmentRoot.class, IJavaProject.class };TypedElementSelectionValidator validator= new TypedElementSelectionValidator(acceptedClasses, false) {public boolean isSelectedValid(Object element) {try {if (element instanceof IJavaProject) {IJavaProject jproject= (IJavaProject)element;IPath path= jproject.getProject().getFullPath();return (jproject.findPackageFragmentRoot(path) != null);} else if (element instanceof IPackageFragmentRoot) {return (((IPackageFragmentRoot)element).getKind() == IPackageFragmentRoot.K_SOURCE);}return true;} catch (JavaModelException e) {JavaPlugin.log(e.getStatus()); // just log, no UI in validation}return false;}};acceptedClasses= new Class[] { IJavaModel.class, IPackageFragmentRoot.class, IJavaProject.class };ViewerFilter filter= new TypedViewerFilter(acceptedClasses) {public boolean select(Viewer viewer, Object parent, Object element) {if (element instanceof IPackageFragmentRoot) {try {return (((IPackageFragmentRoot)element).getKind() == IPackageFragmentRoot.K_SOURCE);} catch (JavaModelException e) {JavaPlugin.log(e.getStatus()); // just log, no UI in validationreturn false;}}return super.select(viewer, parent, element);}};StandardJavaElementContentProvider provider= new StandardJavaElementContentProvider();ILabelProvider labelProvider= new JavaElementLabelProvider(JavaElementLabelProvider.SHOW_DEFAULT);ElementTreeSelectionDialog dialog= new ElementTreeSelectionDialog(getShell(), labelProvider, provider);dialog.setValidator(validator);dialog.setComparator(new JavaElementComparator());dialog.setTitle(NewWizardMessages.NewContainerWizardPage_ChooseSourceContainerDialog_title);dialog.setMessage(NewWizardMessages.NewContainerWizardPage_ChooseSourceContainerDialog_description);dialog.addFilter(filter);dialog.setInput(JavaCore.create(fWorkspaceRoot));dialog.setInitialSelection(initElement);dialog.setHelpAvailable(false);if (dialog.open() == Window.OK) {Object element= dialog.getFirstResult();if (element instanceof IJavaProject) {IJavaProject jproject= (IJavaProject)element;return jproject.getPackageFragmentRoot(jproject.getProject());} else if (element instanceof IPackageFragmentRoot) {return (IPackageFragmentRoot)element;}return null;}return null;}说明:IPackageFragmentRoot接口表示一组包段,并将各段映射至底层资源,它可以是文件夹、JAR或ZIP文件。此处是返回源码包,判断如下:(((IPackageFragmentRoot)element).getKind() == IPackageFragmentRoot.K_SOURCE


 

原创粉丝点击