package edu.ucdavis.cstars.client.dijits; import com.google.gwt.core.client.JavaScriptObject; import com.google.gwt.event.logical.shared.AttachEvent; import com.google.gwt.event.logical.shared.AttachEvent.Handler; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.SimplePanel; import edu.ucdavis.cstars.client.MapWidget; import edu.ucdavis.cstars.client.Util; import edu.ucdavis.cstars.client.layers.FeatureLayer; /** * The Editor widget provides out-of-the-box editing capabilities using an editable layer in a Feature Service. It * combines the out-of-the-box TemplatePicker, AttachmentEditor, AttributeInspector and GeometryService to * provide feature and attribute editing. When building editing applications, try to take advantage of the * customizable out-of-the-box Editor widget when possible. * * @author Justin Merz */ public class Editor extends Composite { private SimplePanel panel = new SimplePanel(); private Parameters parameters; protected JavaScriptObject jso; public enum CreateTools { CREATE_TOOL_ARROW("arrow"), CREATE_TOOL_AUTOCOMPLETE("autocomplete"), CREATE_TOOL_CIRCLE("circle"), CREATE_TOOL_ELLIPSE("ellipse"), CREATE_TOOL_FREEHAND_POLYGON("freehandpolygon"), CREATE_TOOL_FREEHAND_POLYLINE("freehandpolyline"), CREATE_TOOL_POLYGON("polygon"), CREATE_TOOL_POLYLINE("polyline"), CREATE_TOOL_RECTANGLE("rectangle"), CREATE_TOOL_TRIANGLE("triangle"); private String val = ""; private CreateTools(String value) { val = value; } public String getValue(){ return val; } } /** * Creates a new Editor object. * * @param params - Parameters that define the functionality of the editor widget. Create a * new settings object to pass to the widget */ public Editor(Parameters params) { if( !assertLoaded() ) return; parameters = params; initWidget(panel); addAttachHandler(new Handler(){ @Override public void onAttachOrDetach(AttachEvent event) { if( jso == null ) jso = create(parameters); } }); } private native JavaScriptObject create(Parameters params) /*-{ return new $wnd.esri.dijit.Editor(params, this.@edu.ucdavis.cstars.client.dijits.Editor::getElement()()); }-*/; /** * Check that the esri.dijit.Editor package has been loaded * * @return boolean */ public static native boolean assertLoaded() /*-{ if( $wnd.esri.dijit.Editor ) return true; $wnd.alert("The ESRI_DIJIT_EDITOR has not been loaded"); return false; }-*/; /** * */ public static class Parameters extends JavaScriptObject { protected Parameters() {} /** * Create a new settings object that defines the cababilites of the widget. * * @return Parameters */ public static Parameters create() { return JavaScriptObject.createObject().cast(); } /** * Reference to the map. * * @param map */ public final void setMap(MapWidget map) { _setMap(map.getMapObject()); } private final native void _setMap(JavaScriptObject map) /*-{ this["map"] = map; }-*/; /** * Use this option if you want to modify the appearance of the template picker, for example * set the number of rows and columns. * * @param templatePicker - Reference to the TemplatePicker. */ public final native void setTemplatePicker(TemplatePicker templatePicker) /*-{ this["templatePicker"] = templatePicker; }-*/; /** * Reference to the geometry service. * * @param geometryService */ public final native void setGeometryService(String geometryService) /*-{ this["geometryService"] = geometryService; }-*/; /** * If true display the editing toolbar. * * @param isVisible */ public final native void setToolbarVisible(boolean isVisible) /*-{ this["toolbarVisible"] = isVisible; }-*/; /** * * @param polylineDrawTool - Specify the polyline draw tools to include on the toolbar. * Only applicable when toolbarVisible is true. */ public final void addPolylineDrawTool(CreateTools polylineDrawTool){ _addPolylineDrawTool(polylineDrawTool.getValue()); } private final native void _addPolylineDrawTool(String polylineDrawTool) /*-{ if( !this.polylineDrawTools ) this["polylineDrawTools"] = []; this.polylineDrawTools.push( polylineDrawTool ); }-*/; /** * * @param polygonDrawTool - Specify the polygon draw tools to include on the toolbar. * Only applicable when toolbarVisible is true. */ public final void addPolygonDrawTool(CreateTools polygonDrawTool) { _addPolygonDrawTool(polygonDrawTool.getValue()); }; private final native void _addPolygonDrawTool(String polygonDrawTool) /*-{ if( !this.polygonDrawTools ) this["polygonDrawTools"] = []; this.polygonDrawTools.push( polygonDrawTool ); }-*/; /** * Specify the tools to include on the toolbar. Only applicable when toolbarVisible is true. * * @param mergeVisible - If true show the merge tool. * @param cutVisible - If true show the cut tool. * @param reshapeVisible - If true show the reshape tool. */ public final native void setToolbarOptions(boolean mergeVisible, boolean cutVisible, boolean reshapeVisible) /*-{ this["toolbarOptions"] = {} this.toolbarOptions["mergeVisible"] = mergeVisible; this.toolbarOptions["cutVisible"] = cutVisible; this.toolbarOptions["reshapeVisible"] = reshapeVisible; }-*/; /** * Feature layer information * * @param featureLayer - Reference to the feature layer. * @param showObjectID - Default is false. When true display the ObjectID field in the attribute inspector. * @param showGlobalID - Default is false. When true display the GlobalID field in the attribute inspector. * @param htmlFields - Specify which fields to display as a rich text editor. */ public final void setLayerInfos(FeatureLayer featureLayer, boolean showObjectID, boolean showGlobalID, String[] htmlFields ) { JavaScriptObject arr = JavaScriptObject.createArray(); for( int i = 0; i < htmlFields.length; i++ ) Util.addStringToArray(htmlFields[i], arr); _setLayerInfos(featureLayer, showObjectID, showGlobalID, arr); }; private final native void _setLayerInfos(FeatureLayer featureLayer, boolean showObjectID, boolean showGlobalID, JavaScriptObject htmlFields ) /*-{ this["layerInfos"] = {}; this.layerInfos["featureLayer"] = featureLayer; this.layerInfos["showObjectID"] = showObjectID; this.layerInfos["showGlobalID"] = showGlobalID; this.layerInfos["htmlFields"] = htmlFields; }-*/; } }