The template in a template picker layer
Inheritance: INotifyPropertyChanged
Exemple #1
0
        private static SymbolTemplate GetSymbolTemplate(Editor editor, Symbol symbol, object featureTypeID, FeatureTemplate template,
                                                        string displayName, string description)
        {
            object type = null;

            if (template != null)
            {
                type = template;
            }
            else if (featureTypeID != null)
            {
                type = featureTypeID;
            }
            SymbolTemplate symbolTemplate = new SymbolTemplate()
            {
                TypeID          = type,
                FeatureTemplate = template,
                Symbol          = symbol,
                Name            = displayName,
                Description     = description,
                Editor          = editor
            };

            return(symbolTemplate);
        }
		private static SymbolTemplate GetSymbolTemplate(Editor editor, Symbol symbol, object featureTypeID, FeatureTemplate template,
			string displayName, string description)
		{
			object type = null;
			if (featureTypeID != null && template != null && !string.IsNullOrEmpty(template.Name))
				type = new object[] { featureTypeID, template.Name };
			else if (featureTypeID != null)
				type = featureTypeID;
			else if (template != null)
				type = template.Name;
			SymbolTemplate symbolTemplate = new SymbolTemplate()
			{
				TypeID = type,
				FeatureTemplate = template,
				Symbol = symbol,
				Name = displayName,
				Description = description,
				Editor = editor
			};
			return symbolTemplate;
		}
Exemple #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;
        }
        FrameworkElement getElement(SymbolTemplate type)
        {
			if (type != null)
			{
				DataTemplate template = this.ItemTemplate;
				FrameworkElement obj = template.LoadContent() as FrameworkElement;
#if !SILVERLIGHT
				//This code forces re-evaluation of Command in WPF
				//CanExecute is evaluated once Command is set and does not get called again once 
				//CommandParameter has resolved its binding statement.
				RoutedEventHandler handler = null;
				handler = (s, a) =>
				{
					obj.Loaded -= handler;
					var editor = type.Editor;
					type.Editor = null;
					type.Editor = editor;
				};
				obj.Loaded += handler;
#endif
				obj.DataContext = type;
				return obj;
			}
            return null;
        }