Example #1
0
        public override ILegendItem Create(ILegendSettings legend, object item)
        {
            var lc = (LayerCollection)item;

            if (lc.Count == 0)
            {
                return(null);
            }

            var res = base.Create(legend, item);

            var lrs = new ILayer[lc.Count];

            lc.CopyTo(lrs, 0);
            Array.Reverse(lrs);
            foreach (var layer in lrs)
            {
                var li = Factory[layer].Create(legend, layer);
                if (li != null)
                {
                    res.SubItems.Add(li);
                }
            }
            res.Expanded    = res.SubItems.Count > 0;
            res.Indentation = legend.Indentation;
            return(res);
        }
        public override ILegendItem Create(ILegendSettings legend, object item)
		{
			if (item == null)
				throw new ArgumentNullException("item");
			if (!(item is VectorLayer))
				throw new ArgumentException("Item is not a vector layer", "item");
			
			var vl = (VectorLayer)item;
			
			ILegendItem res = null;
			if (vl.Theme != null)
			{
				res = Factory[vl.Theme].Create(legend, vl.Theme) ?? new LegendItem();
				res.Label = vl.LayerName + res.Label ?? string.Empty;
			}
			else
			{
				res = Factory[vl.Style].Create(legend, vl.Style) ?? new LegendItem();
				res.Label = vl.LayerName;
			}
		    res.Item = item;
			res.LabelFont = legend.ItemFont;
            res.LabelBrush = legend.ForeColor;
            res.Padding = legend.Padding;
			res.Exclude = !vl.Enabled;
			res.Expanded = res.SubItems.Count > 0;

			return res;
		}
