Как перетащить фигуры из палитры в редактор GEF?

Я работаю над проектом GEF. В этом проекте я хочу перетаскивать фигуры из палитры в редактор GEF. Я попытался добавить несколько слушателей, но все же не могу перетаскивать.

Это мой код:

public class OPMGraphicalEditor extends GraphicalEditorWithFlyoutPalette {

private Resource opdResource;
private ObjectProcessDiagram opd;

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


@Override
protected PaletteViewerProvider createPaletteViewerProvider() {
    return new PaletteViewerProvider(getEditDomain()) {
        @Override
        protected void configurePaletteViewer(PaletteViewer viewer) {
            super.configurePaletteViewer(viewer);
            viewer.addDragSourceListener(new TemplateTransferDragSourceListener(
                    viewer));
        }
    };
}


@SuppressWarnings("deprecation")
private TransferDropTargetListener createTransferDropTargetListener() {
    return new TemplateTransferDropTargetListener(getGraphicalViewer()) {
        @SuppressWarnings("unchecked")
        @Override
        protected CreationFactory getFactory(Object template) {
            return new NodeCreationFactory((Class<OPMObject>) template, getModel());
        }

        private Object getModel() {

            return null;
        }
    };
}


@Override protected void initializeGraphicalViewer() {
    GraphicalViewer viewer = getGraphicalViewer();
    super.initializeGraphicalViewer();
    getGraphicalViewer().setContents(opd);
    getPaletteViewerProvider().getEditDomain().getPaletteViewer().addDragSourceListener(
            new TemplateTransferDragSourceListener(getPaletteViewerProvider().getEditDomain().getPaletteViewer()));

    // listen for dropped parts
    viewer.addDropTargetListener(createTransferDropTargetListener());
}

@Override
protected void setGraphicalViewer(GraphicalViewer viewer) {
    super.setGraphicalViewer(viewer);
    this.getGraphicalViewer().addDropTargetListener(new TemplateTransferDropTargetListener(getGraphicalViewer()));

}

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


@Override
protected PaletteRoot getPaletteRoot() {
    PaletteRoot palette = new PaletteRoot();
    Activator activator = Activator.getDefault();
    IWorkbench workbench = activator.getWorkbench();
    IWorkbenchWindow workbenchWindow = workbench.getActiveWorkbenchWindow();
    ISelectionService selectionService = workbenchWindow
            .getSelectionService();
    ISelection selection = selectionService.getSelection();
    return new OPMGraphicalEditorPalette();

}

@Override public void doSave(IProgressMonitor monitor) {
    if(opdResource == null) {
        return;
    }

    try {
        opdResource.save(null);
    } catch(IOException e) {

        e.printStackTrace();
        opdResource = null;
    }
}

@Override public void init(IEditorSite site, IEditorInput input) throws PartInitException {
    super.init(site, input);

    loadInput(input);
}

private void loadInput(IEditorInput input) {
    OpmPackage.eINSTANCE.eClass(); // This initializes the OPMPackage singleton implementation.
    ResourceSet resourceSet = new ResourceSetImpl();
    if(input instanceof IFileEditorInput) {
        IFileEditorInput fileInput = (IFileEditorInput) input;
        IFile file = fileInput.getFile();
        opdResource = resourceSet.createResource(URI.createURI(file.getLocationURI().toString()));
        try {
            opdResource.load(null);
            ObjectProcessDiagram opd = (ObjectProcessDiagram) opdResource.getContents().get(0);
        }
        catch(IOException e) {
            e.printStackTrace();
            opdResource = null;
        }
    }
}

}


person user123    schedule 04.02.2013    source источник


Ответы (1)


Вы должны сделать две вещи:

  1. Добавьте целевой прослушиватель перетаскивания в графическое средство просмотра: getGraphicalViewer().addDropTargetListener(new TemplateTransferDropTargetListener(getGraphicalViewer()));
  2. Добавьте прослушиватель источника перетаскивания в палитру: getEditDomain().getPaletteViewer().addDragSourceListener( new TemplateTransferDragSourceListener(getEditDomain().getPaletteViewer()));
  3. измените свои инструменты создания на CombinedTemplateCreationEntry

Более подробное объяснение можно найти в запись в блоге, которую я создал по этому случаю

person vainolo    schedule 04.02.2013
comment
Я попробовал, добавив эти 3 вещи, которые вы упомянули выше ... Но все равно это не работает. Я действительно не понимаю, в чем причина. Он не генерирует никаких рисунков в редакторе. Он не отображает никаких рисунков. Я попытался, взяв ваш код только из ваших туториалов..Можете ли вы сказать мне, в чем может быть проблема - person user123; 07.02.2013