package com.smartgwt.sample.showcase.client.effects.dragdrop;
import com.smartgwt.client.types.Alignment;
import com.smartgwt.client.types.DragAppearance;
import com.smartgwt.client.types.Overflow;
import com.smartgwt.client.widgets.Canvas;
import com.smartgwt.client.widgets.Label;
import com.smartgwt.client.widgets.form.DynamicForm;
import com.smartgwt.client.widgets.form.fields.CheckboxItem;
import com.smartgwt.client.widgets.form.fields.RadioGroupItem;
import com.smartgwt.client.widgets.form.fields.events.ChangedEvent;
import com.smartgwt.client.widgets.form.fields.events.ChangedHandler;
import com.smartgwt.client.widgets.layout.VLayout;
import com.smartgwt.sample.showcase.client.PanelFactory;
import com.smartgwt.sample.showcase.client.ShowcasePanel;
import java.util.LinkedHashMap;
public class DragSnapToGridSample extends ShowcasePanel {
private static final String DESCRIPTION = "Drag the box around the grid. It will snap into alignment according to the values "+
"set in the radio buttons below. Snap-to-grid dragging can be enabled separately for moving and resizing. Toggle the checkboxes "+
"to see this working.";
public static class Factory implements PanelFactory {
private String id;
public ShowcasePanel create() {
DragSnapToGridSample panel = new DragSnapToGridSample();
id = panel.getID();
return panel;
}
public String getID() {
return id;
}
public String getDescription() {
return DESCRIPTION;
}
}
public Canvas getViewPanel() {
final Canvas gridCanvas = new Canvas();
gridCanvas.setBorder("1px solid blue");
gridCanvas.setWidth(400);
gridCanvas.setHeight(300);
gridCanvas.setChildrenSnapResizeToGrid(true);
gridCanvas.setChildrenSnapToGrid(true);
gridCanvas.setOverflow(Overflow.HIDDEN);
gridCanvas.setShowSnapGrid(true);
Label label = new Label();
label.setWidth(80);
label.setHeight(40);
label.setAlign(Alignment.CENTER);
label.setContents("Drag or Resize me");
label.setBackgroundColor("white");
label.setShowEdges(true);
label.setCanDragReposition(true);
label.setCanDragResize(true);
label.setDragAppearance(DragAppearance.TARGET);
label.setKeepInParentRect(true);
gridCanvas.addChild(label);
DynamicForm gridForm = new DynamicForm();
gridForm.setWidth(400);
gridForm.setNumCols(4);
CheckboxItem snapDrag = new CheckboxItem();
snapDrag.setValue(true);
snapDrag.setTitle("Enable Snap-To-Grid Move");
snapDrag.addChangedHandler(new ChangedHandler() {
@Override
public void onChanged(ChangedEvent event) {
gridCanvas.setProperty("childrenSnapToGrid", !gridCanvas.getChildrenSnapToGrid());
}
});
CheckboxItem snapResize = new CheckboxItem();
snapResize.setValue(true);
snapResize.setTitle("Enable Snap To Grid Resize");
snapResize.addChangedHandler(new ChangedHandler() {
@Override
public void onChanged(ChangedEvent event) {
gridCanvas.setProperty("childrenSnapResizeToGrid", !gridCanvas.getChildrenSnapResizeToGrid());
}
});
RadioGroupItem radioGroupHGap = new RadioGroupItem();
radioGroupHGap.setTitle("Horizontal snap-to gap");
LinkedHashMap<Integer,String> hGapMap = new LinkedHashMap<Integer,String>();
hGapMap.put(10, "10 pixels");
hGapMap.put(20, "20 pixels");
hGapMap.put(50, "50 pixels");
radioGroupHGap.setValueMap(hGapMap);
radioGroupHGap.setDefaultValue(20);
radioGroupHGap.addChangedHandler(new ChangedHandler() {
@Override
public void onChanged(ChangedEvent event) {
gridCanvas.setProperty("snapHGap", Integer.parseInt(String.valueOf(event.getValue())));
}
});
RadioGroupItem radioGroupVGap = new RadioGroupItem();
radioGroupVGap.setTitle("Vertical snap-to gap");
LinkedHashMap<Integer,String> vGapMap = new LinkedHashMap<Integer,String>();
vGapMap.put(10, "10 pixels");
vGapMap.put(20, "20 pixels");
vGapMap.put(50, "50 pixels");
radioGroupVGap.setValueMap(vGapMap);
radioGroupVGap.setDefaultValue(20);
radioGroupVGap.addChangedHandler(new ChangedHandler() {
@Override
public void onChanged(ChangedEvent event) {
gridCanvas.setProperty("snapVGap", Integer.parseInt(String.valueOf(event.getValue())));
}
});
gridForm.setFields(snapDrag,snapResize,radioGroupHGap,radioGroupVGap);
VLayout vl = new VLayout();
vl.setMembersMargin(10);
vl.addMember(gridCanvas);
vl.addMember(gridForm);
return vl;
}
public String getIntro() {
return DESCRIPTION;
}
}