Example #3
0
        /// <summary>
        /// Method to create the legend item
        /// </summary>
        /// <param name="settings">The legend settings</param>
        /// <param name="item">The item to create a legend item for</param>
        /// <returns>The legend item, if one could be created, otherwise <c>null</c></returns>
        public virtual ILegendItem Create(ILegendSettings settings, object item)
        {
            if (settings == null)
            {
                throw new ArgumentNullException("settings");
            }


            if (item == null)
            {
                throw new ArgumentNullException("item");
            }

            CheckType(item);

            var res = new LegendItem
            {
                Label      = CreateLabel(item),
                Item       = item,
                Symbol     = CreateSymbol(settings.SymbolSize, item),
                LabelFont  = settings.ItemFont,
                LabelBrush = settings.ForeColor,
                Padding    = settings.Padding,
                Exclude    = CheckExclude(item)
            };

            res.Expanded = CheckExpanded(res);
            return(res);
        }
        public ILegendItem Create(ILegendSettings legend, object item)
        {
            if (item == null)
            {
                throw new ArgumentNullException("item");
            }
            if (!(item is LabelLayer))
            {
                throw new ArgumentException("Item is not a label layer", "item");
            }

            var vl = (LabelLayer)item;

            ILegendItem res = null;

            if (vl.Theme != null)
            {
                res       = Factory[vl.Theme].Create(legend, vl.Theme) ?? new LegendItem();
                res.Label = vl.LayerName + res.Label ?? string.Empty;
            }
            else
            {
                res       = Factory[vl.Style].Create(legend, vl.Style) ?? new LegendItem();
                res.Label = vl.LayerName;
            }

            res.LabelFont  = legend.ItemFont;
            res.LabelBrush = legend.ForeColor;
            res.Padding    = legend.Padding;
            res.Exclude    = !vl.Enabled;
            res.Expanded   = res.SubItems.Count > 0;
            res.Item       = item;

            return(res);
        }
        private ILegendItem CreateCategoryThemeLegendItem <T>(ILegendSettings settings, CategoryTheme <T> ct)
            where T : IComparable <T>
        {
            var res = new LegendItem
            {
                Label       = " (" + ct.ColumnName + ")",
                LabelFont   = settings.ItemFont,
                LabelBrush  = settings.ForeColor,
                Indentation = settings.SymbolSize.Width
            };

            var defaultItem = Factory[ct.Default.Style].Create(settings, ct.Default.Style);

            defaultItem.Label      = "(" + ct.Default.Title + ")";
            defaultItem.LabelBrush = settings.ForeColor;
            defaultItem.LabelFont  = settings.ItemFont;
            defaultItem.Parent     = res;

            res.SubItems.Add(defaultItem);
            foreach (var element in ct.ItemsAsReadOnly())
            {
                var style = element.Style;
                var item  = Factory[style].Create(settings, style);
                item.Label      = element.Title;
                item.LabelFont  = settings.ItemFont;
                item.LabelBrush = settings.ForeColor;
                item.Parent     = res;
                item.Item       = style;
                res.SubItems.Add(item);
            }

            return(res);
        }
        public override ILegendItem Create(ILegendSettings settings, object item)
        {
            if (item == null)
                throw new ArgumentNullException("item");

            if (!(item is LayerGroup))
                throw new ArgumentException("Not of valid type", "item");

            var layerGroup = (LayerGroup) item;

            var res = new LayerGroupLegendItem
            {
                Label = layerGroup.LayerName,
                LabelFont = settings.ItemFont,
                LabelBrush = settings.ForeColor,
                Item = item
            };

            var lrs = new Layer[layerGroup.Layers.Count];
            layerGroup.Layers.CopyTo(lrs, 0);
            Array.Reverse(lrs);
            foreach (var layer in lrs)
            {
                var lif = Factory[layer];
                if (lif != null)
                {
                    var nli = lif.Create(settings, layer);
                    nli.Parent = res;
                    res.SubItems.Add(nli);
                }
            }

            return res;
        }
 private static ILegendItem CreateSymbolizerLegendItem(ILegendSettings settings, Image symbol)
 {
     return(new LegendItem
     {
         Symbol = symbol,
         LabelFont = settings.ItemFont
     });
 }
        public Legend(Map map, ILegendFactory factory = null, ILegendSettings settings = null)
        {
            _map      = map;
            _factory  = factory ?? new LegendFactory();
            _settings = settings ?? new LegendSettings();

            //Regenerate();
        }
        public Legend(Map map, ILegendFactory factory = null, ILegendSettings settings = null)
        {
            _map = map;
            _factory = factory ?? new LegendFactory();
            _settings = settings ?? new LegendSettings();

            //Regenerate();
        }
        public ILegendItem Create(ILegendSettings settings, object item)
        {
            if (item == null)
            {
                throw new ArgumentNullException("item");
            }
            if (!(item is ISymbolizer))
            {
                throw new ArgumentException("item is not a ISymbolizer class");
            }

            var sym = (ISymbolizer)item;

            var res = new LegendItem();

            if (IsPointSymbolizer(sym))
            {
                var nli = CreateSymbolizerLegendItem(settings, CreatePuntalSymbol(settings.SymbolSize, sym));
                nli.Parent = res;
                nli.Item   = sym;
                res.SubItems.Add(nli);
            }
            if (IsLineSymbolizer(sym))
            {
                var nli = CreateSymbolizerLegendItem(settings, CreateLinealSymbol(settings.SymbolSize, sym));
                nli.Parent = res;
                nli.Item   = sym;
                res.SubItems.Add(nli);
            }
            if (IsPolygonSymbolizer(sym))
            {
                var nli = CreateSymbolizerLegendItem(settings, CreatePolygonalSymbol(settings.SymbolSize, sym));
                nli.Parent = res;
                nli.Item   = sym;
                res.SubItems.Add(nli);
            }

            if (res.SubItems.Count == 0)
            {
                return(new LegendItem());
            }
            if (res.SubItems.Count == 1)
            {
                return(res.SubItems.First());
            }

            res.Expanded    = true;
            res.Padding     = settings.Padding;
            res.Indentation = settings.SymbolSize.Width;

            return(res);
        }
        public override ILegendItem Create(ILegendSettings settings, object item)
        {
            if (item == null)
            {
                throw new ArgumentNullException("item");
            }
            if (!(item is VectorStyle))
            {
                throw new ArgumentException("item is not a VectorStyle", "item");
            }

            var vs = (VectorStyle)item;

            var lis = new List <ILegendItem>(3);

            if (HasPuntalStyle(vs))
            {
                lis.Add(CreatePuntalStyleLegendItem(Factory, settings, vs));
            }
            if (HasLinealStyle(vs))
            {
                lis.Add(CreateLinealStyleLegendItem(Factory, settings, vs));
            }
            if (HasPolygonalStyle(vs))
            {
                lis.Add(CreatePolygonalStyleLegendItem(Factory, settings, vs));
            }

            if (lis.Count < 1)
            {
                return(new LegendItem());
            }
            if (lis.Count == 1)
            {
                return(lis[0]);
            }

            var res = new LegendItem();

            res.Indentation = settings.SymbolSize.Width;
            res.Item        = item;
            foreach (var li in lis)
            {
                {
                    li.Parent = res;
                    li.Item   = vs;
                    res.SubItems.Add(li);
                }
            }
            return(res);
        }
        public override ILegendItem Create(ILegendSettings legend, object item)
        {
            var res = base.Create(legend, item);

            var map = (Map) item;
            var scale = string.Format("1:{0:N0}", map.MapScale);
            res.SubItems.Add(Factory[scale].Create(legend, scale));

            res.SubItems.Add(Factory[map.BackgroundLayer].Create(legend, map.VariableLayers));
            res.SubItems.Add(Factory[map.BackgroundLayer].Create(legend, map.Layers));
            res.SubItems.Add(Factory[map.BackgroundLayer].Create(legend, map.BackgroundLayer));

            return res;
        }
        public override ILegendItem Create(ILegendSettings legend, object item)
        {
            var res = base.Create(legend, item);

            var map   = (Map)item;
            var scale = string.Format("1:{0:N0}", map.MapScale);

            res.SubItems.Add(Factory[scale].Create(legend, scale));

            res.SubItems.Add(Factory[map.BackgroundLayer].Create(legend, map.VariableLayers));
            res.SubItems.Add(Factory[map.BackgroundLayer].Create(legend, map.Layers));
            res.SubItems.Add(Factory[map.BackgroundLayer].Create(legend, map.BackgroundLayer));

            return(res);
        }
        /// <summary>
        /// Creates an instance of this class
        /// </summary>
        public LegendFactory(ILegendSettings settings)
        {
            LegendSettings = settings;

            Register(new DefaultTextLegendItemFactory());
            Register(new DefaultImageLegendItemFactory());
            Register(new DefaultMapLegendItemFactory());
            Register(new DefaultLayerGroupLegendItemFactory());
            Register(new DefaultLayerCollectionLegendItemFactory());
            Register(new DefaultVectorLayerLegendItemFactory());
            Register(new DefaultVectorStyleLegendItemFactory());
            Register(new DefaultThemeLegendItemFactory());
            Register(new DefaultSymbolizerLegendItemFactory());
            Register(new DefaultSymbolizerLayerLegendItemFactory());
            Register(new DefaultLayerLegendItemFactory());
        }
        /// <summary>
        /// Creates an instance of this class
        /// </summary>
        public LegendFactory(ILegendSettings settings)
        {
            LegendSettings = settings;

            Register(new DefaultTextLegendItemFactory());
            Register(new DefaultImageLegendItemFactory());
            Register(new DefaultMapLegendItemFactory());
            Register(new DefaultLayerGroupLegendItemFactory());
            Register(new DefaultLayerCollectionLegendItemFactory());
            Register(new DefaultVectorLayerLegendItemFactory());
            Register(new DefaultVectorStyleLegendItemFactory());
            Register(new DefaultThemeLegendItemFactory());
            Register(new DefaultSymbolizerLegendItemFactory());
            Register(new DefaultSymbolizerLayerLegendItemFactory());
            Register(new DefaultLayerLegendItemFactory());
        }
