我有一个图形编辑器,它扩展了 GraphicalEditorWithFlyoutPalette 。
可能会出现不同的标记,因此如果有可能将标记与 EditPart 连接,那就太好了。
我认为一种可能性是扩展 TableViewer 和相应的单元类。但也许有更好,更容易的方式。
我创建了我的测试标记,如下所示:
IResource resource = (IResource) input.getAdapter(IResource.class);
try
{
IMarker marker = resource.createMarker(IMarker.PROBLEM);
marker.setAttribute(IMarker.TEXT, "text");
marker.setAttribute(IMarker.SEVERITY, IMarker.SEVERITY_ERROR);
marker.setAttribute(IMarker.MESSAGE, "message");
}
catch (CoreException e)
{
e.printStackTrace();
}
输入是我的 IEditorInput 。
答案 0 :(得分:1)
在我的第一次尝试中,我试图扩展 ExtendedMarkersView ,因为它是一个内部类而失败了。 另一种方法是将视图和所有相应的东西写成新的,但它似乎毫无意义。
所以我找到了基于https://stackoverflow.com/a/10501971/390177的解决方法
在创建 IMarker 时,我设置了其他属性来链接相应的数据对象。在对象的帮助下,我可以使用 EditPartRegistry 搜索 AbstractGraphicalEditPart 。
之后,可以在 EditPart 上创建一个选项并显示给它。
@Override
public void selectionChanged(IWorkbenchPart part, ISelection selection) {
IStructuredSelection s = (IStructuredSelection) selection;
if (s.getFirstElement() instanceof MarkerItem) {
MarkerItem marker = (MarkerItem) s.getFirstElement();
if (marker != null && marker.getMarker() != null) {
IMarker iMarker = marker.getMarker();
AbstractGraphicalEditPart editPart = null;
DataObject object ...
editPart = (AbstractGraphicalEditPart) getGraphicalViewer().getEditPartRegistry().get(object);
if (editPart != null) {
StructuredSelection eSelection = new StructuredSelection(editPart);
getGraphicalViewer().setSelection(eSelection);
// once selected if you want to get it so the
// graphicalviewer scrolls to reveal the part on the
// screen
getGraphicalViewer().reveal(editPart);
}
}
} else {
super.selectionChanged(part, selection);
}
}