2012-05-04 29 views
2

我有一個圖形編輯器,它擴展了GraphicalEditorWithFlyoutPalette用EditPart連接標記器

可能會出現不同的標記,所以如果有可能將標記與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

在我的第一次嘗試中,我試圖擴展ExtendedMarkersView,由於它是內部類而失敗。
另一種方法是編寫視圖和所有相應的東西新的,但它似乎是沒有意義的。

所以我找到了一個基於https://stackoverflow.com/a/10501971/390177的工作。
在創建IMarker時,我設置了其他屬性來鏈接相應的數據對象。在對象的幫助下,我可以搜索AbstractGraphicalEditPartEditPartRegistry
之後,可以在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); 
    } 
}