restrict the ElementTreeSelectionDialog

我的未来我决定 提交于 2019-12-12 05:12:39

问题


I wanna to implement Workspace Browse. I write the below code.

ElementTreeSelectionDialog dialog = new ElementTreeSelectionDialog(
            Display.getDefault().getActiveShell(),
            new WorkbenchLabelProvider(),
            new BaseWorkbenchContentProvider());

dialog.setInput(ResourcesPlugin.getWorkspace().getRoot());
dialog.open();

How can I change the code to only root elements (projects or folders) that contains ".ecore" file shown? And when the user collapse any root elements only .ecore files shown?


回答1:


You can add a viewer filter to the dialog to restrict what is shown.

dialog.addFilter(new FileExtensionFilter("ecore"));

adds a filter.

A file extension filter would look something like:

public class FileExtensionFilter extends ViewerFilter {

  private String fTargetExtension;

  public FileExtensionFilter(String targetExtension) {
    fTargetExtension = targetExtension;
  }

  @Override
  public boolean select(Viewer viewer, Object parent, Object element) {
    if (element instanceof IFile) {
      return ((IFile)element).getName().toLowerCase().endsWith("." + fTargetExtension); 
    }

    if (element instanceof IProject && !((IProject)element).isOpen())
      return false;

    if (element instanceof IContainer) { // i.e. IProject, IFolder
      try {
        IResource[] resources = ((IContainer)element).members();
        for (IResource resource : resources) {
          if (select(viewer, parent, resource))
            return true;
        }
      } catch (CoreException e) {
        // Ignore
      }
    }

    return false;  
  }
}

This is based on org.eclipse.pde.internal.ui.util.FileExtensionFilter



来源:https://stackoverflow.com/questions/42187588/restrict-the-elementtreeselectiondialog

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!