blob: e87b3b6dfbf24f2b187bcfa408fe0c3f7701745d [file] [log] [blame]
package org.eclipse.gmf.examples.runtime.diagram.logic.internal.ui.parts;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.edit.ui.dnd.LocalTransfer;
import org.eclipse.gmf.examples.runtime.diagram.logic.semantic.SemanticPackage;
import org.eclipse.gmf.runtime.diagram.ui.parts.DiagramDropTargetListener;
import org.eclipse.gmf.runtime.diagram.ui.resources.editor.ide.editor.FileDiagramEditorWithFlyoutPalette;
import org.eclipse.jface.util.TransferDropTargetListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.dnd.DropTargetEvent;
import org.eclipse.swt.dnd.TransferData;
public class LogicNotationEditor
extends FileDiagramEditorWithFlyoutPalette {
private static final String EDITING_DOMAIN_ID = "org.eclipse.gmf.examples.runtime.diagram.logicEditingDomain"; //$NON-NLS-1$
private static final List SUPPORTED_DRAG_DROP_ECLASSES = new ArrayList();
static {
SUPPORTED_DRAG_DROP_ECLASSES.add(SemanticPackage.eINSTANCE.getLED());
SUPPORTED_DRAG_DROP_ECLASSES.add(SemanticPackage.eINSTANCE.getAndGate());
SUPPORTED_DRAG_DROP_ECLASSES.add(SemanticPackage.eINSTANCE.getOrGate());
SUPPORTED_DRAG_DROP_ECLASSES.add(SemanticPackage.eINSTANCE.getXORGate());
SUPPORTED_DRAG_DROP_ECLASSES.add(SemanticPackage.eINSTANCE.getCircuit());
}
protected String getEditingDomainID() {
return EDITING_DOMAIN_ID;
}
protected void initializeGraphicalViewer() {
super.initializeGraphicalViewer();
getDiagramGraphicalViewer().addDropTargetListener(
(TransferDropTargetListener) new DiagramDropTargetListener(getDiagramGraphicalViewer(), LocalTransfer.getInstance()) {
protected List getObjectsBeingDropped() {
TransferData[] data = getCurrentEvent().dataTypes;
List eObjects = new ArrayList();
for (int i=0; i<data.length; i++) {
if (LocalTransfer.getInstance().isSupportedType(data[i])) {
IStructuredSelection selection = (IStructuredSelection)LocalTransfer.getInstance().nativeToJava(data[i]);
eObjects.addAll(selection.toList());
}
}
return eObjects;
}
public boolean isEnabled(DropTargetEvent event) {
if (super.isEnabled(event)) {
Object modelObj = getViewer().getContents().getModel();
if (modelObj instanceof EObject) {
List eObjects = getDropObjectsRequest().getObjects();
if (eObjects == null)
return false;
for (Iterator i = eObjects.iterator(); i.hasNext();) {
Object o = i.next();
if (!(o instanceof EObject))
return false;
if (!SUPPORTED_DRAG_DROP_ECLASSES.contains(((EObject)o).eClass()))
return false;
}
return true;
}
}
return false;
}
});
}
}