簡體   English   中英

從View拖放到GEF編輯器

[英]Drag and drop from View to GEF Editor

我有一個簡單的View帶有一個表示POJO的TreeViewer 我需要將TreeItem從視圖中拖放到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);
    }
}

我想念什么?

我想到了。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM