package scrum.client.workspace;
import ilarkesto.core.logging.Log;
import ilarkesto.core.scope.Scope;
import scrum.client.common.AScrumWidget;
import scrum.client.common.StyleSheet;
import scrum.client.dnd.TrashSupport;
import scrum.client.img.Img;
import com.allen_sauer.gwt.dnd.client.DragContext;
import com.allen_sauer.gwt.dnd.client.VetoDragException;
import com.allen_sauer.gwt.dnd.client.drop.DropController;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Widget;
public class TrashWidget extends AScrumWidget {
private DndManager dndManager;
private HorizontalPanel trash;
private DropController trashDropController = new TrashDropController();
@Override
protected Widget onInitialization() {
dndManager = Scope.get().getComponent(DndManager.class);
trash = new HorizontalPanel();
trash.setStyleName("TrashWidget");
trash.add(Img.bundle.trash32().createImage());
// trash.add(new Label("Trash"));
dndManager.getDragController().registerDropController(trashDropController);
return trash;
}
@Override
protected void onUpdate() {}
private boolean isTrashable(Widget draggable) {
boolean trashable;
if (draggable instanceof TrashSupport) {
trashable = ((TrashSupport) draggable).getTrashAction().isExecutable();
} else {
trashable = false;
}
Log.DEBUG(trashable ? "Trashable:" : "Not Trashable:", draggable);
return trashable;
}
private class TrashDropController implements DropController {
public Widget getDropTarget() {
return trash;
}
public void onDrop(DragContext context) {
if (!isTrashable(context.draggable)) return;
((TrashSupport) context.draggable).getTrashAction().execute();
}
public void onEnter(DragContext context) {
if (!isTrashable(context.draggable)) {
Log.DEBUG("Not trashable: " + context.draggable);
return;
}
trash.addStyleName(StyleSheet.DND_DROP_ALLOWED);
}
public void onLeave(DragContext context) {
trash.removeStyleName(StyleSheet.DND_DROP_ALLOWED);
}
public void onMove(DragContext context) {}
public void onPreviewDrop(DragContext context) throws VetoDragException {}
};
}