Eclipse rcp 如何将图形从调色板拖放到GEF编辑器中?
我正在从事GEF项目。在该项目中,我想将图形从调色板拖放到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
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个东西…但仍然不起作用。我真的不明白原因是什么。它没有在编辑器上生成任何图形。它没有显示任何图形。我试着只从教程中获取代码。你能告诉我可能的错误吗问题