📄 selecttooltask.cs
字号:
#region OnPreRender method
// Set up control rendering - not called on every callback so efficient runtime
protected override void OnPreRender(EventArgs e)
{
#region Available layers list
if (!EnsureMapControl())
return;
// GetQueryLayers returns an out param for invalid services,
// which is only used during design time
// to let developer know whether any map services are down
string[] invalidServices;
ListItem[] layerItems =
Utilities.GetQueryLayers(mapCtrl, SelectionLayerNames,
idStringDelim, out invalidServices);
ddlLayerList.Items.AddRange(layerItems);
if (ddlLayerList.Items.Count == 1)
ddlLayerList.Enabled = false;
else
ddlLayerList.Items.Insert(0, new ListItem("<Choose layer>", "null"));
#endregion
#region Select toolbar
selectToolbar.BuddyControlType = BuddyControlType.Map;
selectToolbar.BuddyControls.Add(new BuddyControl(mapCtrl.ID));
string toolbarGroupName = GetToolbarGroupName(mapCtrl, Page.Controls);
selectToolbar.Group = toolbarGroupName;
selectToolbar.UseDefaultWebResources = this.UseDefaultWebResources;
selectToolbar.WebResourceLocation = this.WebResourceLocation;
selectToolbar.ToolbarStyle = ToolbarStyle.ImageOnly;
selectToolbar.ToolbarStyle = ToolbarStyle.ImageOnly;
selectToolbar.Width = new Unit("200px");
selectToolbar.Height = new Unit("32px");
selectToolbar.ToolbarItems.Add(CreateTool("btSelectPointTool", MapClientToolAction.Point,
"Select by single click", "select_point_1U.gif", "select_point_1D.gif"));
selectToolbar.ToolbarItems.Add(CreateTool("btSelectRectTool", MapClientToolAction.DragRectangle,
"Select by dragging a rectangle", "select_rect_1U.gif", "select_rect_1D.gif"));
selectToolbar.ToolbarItems.Add(CreateTool("btSelectLineTool", MapClientToolAction.Polyline,
"Select by drawing a line", "select_line_1U.gif", "select_line_1D.gif"));
selectToolbar.ToolbarItems.Add(CreateTool("btSelectPolyTool", MapClientToolAction.Polygon,
"Select by drawing a polygon", "select_poly_1U.gif", "select_poly_1D.gif"));
selectToolbar.ToolbarItems.Add(CreateTool("btSelectCircleTool", MapClientToolAction.Circle,
"Select by drawing a circle", "select_circle_1U.gif", "select_circle_1D.gif"));
#endregion
base.OnPreRender(e);
}
#endregion
#region Rendering
#region RenderContents method
protected override void RenderContents(HtmlTextWriter writer)
{
/* We do control rendering here, rather than in CreateChildControls(),
because CreateChildControls() runs every callback, whereas RenderContents
runs on on full postback.
*/
#region Set up
List<Control> ctlList = new List<Control>();
string cellText;
string toolTip;
// <table> opening tag
writer.AddStyleAttribute(HtmlTextWriterStyle.FontSize, "10pt");
writer.RenderBeginTag(HtmlTextWriterTag.Table);
#endregion
#region Selection layer label and drop-down
cellText = "选择图层: ";
toolTip = "从列表中选择一个图层使其处于可选择状态.";
RenderTableRowControl(writer, ddlLayerList, cellText, toolTip);
#endregion
#region Select toolbar
toolTip = "Choose a tool to select features on the map.";
RenderTableRowControl(writer, selectToolbar, null, toolTip);
#endregion
writer.RenderEndTag(); // </table> ending tag
//base.RenderContents(writer);
}
#endregion
protected override void Render(HtmlTextWriter writer)
{
if (DesignMode)
{
RenderDesignTimeHtml(writer);
}
else
{
base.Render(writer);
}
}
protected override void RenderDesignTimeHtml(HtmlTextWriter writer)
{
writer.RenderBeginTag(HtmlTextWriterTag.Div);
writer.RenderBeginTag(HtmlTextWriterTag.Span);
writer.WriteLine(string.Format("<p>SelectToolTask:{0}</p>", ID));
writer.RenderEndTag();
writer.RenderEndTag();
}
#endregion
#endregion
#region Rendering helper methods
private void RenderTableRowControl(HtmlTextWriter writer, Control control,
string cellText, string cellTooltip)
{
Control[] ctls = new Control[] { control };
RenderTableRowControls(writer, ctls, cellText, cellTooltip);
}
private void RenderTableRowControls(HtmlTextWriter writer, Control[] controls,
string cellText, string cellTooltip)
{
writer.RenderBeginTag(HtmlTextWriterTag.Tr);
writer.AddStyleAttribute(HtmlTextWriterStyle.WhiteSpace, "nowrap");
if (cellTooltip != null)
writer.AddAttribute(HtmlTextWriterAttribute.Title, cellTooltip);
writer.RenderBeginTag(HtmlTextWriterTag.Td);
if (cellText != null)
writer.Write(cellText);
if (controls != null)
foreach (Control ctl in controls)
ctl.RenderControl(writer);
writer.RenderEndTag(); // td
writer.RenderEndTag(); // tr
}
private Tool CreateTool(string name, MapClientToolAction action, string tooltip,
string defaultImageName, string downImageName)
{
Type controlType = this.GetType();
string imgUrl = GetEmbeddedImageUrl(defaultImageName, controlType);
string downImgUrl = GetEmbeddedImageUrl(downImageName, controlType);
Tool tool = new Tool(ClientID + "_" + name);
tool.ClientAction = action.ToString();
tool.Cursor = "pointer";
tool.DefaultImage = imgUrl;
tool.SelectedImage = downImgUrl;
string assemFullName = this.GetType().Assembly.FullName;
tool.ServerActionAssembly = assemFullName.Substring(0, assemFullName.IndexOf(","));
//this.GetType().Assembly.FullName; // task assembly name;
tool.ServerActionClass = typeof(SelectTool).FullName;
//typeof(SelectTool).AssemblyQualifiedName; // namespace.toolclassname;
tool.Text = "Select feature";
tool.ToolTip = tooltip;
return tool;
}
// currently unused
//private DropDownList CreateToolActionDropDown()
//{
// DropDownList ddlToolType = new DropDownList();
// ddlToolType.ID = "selectToolType";
// ddlToolType.Items.Add(new ListItem("Point", "Point")); //MapPoint
// ddlToolType.Items.Add(new ListItem("Rectangle", "DragRectangle")); // MapDragRectangle
// ddlToolType.Items.Add(new ListItem("Circle", "Circle")); // MapCircle
// ddlToolType.Items.Add(new ListItem("Line", "Polyline")); // MapPolyline
// ddlToolType.Items.Add(new ListItem("Polygon", "Polygon")); //MapPolygon
// ddlToolType.ToolTip = "Tool to use when selecting";
// return ddlToolType;
//}
private string GetEmbeddedImageUrl(string imageName, Type controlType)
{
string fileName = controlType.Namespace + ".images." + imageName;
string imgUrl = Page.ClientScript.GetWebResourceUrl(controlType,
fileName);
return imgUrl;
}
// Finds the group name for the first toolbar buddied to the map control
// (if no toolbar groups, creates a name)
private string GetToolbarGroupName(Map map, ControlCollection controls)
{
string tbGroupName = "";
string[] toolbarGroups = Toolbar.FindToolbarGroupsBuddiedTo(map.UniqueID, Page);
if (toolbarGroups == null || toolbarGroups.Length < 1)
tbGroupName = "SelectToolTaskToolbarGroup_" + map.UniqueID;
else
tbGroupName = toolbarGroups[0];
return tbGroupName;
}
#endregion
#region Input property - stores data for running task for run-task-again
public override object Input
{
get
{
return base.Input;
}
set
{
#region Used by "Run Task Again", "Refresh" context menus
base.Input = value;
if (value != null)
{
object[] inputs = value as object[];
if (inputs != null)
{
EnsureChildControls();
// this may not be necessary since state manager may take care of it...
SelectLayerId = (string)inputs[0];
SelectMapResource = (string)inputs[1];
mapResMgr = (string)inputs[2];
SelectionGeometry = inputs[3] as ESRI.ArcGIS.ADF.Web.Geometry.Geometry;
if (!String.IsNullOrEmpty(SelectLayerId))
ddlLayerList.SelectedValue = String.Concat(
SelectMapResource, idStringDelim, SelectLayerId);
}
}
#endregion
}
}
#endregion
#region GetCallbackResult
public override string GetCallbackResult()
{
string argUnesc = System.Uri.UnescapeDataString(_callbackArg);
System.Collections.Specialized.NameValueCollection keyValColl = CallbackUtility.ParseStringIntoNameValueCollection(argUnesc);
string eventArg = keyValColl["EventArg"];
//string taskJobID = keyValColl["taskJobID"];
// Get the type of operation requested by browser
switch (eventArg)
{
case "executeTask":
// parse the input and store in layer ID and map resource variables
string lyr; string mapRes;
this.ParseLayerId(keyValColl["layerId"], out mapRes, out lyr);
this.SelectLayerId = lyr;
this.SelectMapResource = mapRes;
// Store inputs to task
object[] taskInputs = new object[4];
taskInputs[0] = SelectLayerId;
taskInputs[1] = SelectMapResource;
EnsureMapControl();
// mapresourcemanager only stored so other tasks (Buffer) can use it
taskInputs[2] = this.mapCtrl.MapResourceManager;
// selection geometry set in previous callback
taskInputs[3] = this.SelectionGeometry;
Input = taskInputs;
break;
}
return base.GetCallbackResult();
}
#endregion
public override List<GISResourceItemDependency> GetGISResourceItemDependencies()
{
List<GISResourceItemDependency> list = new List<GISResourceItemDependency>();
return list;
}
#region ExecuteTask method
public override void ExecuteTask()
{
#region Get inputs from Input property
object[] inputs = Input as object[];
SelectLayerId = (string)inputs[0];
SelectMapResource = (string)inputs[1];
// inputs[2] is mapresourcemanager--only stored so other tasks can use it
SelectionGeometry = inputs[3] as Geometry;
if (String.IsNullOrEmpty(SelectLayerId) || String.IsNullOrEmpty(SelectMapResource))
{
Results = new SimpleTaskResult(
String.Concat(this.ID, ": No select layer"),
"No selection layer has been specified.");
return;
}
if (SelectionGeometry == null)
{
Results = new SimpleTaskResult(
String.Concat(this.ID, ": Error during selection"),
"Select layer, map resource or no selection geometry found.");
return;
}
#endregion
#region Set up and run query
EnsureMapControl();
IMapFunctionality mf = (IMapFunctionality)
mapCtrl.GetFunctionality(SelectMapResource);
LayerQuery lyrQuery = new LayerQuery(mf, SelectLayerId);
lyrQuery.FilterGeometry = SelectionGeometry;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -