@Override
  public void dragOver(VDragEvent drag) {

    // Remove any emphasis
    getLayout().emphasis(null, null);

    Slot slot = getSlot(drag.getElementOver(), drag.getCurrentGwtEvent());

    if (slot != null) {
      getLayout().updateDragDetails(slot, drag);
    } else {
      getLayout().updateDragDetails(getLayout(), drag);
    }

    getLayout().postOverHook(drag);

    // Validate the drop
    validate(
        new VAcceptCallback() {
          public void accepted(VDragEvent event) {
            Slot slot = getSlot(event.getElementOver(), event.getCurrentGwtEvent());
            if (slot != null) {
              getLayout().emphasis(slot, event);
            } else {
              getLayout().emphasis(getLayout(), event);
            }
          }
        },
        drag);
  }
  @Override
  public boolean drop(VDragEvent drag) {

    // Un-emphasis any selections
    getLayout().emphasis(null, null);

    // Update the details
    Widget slot = getSlot(drag.getElementOver(), drag.getCurrentGwtEvent());
    getLayout().updateDragDetails(slot, drag);

    return getLayout().postDropHook(drag) && super.drop(drag);
  }
  @Override
  public void dragEnter(VDragEvent drag) {
    super.dragEnter(drag);
    Slot slot = getSlot(drag.getElementOver(), drag.getCurrentGwtEvent());
    if (slot != null) {
      getLayout().updateDragDetails(slot, drag);
    } else {
      getLayout().updateDragDetails(getLayout(), drag);
    }

    getLayout().postEnterHook(drag);
  }