Я работаю над проектом 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;
}
}
}
}
2
user123
4 Фев 2013 в 16:33
1 ответ
Лучший ответ
Вам нужно сделать две вещи:
- Добавьте целевой слушатель цели перетаскивания в вашу графическую программу просмотра:
getGraphicalViewer().addDropTargetListener(new TemplateTransferDropTargetListener(getGraphicalViewer()));
- Добавьте в палитру прослушиватель источника перетаскивания:
getEditDomain (). getPaletteViewer (). addDragSourceListener ( новый TemplateTransferDragSourceListener (getEditDomain (). getPaletteViewer ()));
- измените свои инструменты создания на
CombinedTemplateCreationEntry
Более подробное объяснение можно найти в сообщение в блоге, которое я написал для этого случая
2
vainolo
6 Фев 2013 в 03:23
Я попробовал добавить эти 3 вещи, которые вы упомянули выше ... Но все равно он не работает. Я действительно не понимаю, в чем причина. Он не генерирует никаких цифр в редакторе. Он не отображает никаких цифр. Я попытался, взяв ваш код. только из ваших руководств .. Не могли бы вы сказать мне, в чем может быть проблема
– user123
7 Фев 2013 в 15:02
Похожие вопросы
Новые вопросы
eclipse-rcp
По вопросам, связанным с Eclipse Rich Client Platform, которая является общей платформой Java для запуска приложений. Он предоставляет основные блоки для создания многофункционального клиентского приложения с использованием платформы OSGi.