【发布时间】:2012-09-20 11:18:08
【问题描述】:
我正在尝试创建自定义标记视图。在此视图中,我只想将资源限制/过滤到选定项目。此项目名称将动态提供。
例如,在项目浏览器的上下文菜单中,用户可以选择打开自定义标记视图。
如果用户从 project1 中选择自定义标记视图,该视图应该只显示 project1 的标记。
有什么建议吗?
【问题讨论】:
标签: eclipse-pde eclipse-plugin
我正在尝试创建自定义标记视图。在此视图中,我只想将资源限制/过滤到选定项目。此项目名称将动态提供。
例如,在项目浏览器的上下文菜单中,用户可以选择打开自定义标记视图。
如果用户从 project1 中选择自定义标记视图,该视图应该只显示 project1 的标记。
有什么建议吗?
【问题讨论】:
标签: eclipse-pde eclipse-plugin
我做过类似的事情。首先在您的 plugin.xml 中定义一个视图,相应的类必须扩展 MarkerSupportView。像这样的:
public class MarkerView extends MarkerSupportView {
public MarkerView() {
super("com.example.markerEventContentGenerator"); //$NON-NLS-1$
}
}
然后您需要定义新视图中的列以及必须显示的标记类型。这是 plugin.xml 中的一个示例。
<extension
point="org.eclipse.ui.ide.markerSupport">
<markerContentGenerator
id="com.example.markerEventContentGenerator"
name="Custom Marker View">
<markerTypeReference
id="com.example.myMarker"/>
</markerContentGenerator>
<markerField
class="com.example.fields.NameMarkerField"
id="com.example.field.name"
name="Name">
</markerField>
</extension>
NameMarkerField 类必须扩展 MarkerField。另一个虚拟示例:
public class AnnotationNameMarkerField extends MarkerField {
public AnnotationNameMarkerField() {
super();
}
@Override
public String getValue(final MarkerItem item) {
return "Dummy Name";
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.ui.views.markers.MarkerField#getDefaultColumnWidth(org.eclipse
* .swt.widgets.Control)
*/
@Override
public int getDefaultColumnWidth(final Control control) {
return 400;
}
}
现在您必须决定如何使用 id="com.example.myMarker" 创建项目特定标记。
【讨论】:
MarkerView?什么时候创建的?
<markerField 的 ID 应该是什么? I see 有像 id="org.eclipse.ui.ide.resourceField" 这样的标准 ID。我应该选择哪一个?他们还说我必须使用markerFieldReference 而不是markerFieldReference 并在markerContentGenerator 中执行它,而不是它的兄弟。
page.showView("view id")显示视图。此视图 ID 对应于<extension point="org.eclipse.ui.views"> 中的 plugin.xml 中指定的 ID。您可以通过IMarker marker = aResource.createMarker("marker type id"); marker.setAttribute("your column id", value); 添加标记。标记类型是 xml markerContentGenerator 部分中指定的类型,<markerTypeReference id="marker type id"/>。 Eclipse 的典型问题是文档过于零碎。将各个部分联系在一起需要时间。