2014-02-10 1 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 보이는 : 편집기는 MultiPageEditor의 일부이며처럼 보이는

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"); 
    } 
} 

:

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

나는 그것을 알아 냈다.

AbstractGraphicalEditPartXYPolicy이 설치되어 있어야합니다.