A group of templates representing a layer in the template picker
        private void setTemplates()
        {
            List<TemplateGroup> templateGroups = new List<TemplateGroup>();
            if (System.ComponentModel.DesignerProperties.GetIsInDesignMode(this))
            {
                TemplateGroup group = new TemplateGroup()
                {
                    Name = "LayerID",
                    Templates = new List<SymbolTemplate>()
                };
                SimpleFillSymbol fillSymbol = new SimpleFillSymbol()
                {
                    Fill = new SolidColorBrush(Colors.Black)
                };
                group.Templates.Add(GetSymbolTemplate(new Editor(), fillSymbol, null, null, "Template Name", string.Empty));
                templateGroups.Add(group);
            }
            else
            {
                if (Map == null) return;
                foreach (FeatureLayer layer in GetLayers(LayerIDs, Map.Layers))
                {
                    if (!IsTemplatable(layer)) continue;
                    if (layer.LayerInfo.HasM || layer.LayerInfo.HasZ && !layer.LayerInfo.EnableZDefaults) continue;
                    Editor editor = new Editor()
                    {
                        AutoComplete = AutoComplete,
                        AutoSelect = AutoSelect,
                        ContinuousMode = Continuous,
                        Freehand = Freehand,
                        GeometryServiceUrl = GeometryServiceUrl,
                        GeometryServiceToken = GeometryServiceToken,
                        ProxyUrl = ProxyUrl,
                        LayerIDs = new string[] { layer.ID },
                        Map = Map,
                    };
                    editor.EditorActivated += Editor_EditorActivated;
                    editor.EditCompleted += Editor_EditCompleted;
                    TemplateGroup group = new TemplateGroup();
                    group.Name = layer.ID;
                    group.Layer = layer;
                    group.Templates = new List<SymbolTemplate>();

                    if (layer.Renderer != null)
                    {
                        Symbol defaultSymbol = layer.Renderer.GetSymbol(null);
                        if (layer.LayerInfo.FeatureTypes != null && layer.LayerInfo.FeatureTypes.Count > 0)
                        {
                            foreach (KeyValuePair<object, FeatureType> type in layer.LayerInfo.FeatureTypes)
                            {
                                if (type.Value != null && type.Value.Templates != null && type.Value.Templates.Count > 0)
                                {
                                    foreach (KeyValuePair<string, FeatureTemplate> featureTemplate in type.Value.Templates)
                                    {
                                        string name = type.Value.Name;
                                        if (type.Value.Templates.Count > 1)
                                            name = string.Format("{0}-{1}", type.Value.Name, featureTemplate.Value.Name);
                                        Symbol symbol = featureTemplate.Value.GetSymbol(layer.Renderer) ?? defaultSymbol;
                                        SymbolTemplate symbolTemplate = GetSymbolTemplate(editor, symbol,
                                            type.Value.Id, featureTemplate.Value,
                                            name, featureTemplate.Value.Description);
                                        if (symbol != null)
                                            group.Templates.Add(symbolTemplate);
                                    }
                                }
                            }
                            if (AlwaysDisplayDefaultTemplates)
                            {
                                if (defaultSymbol != null)
                                {
                                    var defaultLabel = layer.Renderer is UniqueValueRenderer ? (layer.Renderer as UniqueValueRenderer).DefaultLabel :
                                        (layer.Renderer is UniqueValueMultipleFieldsRenderer) ? (layer.Renderer as UniqueValueMultipleFieldsRenderer).DefaultLabel : null;
                                    group.Templates.Add(GetSymbolTemplate(editor, defaultSymbol, null, null, defaultLabel ?? layer.ID, null));
                                }
                            }
                        }
                        else if (layer.LayerInfo.Templates != null && layer.LayerInfo.Templates.Count > 0)
                        {
                            foreach (KeyValuePair<string, FeatureTemplate> featureTemplate in layer.LayerInfo.Templates)
                            {
                                Symbol symbol = featureTemplate.Value.GetSymbol(layer.Renderer) ?? defaultSymbol;
                                SymbolTemplate symbolTemplate = GetSymbolTemplate(editor, symbol,
                                            null, featureTemplate.Value, featureTemplate.Value.Name, featureTemplate.Value.Description);
                                if (symbol != null)
                                    group.Templates.Add(symbolTemplate);
                            }
                        }
                        else if (layer.Renderer is UniqueValueRenderer || layer.Renderer is UniqueValueMultipleFieldsRenderer)
                        {
                            var uvr = layer.Renderer as UniqueValueRenderer;
                            if (uvr != null)
                            {
                                foreach (var info in uvr.Infos)
                                {
                                    var prototypeAttributes = new Dictionary<string, object>();
                                    prototypeAttributes[uvr.Field] = info.Value;
                                    var featureTemplate = new FeatureTemplate(info.Label, info.Description, null, prototypeAttributes, FeatureEditTool.None);
                                    group.Templates.Add(GetSymbolTemplate(editor, info.Symbol, info.Value, featureTemplate, info.Label, info.Description));
                                }
                                if (AlwaysDisplayDefaultTemplates && uvr.DefaultSymbol != null)
                                        group.Templates.Add(GetSymbolTemplate(editor, uvr.DefaultSymbol, null, null, uvr.DefaultLabel ?? layer.ID, null));
                            }
                            else
                            {
                                var uvmfr = layer.Renderer as UniqueValueMultipleFieldsRenderer;
                                foreach (var info in uvmfr.Infos)
                                {
                                    var prototypeAttributes = new Dictionary<string, object>();
                                    if (uvmfr.Fields != null)
                                    {
                                        int i = 0;
                                        foreach (var field in uvmfr.Fields)
                                        {
                                            prototypeAttributes[field] = info.Values[i];
                                            i++;
                                        }
                                    }
                                    var featureTemplate = new FeatureTemplate(info.Label, info.Description, null, prototypeAttributes, FeatureEditTool.None);
                                    group.Templates.Add(GetSymbolTemplate(editor, info.Symbol, null, featureTemplate, info.Label, info.Description));
                                }
                                if (AlwaysDisplayDefaultTemplates && uvmfr.DefaultSymbol != null)
                                    group.Templates.Add(GetSymbolTemplate(editor, uvmfr.DefaultSymbol, null, null, uvmfr.DefaultLabel ?? layer.ID, null));
                            }
                        }
                        else
                        {
                            if (defaultSymbol != null)
                                group.Templates.Add(GetSymbolTemplate(editor, defaultSymbol, null, null, layer.ID, null));
                            else if (layer.Renderer is ClassBreaksRenderer)
                            {
                                var cbr = layer.Renderer as ClassBreaksRenderer;
                                if (AlwaysDisplayDefaultTemplates && cbr.DefaultSymbol != null)
                                    group.Templates.Add(GetSymbolTemplate(editor, cbr.DefaultSymbol, null, null, layer.ID, null));
                            }
                        }
                        if (group.Templates.Count > 0)
                            templateGroups.Add(group);
                    }
                }
            }
            TemplateGroups = templateGroups;
        }
		private void setTemplates()
		{
			List<TemplateGroup> templateGroups = new List<TemplateGroup>();
			if (System.ComponentModel.DesignerProperties.GetIsInDesignMode(this))
			{
				TemplateGroup group = new TemplateGroup()
				{
					Name = "LayerID",
					Templates = new List<SymbolTemplate>()
				};
				SimpleFillSymbol fillSymbol = new SimpleFillSymbol()
				{
					Fill = new SolidColorBrush(Colors.Black)
				};
				group.Templates.Add(GetSymbolTemplate(new Editor(), fillSymbol, null, null, "Template Name", string.Empty));
				templateGroups.Add(group);
			}
			else
			{
				if (Map == null) return;
				foreach (FeatureLayer layer in GetLayers(LayerIDs, Map.Layers))
				{
					if (!IsTemplatable(layer)) continue;
					Editor editor = new Editor()
					{
						AutoComplete = AutoComplete,
						AutoSelect = AutoSelect,
						ContinuousMode = Continuous,
						Freehand = Freehand,
						GeometryServiceUrl = GeometryServiceUrl,
						ProxyUrl = ProxyUrl,
						LayerIDs = new string[] { layer.ID },
						Map = Map,
					};
					editor.EditorActivated += Editor_EditorActivated;
					editor.EditCompleted += Editor_EditCompleted;
					TemplateGroup group = new TemplateGroup();
					group.Name = layer.ID;
					group.Layer = layer;
					group.Templates = new List<SymbolTemplate>();

					if (layer.Renderer != null)
					{
						Symbol defaultSymbol = layer.Renderer.GetSymbol(null);
						if (layer.LayerInfo.FeatureTypes != null && layer.LayerInfo.FeatureTypes.Count > 0)
						{
							foreach (KeyValuePair<object, FeatureType> type in layer.LayerInfo.FeatureTypes)
							{
								if (type.Value != null && type.Value.Templates != null && type.Value.Templates.Count > 0)
								{
									foreach (KeyValuePair<string, FeatureTemplate> featureTemplate in type.Value.Templates)
									{
										string name = type.Value.Name;
										if (type.Value.Templates.Count > 1)
											name = string.Format("{0}-{1}", type.Value.Name, featureTemplate.Value.Name);
										Symbol symbol = featureTemplate.Value.GetSymbol(layer.Renderer) ?? defaultSymbol;
										SymbolTemplate symbolTemplate = GetSymbolTemplate(editor, symbol,
											type.Value.Id, featureTemplate.Value,
											name, featureTemplate.Value.Description);
										if (symbol != null)
											group.Templates.Add(symbolTemplate);
									}
								}
							}
							if (AlwaysDisplayDefaultTemplates)
							{
								if (defaultSymbol != null)
									group.Templates.Add(GetSymbolTemplate(editor, defaultSymbol, null, null, layer.ID, null));
							}
						}
						else if (layer.LayerInfo.Templates != null && layer.LayerInfo.Templates.Count > 0)
						{
							foreach (KeyValuePair<string, FeatureTemplate> featureTemplate in layer.LayerInfo.Templates)
							{
								SymbolTemplate symbolTemplate = GetSymbolTemplate(editor, defaultSymbol,
											null, featureTemplate.Value, featureTemplate.Value.Name, featureTemplate.Value.Description);
								if (defaultSymbol != null)
									group.Templates.Add(symbolTemplate);
							}
						}
						else
						{
							if (defaultSymbol != null)
								group.Templates.Add(GetSymbolTemplate(editor, defaultSymbol, null, null, layer.ID, null));
						}
						if (group.Templates.Count > 0)
							templateGroups.Add(group);
					}
				}
			}
			TemplateGroups = templateGroups;
		}
