package net.ms.designer.editors.componentdetail.dnd; import net.ms.designer.editors.componentdetail.models.MsElementFactory; import net.ms.designer.editors.componentdetail.models.ChildTable; import net.ms.designer.editors.componentdetail.models.CommonField; import net.ms.designer.editors.componentdetail.models.FlowField; import net.ms.designer.editors.componentdetail.models.Table; import org.eclipse.draw2d.geometry.Point; import org.eclipse.gef.EditPart; import org.eclipse.gef.EditPartViewer; import org.eclipse.gef.dnd.TemplateTransferDropTargetListener; import org.eclipse.gef.requests.CreationFactory; import org.eclipse.swt.dnd.DND; public class LogicTemplateTransferDropTargetListener extends TemplateTransferDropTargetListener { protected void handleDragOver() { org.eclipse.swt.graphics.Point p = getViewer().getControl().toControl(getCurrentEvent().x, getCurrentEvent().y); Point point = new Point(); point.x = p.x; point.y = p.y; EditPart ep = this.getViewer().findObjectAt(point); Object model = getCreateRequest().getNewObject(); if (ep.getModel() instanceof Table && model instanceof ChildTable && model instanceof FlowField ) { //����Ƕ�� getCurrentEvent().detail = DND.DROP_NONE; } else if (!(ep.getModel() instanceof Table) && !(model instanceof Table) && ((model instanceof CommonField) )) { //�ֶα�������ڱ��� getCurrentEvent().detail = DND.DROP_NONE; } else super.handleDragOver(); } public LogicTemplateTransferDropTargetListener(EditPartViewer viewer) { super(viewer); } // protected CreationFactory getFactory(Object template) // { // return new ElementFactory((Class)template); // } protected CreationFactory getFactory(Object template) { // if (template instanceof String) // return new ElementFactory((String) template); return new MsElementFactory((Class)template); // return null; } }