/*
* SmartGWT (GWT for SmartClient)
* Copyright 2008 and beyond, Isomorphic Software, Inc.
*
* SmartGWT is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License version 3
* as published by the Free Software Foundation. SmartGWT is also
* available under typical commercial license terms - see
* http://smartclient.com/license
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
package com.smartgwt.sample.showcase.client;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.user.client.ui.RootPanel;
import com.smartgwt.client.types.Alignment;
import com.smartgwt.client.types.Cursor;
import com.smartgwt.client.types.DragAppearance;
import com.smartgwt.client.types.Overflow;
import com.smartgwt.client.util.EventHandler;
import com.smartgwt.client.widgets.Canvas;
import com.smartgwt.client.widgets.Img;
import com.smartgwt.client.widgets.events.DropEvent;
import com.smartgwt.client.widgets.events.DropHandler;
import com.smartgwt.client.widgets.events.DropOutEvent;
import com.smartgwt.client.widgets.events.DropOutHandler;
import com.smartgwt.client.widgets.events.DropOverEvent;
import com.smartgwt.client.widgets.events.DropOverHandler;
import com.smartgwt.client.widgets.events.ShowContextMenuEvent;
import com.smartgwt.client.widgets.events.ShowContextMenuHandler;
import com.smartgwt.client.widgets.layout.HStack;
import com.smartgwt.client.widgets.layout.VStack;
public class Showcase implements EntryPoint {
public void onModuleLoad() {
RootPanel.get().add(getViewPanel());
}
public Canvas getViewPanel() {
HStack cubes = new HStack();
cubes.setLayoutMargin(20);
cubes.setMembersMargin(40);
cubes.setLayoutAlign(Alignment.CENTER);
cubes.addMember(new DragPiece("cube_blue.png", "b"));
cubes.addMember(new DragPiece("cube_yellow.png", "y"));
cubes.addMember(new DragPiece("cube_green.png", "g"));
HStack edges = new HStack();
edges.setMembersMargin(20);
edges.addMember(new PieceBin("edges/blue/6.png", "b"));
edges.addMember(new PieceBin("edges/yellow/6.png", "y"));
edges.addMember(new PieceBin("edges/green/6.png", "g"));
edges.addMember(new PieceBin("edges/gray/6.png", "b", "y", "g"));
VStack main = new VStack();
main.addMember(cubes);
main.addMember(edges);
return main;
}
public static class DragPiece extends Img {
public DragPiece(String src, String dragType) {
setSrc(src);
setWidth(48);
setHeight(48);
setCursor(Cursor.MOVE);
setAppImgDir("pieces/48/");
setCanDrag(true);
setCanDrop(true);
setDragType(dragType);
setDragAppearance(DragAppearance.TRACKER);
}
protected boolean setDragTracker() {
EventHandler.setDragTracker(Canvas.imgHTML("pieces/24/" + getSrc(), 24, 24), 24, 24, 15, 15);
return false;
}
}
public static class DroppedPiece extends Img {
public DroppedPiece(String src, int left, int top) {
setSrc(src);
setLeft(left);
setTop(top);
setWidth(24);
setHeight(24);
setAppImgDir("pieces/24/");
setCanDragReposition(true);
setKeepInParentRect(true);
setDragAppearance(DragAppearance.TARGET);
addShowContextMenuHandler(new ShowContextMenuHandler() {
public void onShowContextMenu(ShowContextMenuEvent event) {
destroy();
event.cancel();
}
});
}
}
public static class PieceBin extends Canvas {
public PieceBin(String edgeImage, String... dropTypes) {
setWidth(100);
setHeight(100);
setShowEdges(true);
setEdgeSize(6);
setEdgeImage(edgeImage);
setOverflow(Overflow.HIDDEN);
setCanAcceptDrop(true);
setDropTypes(dropTypes);
addShowContextMenuHandler(new ShowContextMenuHandler() {
public void onShowContextMenu(ShowContextMenuEvent event) {
event.cancel();
}
});
addDropOverHandler(new DropOverHandler() {
public void onDropOver(DropOverEvent event) {
if (willAcceptDrop())
setBackgroundColor("#ffff80");
}
});
addDropOutHandler(new DropOutHandler() {
public void onDropOut(DropOutEvent event) {
setBackgroundColor("#ffffff");
}
});
addDropHandler(new DropHandler() {
public void onDrop(DropEvent event) {
addChild(new DroppedPiece(
((Img) EventHandler.getDragTarget()).getSrc(),
getOffsetX() - 15 - getEdgeSize(),
getOffsetY() - 15 - getEdgeSize()
));
}
});
}
}
}
SmartGWT.zip( 9,880 k)