package org.semanticsoft.vaaclipse.widgets.client.ui.stackwidget; import com.vaadin.client.ApplicationConnection; import com.vaadin.client.ui.dd.VAcceptCallback; import com.vaadin.client.ui.dd.VDragEvent; import fi.jasoft.dragdroplayouts.client.ui.Constants; import fi.jasoft.dragdroplayouts.client.ui.tabsheet.VDDTabsheetDropHandler; public class VStackWidgetDropHandler extends VDDTabsheetDropHandler { private final VStackWidget stackWidget; public VStackWidgetDropHandler(VStackWidget stackWidget, ApplicationConnection client) { super(stackWidget, client); this.stackWidget = stackWidget; } @Override public void dragOver(VDragEvent drag) { //VConsole.log("Drag Over"); stackWidget.deEmphasis(); stackWidget.updateDropDetails(drag); stackWidget.postOverHook(drag); // Check if we are dropping on our self if (stackWidget.equals(drag.getTransferable().getData( Constants.TRANSFERABLE_DETAIL_COMPONENT))) { return; } // Validate the drop validate(new VAcceptCallback() { public void accepted(VDragEvent event) { stackWidget.emphasis(event.getElementOver(), event); } }, drag); }; @Override public void dragLeave(VDragEvent drag) { //VConsole.log("Drag Leave"); stackWidget.deEmphasis(); stackWidget.updateDropDetails(drag); stackWidget.postLeaveHook(drag); stackWidget.removeDockZone(); }; @Override public boolean drop(VDragEvent event) { if (!stackWidget.updateRegion(event)) return false; Object sourceWidget = event.getTransferable().getDragSource(); if (sourceWidget instanceof StackWidgetConnector) { sourceWidget = ((StackWidgetConnector) sourceWidget).getWidget(); VStackWidget stackWidget = (VStackWidget) sourceWidget; stackWidget.restoreLocationOfPartToolbar(); } return super.drop(event); } }