2

GraphicalEditorWithFlyoutPaletteを拡張するグラフィカルエディタがあります。

異なるマーカーが表示される可能性があるため、マーカーをEditPartに接続する可能性がある場合は便利です。

1つの可能性は、 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();
}

inputは私の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 に答える