Example #3
0
        private void setTemplates()
        {
            List <TemplateGroup> templateGroups = new List <TemplateGroup>();

            if (System.ComponentModel.DesignerProperties.GetIsInDesignMode(this))
            {
                TemplateGroup group = new TemplateGroup()
                {
                    Name      = "LayerID",
                    Templates = new List <SymbolTemplate>()
                };
                SimpleFillSymbol fillSymbol = new SimpleFillSymbol()
                {
                    Fill = new SolidColorBrush(Colors.Black)
                };
                group.Templates.Add(GetSymbolTemplate(new Editor(), fillSymbol, null, null, "Template Name", string.Empty));
                templateGroups.Add(group);
            }
            else
            {
                if (Map == null)
                {
                    return;
                }
                foreach (FeatureLayer layer in GetLayers(LayerIDs, Map.Layers))
                {
                    if (!IsTemplatable(layer))
                    {
                        continue;
                    }
                    if (layer.LayerInfo.HasM || layer.LayerInfo.HasZ && !layer.LayerInfo.EnableZDefaults)
                    {
                        continue;
                    }
                    Editor editor = new Editor()
                    {
                        AutoComplete         = AutoComplete,
                        AutoSelect           = AutoSelect,
                        ContinuousMode       = Continuous,
                        Freehand             = Freehand,
                        GeometryServiceUrl   = GeometryServiceUrl,
                        GeometryServiceToken = GeometryServiceToken,
                        ProxyUrl             = ProxyUrl,
                        LayerIDs             = new string[] { layer.ID },
                        Map = Map,
                    };
                    editor.EditorActivated += Editor_EditorActivated;
                    editor.EditCompleted   += Editor_EditCompleted;
                    TemplateGroup group = new TemplateGroup();
                    group.Name      = layer.ID;
                    group.Layer     = layer;
                    group.Templates = new List <SymbolTemplate>();

                    if (layer.Renderer != null)
                    {
                        Symbol defaultSymbol = layer.Renderer.GetSymbol(null);
                        if (layer.LayerInfo.FeatureTypes != null && layer.LayerInfo.FeatureTypes.Count > 0)
                        {
                            foreach (KeyValuePair <object, FeatureType> type in layer.LayerInfo.FeatureTypes)
                            {
                                if (type.Value != null && type.Value.Templates != null && type.Value.Templates.Count > 0)
                                {
                                    foreach (KeyValuePair <string, FeatureTemplate> featureTemplate in type.Value.Templates)
                                    {
                                        string name = type.Value.Name;
                                        if (type.Value.Templates.Count > 1)
                                        {
                                            name = string.Format("{0}-{1}", type.Value.Name, featureTemplate.Value.Name);
                                        }
                                        Symbol         symbol         = featureTemplate.Value.GetSymbol(layer.Renderer) ?? defaultSymbol;
                                        SymbolTemplate symbolTemplate = GetSymbolTemplate(editor, symbol,
                                                                                          type.Value.Id, featureTemplate.Value,
                                                                                          name, featureTemplate.Value.Description);
                                        if (symbol != null)
                                        {
                                            group.Templates.Add(symbolTemplate);
                                        }
                                    }
                                }
                            }
                            if (AlwaysDisplayDefaultTemplates)
                            {
                                if (defaultSymbol != null)
                                {
                                    var defaultLabel = layer.Renderer is UniqueValueRenderer ? (layer.Renderer as UniqueValueRenderer).DefaultLabel :
                                                       (layer.Renderer is UniqueValueMultipleFieldsRenderer) ? (layer.Renderer as UniqueValueMultipleFieldsRenderer).DefaultLabel : null;
                                    group.Templates.Add(GetSymbolTemplate(editor, defaultSymbol, null, null, defaultLabel ?? layer.ID, null));
                                }
                            }
                        }
                        else if (layer.LayerInfo.Templates != null && layer.LayerInfo.Templates.Count > 0)
                        {
                            foreach (KeyValuePair <string, FeatureTemplate> featureTemplate in layer.LayerInfo.Templates)
                            {
                                Symbol         symbol         = featureTemplate.Value.GetSymbol(layer.Renderer) ?? defaultSymbol;
                                SymbolTemplate symbolTemplate = GetSymbolTemplate(editor, symbol,
                                                                                  null, featureTemplate.Value, featureTemplate.Value.Name, featureTemplate.Value.Description);
                                if (symbol != null)
                                {
                                    group.Templates.Add(symbolTemplate);
                                }
                            }
                        }
                        else if (layer.Renderer is UniqueValueRenderer || layer.Renderer is UniqueValueMultipleFieldsRenderer)
                        {
                            var uvr = layer.Renderer as UniqueValueRenderer;
                            if (uvr != null)
                            {
                                foreach (var info in uvr.Infos)
                                {
                                    var prototypeAttributes = new Dictionary <string, object>();
                                    prototypeAttributes[uvr.Field] = info.Value;
                                    var featureTemplate = new FeatureTemplate(info.Label, info.Description, null, prototypeAttributes, FeatureEditTool.None);
                                    group.Templates.Add(GetSymbolTemplate(editor, info.Symbol, info.Value, featureTemplate, info.Label, info.Description));
                                }
                                if (AlwaysDisplayDefaultTemplates && uvr.DefaultSymbol != null)
                                {
                                    group.Templates.Add(GetSymbolTemplate(editor, uvr.DefaultSymbol, null, null, uvr.DefaultLabel ?? layer.ID, null));
                                }
                            }
                            else
                            {
                                var uvmfr = layer.Renderer as UniqueValueMultipleFieldsRenderer;
                                foreach (var info in uvmfr.Infos)
                                {
                                    var prototypeAttributes = new Dictionary <string, object>();
                                    if (uvmfr.Fields != null)
                                    {
                                        int i = 0;
                                        foreach (var field in uvmfr.Fields)
                                        {
                                            prototypeAttributes[field] = info.Values[i];
                                            i++;
                                        }
                                    }
                                    var featureTemplate = new FeatureTemplate(info.Label, info.Description, null, prototypeAttributes, FeatureEditTool.None);
                                    group.Templates.Add(GetSymbolTemplate(editor, info.Symbol, null, featureTemplate, info.Label, info.Description));
                                }
                                if (AlwaysDisplayDefaultTemplates && uvmfr.DefaultSymbol != null)
                                {
                                    group.Templates.Add(GetSymbolTemplate(editor, uvmfr.DefaultSymbol, null, null, uvmfr.DefaultLabel ?? layer.ID, null));
                                }
                            }
                        }
                        else
                        {
                            if (defaultSymbol != null)
                            {
                                group.Templates.Add(GetSymbolTemplate(editor, defaultSymbol, null, null, layer.ID, null));
                            }
                            else if (layer.Renderer is ClassBreaksRenderer)
                            {
                                var cbr = layer.Renderer as ClassBreaksRenderer;
                                if (AlwaysDisplayDefaultTemplates && cbr.DefaultSymbol != null)
                                {
                                    group.Templates.Add(GetSymbolTemplate(editor, cbr.DefaultSymbol, null, null, layer.ID, null));
                                }
                            }
                        }
                        if (group.Templates.Count > 0)
                        {
                            templateGroups.Add(group);
                        }
                    }
                }
            }
            TemplateGroups = templateGroups;
        }