2013-07-19 39 views

回答

0

爲了應對砸你必須安裝在瀏覽器本身的org.eclipse.jface.util.TransferDropTargetListener的實現,理解org.eclipse.swt.dnd.TextTransfer類型的轉移和創建某種org.eclipse.gef.Request可以通過安裝在一個org.eclipse.gef.EditPolicy被處理的GEF編輯部分觀衆的事件目標org.eclipse.gef.EditPart

您必須明白,RequestEditPolicy都允許您以EditPart爲基礎自定義丟棄行爲。因此,我可以告訴你一個例子,實際上是全功能的,但隨意定製,以您的實際需要。

首先創建TransferDropTargetListener

public class TextTransferDropTargetListener extends AbstractTransferDropTargetListener { 

    public TextTransferDropTargetListener(EditPartViewer viewer) { 
     super(viewer, TextTransfer.getInstance()); 
    } 

    @Override 
    protected void handleDragOver() { 
     getCurrentEvent().feedback = DND.FEEDBACK_SCROLL | DND.FEEDBACK_EXPAND; 
     super.handleDragOver(); 
    } 

    @Override 
    protected Request createTargetRequest() { 
     return new ChangeBoundsRequest(REQ_ADD); 
    } 

    @Override 
    protected void updateTargetRequest() { 
     ChangeBoundsRequest request = (ChangeBoundsRequest) getTargetRequest(); 
     request.setEditParts(Collections.EMPTY_LIST); 
     request.setLocation(getDropLocation()); 
    } 

    @Override 
    protected void handleDrop() { 
     super.handleDrop(); 
     if (getCurrentEvent().detail != DND.DROP_NONE) { 
      getViewer().setSelection(StructuredSelection.EMPTY); 
      getViewer().getControl().setFocus(); 
     } 
    } 

    @Override 
    protected Command getCommand() { 
     String text = (String) getCurrentEvent().data; 
     List<IEntityPart> editParts = new ArrayList<IEntityPart>(); 

     // 
     // using the 'text' variable you have to create 
     // a new EditPart that would eventually replace the old one. 
     // 
     editParts.add(createNewLabelPart()); 

     ChangeBoundsRequest request = (ChangeBoundsRequest) getTargetRequest(); 
     request.setEditParts(editParts); 

     return super.getCommand(); 
    } 
} 

然後使用下面的語句安裝在圖形瀏覽器構造的聽衆:

addDropTargetListener(new TextTransferDropTargetListener(this)); 

終於確保了EditPolicy,理解REQ_ADD類型的請求(也許你已經增加了一個延伸LayoutEditPolicyContainerEditPolicy)被安裝在目標EditPart,這是通常的在AbstractEditPart.createEditPolicies() LY完成。

爲了更好地理解責任的鏈條,我建議你看看超級實現TransferDropTargetListener.getCommand()方法。