2

我有一个扩展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

4

1 回答 1

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);
    }
}
于 2012-05-08T15:56:42.533 回答