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; }
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; }