我希望为使用Common Navigator框架的Eclipse插件添加对工作集的支持。
我不知道从哪里开始,因为它没有扩展点,而工作集实现类都是“内部”。我有一个非常基本的导航器设置,显示默认项目资源和一些实现IFileSystem
的其他ITreeContentProvider
内容。
答案 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类中,我们实现了getElements
和getChildren
,但仅用于我们自己的其他内容。