Eclipse rcp 如何将图形从调色板拖放到GEF编辑器中?

Eclipse rcp 如何将图形从调色板拖放到GEF编辑器中?,eclipse-rcp,eclipse-emf,eclipse-gef,Eclipse Rcp,Eclipse Emf,Eclipse Gef,我正在从事GEF项目。在该项目中,我想将图形从调色板拖放到GEF编辑器中。我尝试添加一些侦听器,但仍然无法拖放 这是我的代码: public class OPMGraphicalEditor extends GraphicalEditorWithFlyoutPalette { private Resource opdResource; private ObjectProcessDiagram opd; public OPMGraphicalEditor() { setEditDoma

我正在从事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;
        }
    }
}
public类OPMGraphicalEditor使用flyoutpalete扩展Graphicaleditor{
私有资源;
私有对象流程图opd;
公共OPMGraphicalEditor(){
setEditDomain(新的DefaultEditDomain(this));
}
@凌驾
受保护的PaletteViewerProvider createPaletteViewerProvider(){
返回新的PaletteViewerProvider(getEditDomain()){
@凌驾
受保护的无效配置PaletteViewer(PaletteViewer){
super.configurePaletteViewer(查看器);
viewer.addDragSourceListener(新模板TransferDragSourceListener(
观众),;
}
};
}
@抑制警告(“弃用”)
私有TransferDropTargetListener createTransferDropTargetListener(){
返回新的TemplateTransferDropTargetListener(getGraphicalViewer()){
@抑制警告(“未选中”)
@凌驾
受保护的CreationFactory getFactory(对象模板){
返回新的NodeCreationFactory((类)模板,getModel());
}
私有对象getModel(){
返回null;
}
};
}
@重写受保护的无效初始值graphicalviewer(){
GraphicalViewer=getGraphicalViewer();
super.initializeGraphicalViewer();
getGraphicalViewer().setContents(opd);
getPaletteViewerProvider().getEditDomain().getPaletteViewer().addDragSourceListener(
新的TemplateTransferDragSourceListener(getPaletteViewerProvider().getEditDomain().getPaletteViewer());
//听有没有掉下来的零件
addDropTargetListener(createTransferDropTargetListener());
}
@凌驾
受保护的无效设置GraphicalViewer(GraphicalViewer){
super.setGraphicalViewer(查看器);
这个.getGraphicalViewer().addDropTargetListener(新模板TransferDropTargetListener(getGraphicalViewer());
}
@覆盖受保护的无效配置GraphicalViewer(){
super.configureGraphicalViewer();
getGraphicalViewer().setEditPartFactory(新的OPMEditPartFactory());
}
@凌驾
受保护的PaletteRoot getPaletteRoot(){
PaletteRoot调色板=新PaletteRoot();
Activator Activator=Activator.getDefault();
IWorkbench workbench=activator.getWorkbench();
IWorkbenchWindow workbenchWindow=workbench.getActiveWorkbenchWindow();
ISelectionService selectionService=工作台窗口
.getSelectionService();
ISelection selection=selectionService.getSelection();
返回新的opmgraphicaleditorpalete();
}
@覆盖公共void doSave(IProgressMonitor监视器){
if(opdResource==null){
返回;
}
试一试{
opdResource.save(空);
}捕获(IOE异常){
e、 printStackTrace();
opdResource=null;
}
}
@重写公共void init(IEditorSite,IEditorInput输入)引发PartInItemException{
super.init(站点,输入);
加载输入(输入);
}
专用void加载输入(IEditorInput输入){
OpmPackage.eINSTANCE.eClass();//这将初始化OpmPackage单例实现。
ResourceSet ResourceSet=new ResourceSetImpl();
if(IFileEditorInput的输入实例){
IFileEditorInputFileInput=(IFileEditorInput)输入;
IFile file=fileInput.getFile();
opdResource=resourceSet.createResource(URI.createURI(file.getLocationURI().toString());
试一试{
opdResource.load(null);
ObjectProcessDiagram opd=(ObjectProcessDiagram)opdResource.getContents().get(0);
}
捕获(IOE异常){
e、 printStackTrace();
opdResource=null;
}
}
}

}你必须做两件事:

  • 向图形查看器中添加目标拖放目标侦听器:
    getGraphicalViewer().addDropTargetListener(新模板TransferDropTargetListener(getGraphicalViewer())
  • 将拖动源侦听器添加到选项板:
    getEditDomain().getPaletteViewer().addDragSourceListener(
    新的TemplateTransferDragSourceListener(getEditDomain().getPaletteViewer())
  • 将您的创建工具更改为
    CombinedTemplateCreationEntry

  • 中可以找到更全面的解释,我尝试添加了你上面提到的3个东西…但仍然不起作用。我真的不明白原因是什么。它没有在编辑器上生成任何图形。它没有显示任何图形。我试着只从教程中获取代码。你能告诉我可能的错误吗问题