Example #16
0
        /// <summary>
        /// Method to create a legend <see cref="IMapDecoration"/> for the provided map
        /// </summary>
        /// <param name="map">The map</param>
        /// <param name="settings"></param>
        /// <returns>A legend map decoration</returns>
        public virtual ILegend Create(Map map, ILegendSettings settings = null)
        {
            settings = settings ?? LegendSettings;

            var res = new Legend(map, this, settings)
            {
                Root = new LegendItem
                {
                    Label      = "Map",
                    LabelFont  = settings.HeaderFont,
                    LabelBrush = settings.ForeColor,
                    Item       = map,
                    Expanded   = true
                }
            };

            var lif = ((ILegendFactory)this)[map.Layers];

            if (map.VariableLayers.Count > 0)
            {
                var itm = lif.Create(LegendSettings, map.VariableLayers);
                itm.Parent = res.Root;
                res.Root.SubItems.Add(itm);
            }

            if (map.Layers.Count > 0)
            {
                var itm = lif.Create(LegendSettings, map.Layers);
                itm.Parent = res.Root;
                res.Root.SubItems.Add(itm);
            }

            if (map.BackgroundLayer.Count > 0)
            {
                var itm = lif.Create(LegendSettings, map.BackgroundLayer);
                itm.Parent = res.Root;
                res.Root.SubItems.Add(itm);
            }

            res.BorderColor     = Color.Tomato;
            res.BorderMargin    = new Size(5, 5);
            res.BorderWidth     = 2;
            res.RoundedEdges    = true;
            res.BackgroundColor = Color.LightBlue;

            return(res);
        }
        /// <summary>
        /// Method to create a legend item for a layer
        /// </summary>
        /// <param name="settings">The legend settings</param>
        /// <param name="layer">The layer to create an item for</param>
        /// <returns>A legend item</returns>
        protected virtual ILegendItem Create(ILegendSettings settings, ILayer layer)
        {
            var factory = LookUpFactory(layer.GetType());

            if (factory != null)
            {
                return(factory.Create(settings, layer));
            }

            return(new LegendItem
            {
                Label = layer.LayerName, LabelFont = LegendSettings.ItemFont, LabelBrush = LegendSettings.ForeColor,
                Symbol = CreateGenericSymbol(layer),
                Exclude = !layer.Enabled,
                Indentation = LegendSettings.Indentation,
                Padding = LegendSettings.Padding,
                Expanded = true
            });
        }
        public ILegendItem Create(ILegendSettings settings, object item)
        {
            if (item == null)
                throw new ArgumentNullException("item");
            if (!(item is ISymbolizer))
                throw new ArgumentException("item is not a ISymbolizer class");

            var sym = (ISymbolizer) item;

            var res = new LegendItem();
            if (IsPointSymbolizer(sym))
            {
                var nli = CreateSymbolizerLegendItem(settings, CreatePuntalSymbol(settings.SymbolSize, sym));
                nli.Parent = res;
                nli.Item = sym;
                res.SubItems.Add(nli);
            }
            if (IsLineSymbolizer(sym))
            {
                var nli = CreateSymbolizerLegendItem(settings, CreateLinealSymbol(settings.SymbolSize, sym));
                nli.Parent = res;
                nli.Item = sym;
                res.SubItems.Add(nli);
            }
            if (IsPolygonSymbolizer(sym))
            {
                var nli = CreateSymbolizerLegendItem(settings, CreatePolygonalSymbol(settings.SymbolSize, sym));
                nli.Parent = res;
                nli.Item = sym;
                res.SubItems.Add(nli);
            }

            if (res.SubItems.Count == 0)
                return new LegendItem();
            if (res.SubItems.Count == 1)
                return res.SubItems.First();

            res.Expanded = true;
            res.Padding = settings.Padding;
            res.Indentation = settings.SymbolSize.Width;

            return res;
        }
        public ILegendItem Create(ILegendSettings legend, object item)
        {
            if (item == null)
            {
                throw new ArgumentNullException("item");
            }
            if (!(item is ITheme))
            {
                throw new ArgumentException("Item is not a theme", "item");
            }

            if (item is GradientTheme)
            {
                return(CreateGradientThemeLegendItems(legend, (GradientTheme)item));
            }
            else if (item is UniqueValuesTheme <string> )
            {
                return(CreateUniqueValuesLegendItems <string>(legend, (UniqueValuesTheme <string>)item));
            }
            else if (item is UniqueValuesTheme <double> )
            {
                return(CreateUniqueValuesLegendItems <double>(legend, (UniqueValuesTheme <double>)item));
            }
            else if (item is UniqueValuesTheme <int> )
            {
                return(CreateUniqueValuesLegendItems <int>(legend, (UniqueValuesTheme <int>)item));
            }
            else if (item is CategoryTheme <string> )
            {
                return(CreateCategoryThemeLegendItem <string>(legend, (CategoryTheme <string>)item));
            }
            else if (item is CategoryTheme <double> )
            {
                return(CreateCategoryThemeLegendItem <double>(legend, (CategoryTheme <double>)item));
            }
            else if (item is CategoryTheme <int> )
            {
                return(CreateCategoryThemeLegendItem <int>(legend, (CategoryTheme <int>)item));
            }
            return(null);
        }
