2014-02-10 117 views
1

我有一個簡單的View,代表POJO的TreeViewer。 我需要從視圖中拖動TreeItem並將它們拖放到GEF編輯器(在多頁面編輯器中)。從視圖拖放到GEF編輯器

當我從查看器中拖動項目到編輯器區域時,在偵聽器中調用創建請求,處理拖動和更新請求方法。 但是當我放棄該項目handleDrop/drop不被調用。

View包含:

Transfer[] types = new Transfer[]{TextTransfer.getInstance()}; 
treeViewer.addDragSupport(DND.DROP_MOVE, types, new InstructionDragListener(treeViewer)); 

DragListener樣子:

public class InstructionDragListener implements DragSourceListener { 

    private Viewer viewer; 

    public InstructionDragListener(Viewer viewer) { 
     this.viewer = viewer; 
    } 

    @Override 
    public void dragStart(DragSourceEvent event) { 
     System.out.println("start"); 
     event.doit = true; 
    } 

    @Override 
    public void dragSetData(DragSourceEvent event) { 
     IStructuredSelection selection = (IStructuredSelection) viewer.getSelection(); 
     Instruction ins=null; 

     if (selection.getFirstElement() instanceof Instruction) 
      ins = (Instruction) selection.getFirstElement(); 

     event.data= ins.getID(); 
     System.out.println("data"); 
    } 

    @Override 
    public void dragFinished(DragSourceEvent event) { 
     System.out.println("end"); 
    } 
} 

的編輯器是一個MultiPageEditor的一部分,看起來像:

public class MyGraphicalEditor extends GraphicalEditorWithFlyoutPalette { 

    public static String ID = "MyEditorID"; 

    public MyGraphicalEditor() { 
     setEditDomain(new DefaultEditDomain(this)); 
    } 

    @Override 
    protected void initializeGraphicalViewer() { 
     super.initializeGraphicalViewer(); 
     getGraphicalViewer().setContents(ProjectManager.getInstance().getTestCaseTest()); 
    } 

    @Override 
    protected void configureGraphicalViewer() { 
     super.configureGraphicalViewer(); 
     getGraphicalViewer().setEditPartFactory(new TestCaseEditPartFactory()); 

     getGraphicalViewer().addDropTargetListener(new MyTransferTargetDropListener(getGraphicalViewer())); 
    } 
} 

DropListener樣子:

public class MyTransferTargetDropLsitener extends AbstractTransferDropTargetListener { 

    private MyTransferTagetDropFactory factory = new MyTransferTagetDropFactory(); 

    public MyTransferTargetDropLsitener(EditPartViewer viewer, Transfer xfer) { 
     super(viewer, xfer); 
    } 


    @Override 
    protected Request createTargetRequest() { 
     System.out.println("CREATE REQUEST"); 
     CreateRequest request = new CreateRequest(); 
     request.setFactory(factory); 
     return request; 
    } 
    protected void handleDragOver() { 
     System.out.println("HANDLE DRAG"); 
     super.handleDragOver(); 
    } 

    @Override 
    protected void updateTargetRequest() { 
     System.out.println("UPDATE REQUEST"); 
     System.out.println(getDropLocation().toString()); 
     ((CreateRequest)getTargetRequest()).setLocation(getDropLocation()); 
    } 

    @Override 
    protected void handleDrop() { 
     System.out.println("DROP HANDLED"); 
     super.handleDrop(); 

    } 

    @Override 
    public void drop(DropTargetEvent event) { 
     System.out.println("DROPPED"); 
     super.drop(event); 
    } 
} 

我錯過了什麼?

+0

歡迎來到SO!我編輯了你的問題,以便它有更好的機會得到答案。請查看編輯,並參考幫助中的[ask]和[MCVE](http://stackoverflow.com/help/mcve)以獲取更多解釋和提示,以便更好地提出您的問題。如果有些事情不清楚,請隨時回覆此評論。在你的評論中加入'@ Palec'來通知我,否則我不會知道你回覆了。祝你今天愉快。 – Palec

回答

0

我想通了。

事情是,必須有XYPolicy安裝在特定的AbstractGraphicalEditPart