使用EditPart连接标记

时间:2012-05-04 08:56:43

标签: resources marker eclipse-plugin eclipse-gef

我有一个图形编辑器,它扩展了 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

1 个答案:

答案 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);
    }
}