/* * Copyright 2009 Fred Sauer * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except * in compliance with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under the License * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express * or implied. See the License for the specific language governing permissions and limitations under * the License. */ package edu.purdue.pivot.skwiki.client.dnd; import com.google.gwt.user.client.ui.Widget; import com.allen_sauer.gwt.dnd.client.DragContext; import com.allen_sauer.gwt.dnd.client.VetoDragException; /** * Create a DropController for each drop target on which draggable widgets can be dropped. Do not * forget to register each DropController with a * {@link com.allen_sauer.gwt.dnd.client.DragController}. */ public interface DropController { /** * Retrieve our drop target widget. * * @return the widget representing the drop target associated with this controller */ Widget getDropTarget(); /** * Called when the draggable widget or its proxy is dropped on our drop target. Implementing * classes must attach the draggable widget to our drop target in a suitable manner. * * @see #onPreviewDrop(DragContext) * * @param context the current drag context */ void onDrop(DragContext context); /** * Called when the draggable widget or its proxy engages our drop target. This occurs when the * widget area and the drop target area intersect and there are no drop targets which are * descendants of our drop target which also intersect with the widget. If there are, the widget * engages with the descendant drop target instead. * * @see #onLeave(DragContext) * * @param context the current drag context */ void onEnter(DragContext context); /** * Called when the reference widget stops engaging our drop target by leaving the area of the page * occupied by our drop target, or after {@link #onDrop(DragContext)} to allow for any cleanup. * * @see #onEnter(DragContext) * * @param context the current drag context */ void onLeave(DragContext context); /** * Called with each mouse movement while the reference widget is engaging our drop target. * {@link #onEnter(DragContext)} is called before this method is called. * * @see #onEnter(DragContext) * @see #onLeave(DragContext) * * @param context the current drag context */ void onMove(DragContext context); /** * Called just prior to {@link #onDrop(DragContext)} to allow the drop operation to be cancelled * by throwing a {@link VetoDragException}. * * @param context the current drag context * @throws VetoDragException if the proposed operation is unacceptable */ void onPreviewDrop(DragContext context) throws VetoDragException; }