如何添加工作集来eclipse常见的导航器?

时间:2013-10-10 09:41:38

标签: eclipse-plugin

我希望为使用Common Navigator框架的Eclipse插件添加对工作集的支持。

  • 在Eclipse bugzilla中提到支持
  • Common Navigator的在线手册均未说明如何操作

我不知道从哪里开始,因为它没有扩展点,而工作集实现类都是“内部”。我有一个非常基本的导航器设置,显示默认项目资源和一些实现IFileSystem的其他ITreeContentProvider内容。

2 个答案:

答案 0 :(得分:3)

您可以使用以下方式获取工作集管理器:

IWorkingSetManager manager = PlatformUI.getWorkbench().getWorkingSetManager();

从中得到可见的工作集:

IWorkingSet [] workingSets = manager.getWorkingSets();

可以使用以下方式访问工作集的成员:

IAdaptable [] elements = workingSet.getElements();

因此您可以使用工作集列表作为树查看器的输入,并调整树内容提供程序来处理此问题。

答案 1 :(得分:0)

回想一下,以下是更好的解决方案。与其实现ITreeContentProvider并自己遍历工作集,不如将现有的标准提供程序重用于相同的内容,这样可能会更好。

您可以像这样使用它们:

 <extension
     point="org.eclipse.ui.navigator.viewer">
   <viewerContentBinding 
        viewerId="rascal.navigator">
      <includes>
         <contentExtension pattern="org.eclipse.ui.navigator.resourceContent" />                      
         <contentExtension pattern="org.eclipse.ui.navigator.resources.filters.*"/>
         <contentExtension pattern="org.eclipse.ui.navigator.resources.linkHelper"/>
         <contentExtension pattern="org.eclipse.ui.navigator.resources.workingSets"/>
      </includes>
   </viewerContentBinding>

尤其是org.eclipse.ui.navigator.resources.workingSets是为导航器添加工作集功能的

然后添加您自己的内容将成为添加另一个内容提供程序的问题,该提供程序将忽略工作集和项目以及已经处理过的其他类型的资源,例如像这样:

 <extension
         point="org.eclipse.ui.navigator.navigatorContent">
      <navigatorContent
            activeByDefault="true"
            contentProvider="org.rascalmpl.eclipse.navigator.NavigatorContentProvider"
            id="org.rascalmpl.navigator.searchPathContent"
            labelProvider="org.rascalmpl.eclipse.navigator.NavigatorContentLabelProvider"
            name="Rascal search path"
            priority="normal">
         <triggerPoints>
          <or>
                 <instanceof value="org.eclipse.core.resources.IResource"/>
          </or>
         </triggerPoints>
         <possibleChildren>
            <or>
               <instanceof value="java.lang.Object"/> 
            </or>
         </possibleChildren>
         <actionProvider
               class="org.rascalmpl.eclipse.navigator.NavigatorActionProvider"
               id="org.rascalmpl.navigator.actions">
         </actionProvider>
         <commonSorter
               class="org.rascalmpl.eclipse.navigator.Sorter">
         </commonSorter>

      </navigatorContent>
      <commonWizard
            type="new"
            wizardId="rascal_eclipse.wizards.NewRascalFile">
         <enablement></enablement>
      </commonWizard>
      <commonWizard
            type="new"
            wizardId="rascal_eclipse.projectwizard">
         <enablement></enablement>
      </commonWizard>
   </extension>

,并且在NavigatorContentProvider类中,我们实现了getElementsgetChildren,但仅用于我们自己的其他内容。