Example #20
0
        public override ILegendItem Create(ILegendSettings settings, object item)
        {
            if (item == null)
            {
                throw new ArgumentNullException("item");
            }

            if (!(item is LayerGroup))
            {
                throw new ArgumentException("Not of valid type", "item");
            }

            var layerGroup = (LayerGroup)item;

            var res = new LayerGroupLegendItem
            {
                Label      = layerGroup.LayerName,
                LabelFont  = settings.ItemFont,
                LabelBrush = settings.ForeColor,
                Item       = item
            };

            var lrs = new Layer[layerGroup.Layers.Count];

            layerGroup.Layers.CopyTo(lrs, 0);
            Array.Reverse(lrs);
            foreach (var layer in lrs)
            {
                var lif = Factory[layer];
                if (lif != null)
                {
                    var nli = lif.Create(settings, layer);
                    nli.Parent = res;
                    res.SubItems.Add(nli);
                }
            }

            return(res);
        }
        ILegendItem CreateUniqueValuesLegendItems <T>(ILegendSettings settings, UniqueValuesTheme <T> uvt)
            where T : IConvertible
        {
            var res = new LegendItem {
                Label       = " (" + uvt.AttributeName + ")",
                LabelFont   = settings.ItemFont, LabelBrush = settings.ForeColor,
                Indentation = settings.SymbolSize.Width
            };

            var defaultItem = Factory[uvt.DefaultStyle].Create(settings, uvt.DefaultStyle);

            defaultItem.Label      = "(default)";
            defaultItem.LabelBrush = settings.ForeColor;
            defaultItem.LabelFont  = settings.ItemFont;
            defaultItem.Parent     = res;
            defaultItem.Item       = uvt.DefaultStyle;

            res.SubItems.Add(defaultItem);
            using (var fdt = CreateTable(uvt.AttributeName, typeof(T)))
            {
                for (var i = 0; i < uvt.UniqueValues.Length; i++)
                {
                    var row = fdt.NewRow();
                    T   val = default(T);
                    row[0] = Convert.ChangeType(uvt.UniqueValues[i], val.GetTypeCode());
                    var style = uvt.GetStyle(row);
                    var item  = Factory[style].Create(settings, style);
                    item.Label      = uvt.UniqueValues[i];
                    item.LabelFont  = settings.ItemFont;
                    item.LabelBrush = settings.ForeColor;
                    item.Parent     = res;
                    item.Item       = style;
                    res.SubItems.Add(item);
                }
            }

            return(res);
        }
        public ILegendItem Create(ILegendSettings legend, object item)
        {
            if (item == null)
            {
                throw new ArgumentNullException("item");
            }

            if (!(item is AnyGeometryVectorLayer ||
                  item is PuntalVectorLayer || item is LinealVectorLayer || item is PolygonalVectorLayer))
            {
                throw new ArgumentException("Item is not a vector layer", "item");
            }

            var sym = GetSymbolizer(item);

            ILegendItem res    = null;
            var         symFac = Factory[sym];

            if (symFac != null)
            {
                res = symFac.Create(legend, sym) ?? new LegendItem();
            }
            else
            {
                res = new LegendItem();
            }

            res.Item  = item;
            res.Label = ((ILayer)item).LayerName;

            res.LabelFont  = legend.ItemFont;
            res.LabelBrush = legend.ForeColor;
            res.Padding    = legend.Padding;
            res.Exclude    = !((ILayer)item).Enabled;
            res.Expanded   = res.SubItems.Count > 0;

            return(res);
        }
        public override ILegendItem Create(ILegendSettings legend, object item)
        {
            var lc = (LayerCollection)item;
            if (lc.Count == 0) 
                return null;

            var res = base.Create(legend, item);

            var lrs = new ILayer[lc.Count];
            lc.CopyTo(lrs, 0);
            Array.Reverse(lrs);
            foreach (var layer in lrs)
            {
                var li = Factory[layer].Create(legend, layer);
                if (li != null)
                {
                    res.SubItems.Add(li);
                }
            }
            res.Expanded = res.SubItems.Count > 0;
            res.Indentation = legend.Indentation;
            return res;
        }
        /// <summary>
        /// Method to create a legend item for a layer collection
        /// </summary>
        /// <param name="settings">The legend</param>
        /// <param name="title">The title</param>
        /// <param name="layerCollection">The layer collection</param>
        /// <returns>The created legend item</returns>
        protected virtual ILegendItem Create(ILegendSettings settings, string title, LayerCollection layerCollection)
        {
            var res = new LegendItem
            {
                Indentation = LegendSettings.Indentation,
                Label       = title,
                LabelFont   = LegendSettings.HeaderFont,
                LabelBrush  = LegendSettings.ForeColor,
                Expanded    = true,
                Padding     = LegendSettings.Padding,
                //Parent = legend.Root,
                Item = layerCollection
            };

            for (var i = layerCollection.Count - 1; i >= 0; i--)
            {
                var layer = layerCollection[i];

                var item = Create(settings, layer);
                res.SubItems.Add(item);
            }
            return(res);
        }
        /// <summary>
        /// Method to create the legend item
        /// </summary>
        /// <param name="settings">The legend settings</param>
        /// <param name="item">The item to create a legend item for</param>
        /// <returns>The legend item, if one could be created, otherwise <c>null</c></returns>
        public virtual ILegendItem Create(ILegendSettings settings, object item)
        {
            if (settings == null)
                throw new ArgumentNullException("settings");


            if (item == null)
                throw new ArgumentNullException("item");

            CheckType(item);

            var res = new LegendItem
            {
                Label = CreateLabel(item),
                Item = item,
                Symbol = CreateSymbol(settings.SymbolSize, item),
                LabelFont = settings.ItemFont,
                LabelBrush = settings.ForeColor,
                Padding = settings.Padding,
                Exclude = CheckExclude(item)
            };
            res.Expanded = CheckExpanded(res);
            return res;
        }
        ILegendItem CreateGradientThemeLegendItems(ILegendSettings settings, GradientTheme gt)
        {
            var res = new LegendItem {
                Label       = " (" + gt.ColumnName + ")",
                Indentation = settings.SymbolSize.Width
            };
            var fcb = gt.FillColorBlend;
            var lcb = gt.LineColorBlend;
            var tcb = gt.TextColorBlend;

            for (var i = 0; i < fcb.Positions.Length; i++)
            {
                var tmp = gt.Min + fcb.Positions[i] * (gt.Max - gt.Min);
                var sl  = new LegendItem {
                    Label      = tmp.ToString("N"),
                    LabelFont  = settings.ItemFont,
                    LabelBrush = tcb != null ? new SolidBrush(tcb.Colors[i]) : settings.ForeColor,
                    Symbol     = CreateSymbol(settings.SymbolSize, fcb.Colors[i], lcb != null ? lcb.Colors[i] : Color.Transparent),
                    Parent     = res, Item = i
                };
                res.SubItems.Add(sl);
            }
            return(res);
        }
        public ILegendItem Create(ILegendSettings legend, object item)
        {
            if (item == null)
                throw new ArgumentNullException("item");
            
            if (!(item is AnyGeometryVectorLayer ||
                  item is PuntalVectorLayer || item is LinealVectorLayer || item is PolygonalVectorLayer))
                throw new ArgumentException("Item is not a vector layer", "item");

            var sym = GetSymbolizer(item);

            ILegendItem res = null;
            var symFac = Factory[sym];
            if (symFac != null)
                res = symFac.Create(legend, sym) ?? new LegendItem();
            else
                res = new LegendItem();

            res.Item = item;
            res.Label = ((ILayer) item).LayerName;

            res.LabelFont = legend.ItemFont;
            res.LabelBrush = legend.ForeColor;
            res.Padding = legend.Padding;
            res.Exclude = !((ILayer)item).Enabled;
            res.Expanded = res.SubItems.Count > 0;

            return res;
        }
        /// <summary>
        /// Method to create a legend item for a layer
        /// </summary>
        /// <param name="settings">The legend settings</param>
        /// <param name="layer">The layer to create an item for</param>
        /// <returns>A legend item</returns>
        protected virtual ILegendItem Create(ILegendSettings settings, ILayer layer)
        {
            var factory = LookUpFactory(layer.GetType());
            if (factory != null)
                return factory.Create(settings, layer);

            return new LegendItem
            {
                Label = layer.LayerName, LabelFont = LegendSettings.ItemFont, LabelBrush = LegendSettings.ForeColor,
                Symbol = CreateGenericSymbol(layer),
                Exclude = !layer.Enabled,
                Indentation = LegendSettings.Indentation,
                Padding = LegendSettings.Padding,
                Expanded = true
            };
        }
 protected virtual ILegendItem CreatePolygonalStyleLegendItem(ILegendFactory factory, ILegendSettings settings, VectorStyle vs)
 {
     return(new LegendItem {
         Symbol = CreatePolygonSymbol(factory, settings.SymbolSize, vs)
     });
 }
        private static ILegendItem CreateSymbolizerLegendItem(ILegendSettings settings, Image symbol)
        {
            return new LegendItem
            {
                Symbol =  symbol,
                LabelFont = settings.ItemFont
                
            };

        }
        /// <summary>
        /// Method to create a legend item for a layer collection
        /// </summary>
        /// <param name="settings">The legend</param>
        /// <param name="title">The title</param>
        /// <param name="layerCollection">The layer collection</param>
        /// <returns>The created legend item</returns>
        protected virtual ILegendItem Create(ILegendSettings settings, string title, LayerCollection layerCollection)
        {
            var res = new LegendItem
            {
                Indentation = LegendSettings.Indentation,
                Label = title,
                LabelFont = LegendSettings.HeaderFont,
                LabelBrush = LegendSettings.ForeColor,
                Expanded = true,
                Padding = LegendSettings.Padding,
                //Parent = legend.Root,
                Item = layerCollection
            };

            for (var i = layerCollection.Count-1; i >= 0; i--)
            {
            	var layer = layerCollection[i];
            
                var item = Create(settings, layer);
            	res.SubItems.Add(item);
            }
            return res;
        }
        /// <summary>
        /// Method to create a legend <see cref="IMapDecoration"/> for the provided map
        /// </summary>
        /// <param name="map">The map</param>
        /// <param name="settings"></param>
        /// <returns>A legend map decoration</returns>
        public virtual ILegend Create(Map map, ILegendSettings settings = null)
        {
            settings = settings ?? LegendSettings;

            var res = new Legend(map, this, settings)
            {
                Root = new LegendItem
                {
                    Label = "Map",
                    LabelFont = settings.HeaderFont,
                    LabelBrush = settings.ForeColor,
                    Item = map,
                    Expanded = true
                    
                }
            };

            var lif = ((ILegendFactory) this)[ map.Layers];
            if (map.VariableLayers.Count > 0)
                res.Root.SubItems.Add(lif.Create(LegendSettings, map.VariableLayers));

            if (map.Layers.Count > 0)
                res.Root.SubItems.Add(lif.Create(LegendSettings, map.Layers));

            if (map.BackgroundLayer.Count > 0)
                res.Root.SubItems.Add(lif.Create(LegendSettings, map.BackgroundLayer));

            res.BorderColor = Color.Tomato;
            res.BorderMargin = new Size(5, 5);
            res.BorderWidth = 2;
            res.RoundedEdges = true;
            res.BackgroundColor = Color.LightBlue;
            
            return res;
        }