private bool ValidateLegendItem(LegendImporterItemViewModel tmpItem)
 {
     return(tmpItem.Style != null &&
            tmpItem.AllowToAdd &&
            !(tmpItem.Style is CompositeStyle) &&
            !(tmpItem.Style is ValueStyle) &&
            !(tmpItem.Style is ClassBreakStyle)
            //&& !(tmpItem.Style is FilterStyle)
            && !(tmpItem.Style is RegexStyle));
 }
        private LegendImporterItemViewModel GenerateComponentSytleItem(LayerListItem layerListItem)
        {
            var style = layerListItem.ConcreteObject as CompositeStyle;
            var zoomLevelImporterItem = new LegendImporterItemViewModel();

            zoomLevelImporterItem.PropertyChanged += LayerLegendImporterItemPropertyChanged;
            zoomLevelImporterItem.Text             = layerListItem.Name;
            var styleItem = layerListItem as StyleLayerListItem;

            if (styleItem != null)
            {
                zoomLevelImporterItem.Text += styleItem.ZoomLevelRange;
            }

            zoomLevelImporterItem.IconSource         = layerListItem.PreviewImage.Source;
            zoomLevelImporterItem.CheckBoxVisibility = Visibility.Visible;
            zoomLevelImporterItem.Style = style;
            zoomLevelImporterItem.Level = 1;
            return(zoomLevelImporterItem);
        }
        private void LayerLegendImporterItemPropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            LegendImporterItemViewModel itemViewModel = sender as LegendImporterItemViewModel;

            if (e.PropertyName.Equals("AllowToAdd") && itemViewModel != null)
            {
                var indexOf = legendImporterItems.IndexOf(itemViewModel);
                for (int i = indexOf + 1; i < legendImporterItems.Count; i++)
                {
                    if (legendImporterItems[i].Level > itemViewModel.Level)
                    {
                        legendImporterItems[i].AllowToAdd = itemViewModel.AllowToAdd;
                    }
                    else
                    {
                        break;
                    }
                }
            }
        }
        private LegendImporterItemViewModel GenerateLayerItem(FeatureLayer featureLayer)
        {
            SimpleShapeType shpType            = SimpleShapeType.Area;
            var             featureLayerPlugin = GisEditor.LayerManager.GetLayerPlugins(featureLayer.GetType()).FirstOrDefault() as FeatureLayerPlugin;

            if (featureLayerPlugin != null)
            {
                featureLayerPlugin.GetFeatureSimpleShapeType(featureLayer);
            }

            ImageSource imageSource = GetIconSource("pointShp.png");

            switch (shpType)
            {
            case SimpleShapeType.Line:
                imageSource = GetIconSource("lineShp.png");
                break;

            case SimpleShapeType.Area:
                imageSource = GetIconSource("areaShp.png");
                break;

            default:
                break;
            }

            LegendImporterItemViewModel layerLegendImporterItem = new LegendImporterItemViewModel
            {
                Text       = featureLayer.Name,
                IconSource = imageSource,
                Level      = 0
            };

            layerLegendImporterItem.PropertyChanged += LayerLegendImporterItemPropertyChanged;


            return(layerLegendImporterItem);
        }
        private IEnumerable <LegendImporterItemViewModel> GenerateStyleItems(Styles.Style style, int level)
        {
            if (style is AreaStyle || style is PointStyle || style is LineStyle)
            {
                LegendImporterItemViewModel styleLegendItem = new LegendImporterItemViewModel
                {
                    Text = style.Name,
                    CheckBoxVisibility = Visibility.Visible,
                    Level            = level,
                    LeftPaddingLevel = level,
                    Style            = style
                };

                using (Bitmap nativeImage = new Bitmap(iconSize, iconSize))
                {
                    var geoCanvas    = new PlatformGeoCanvas();
                    var drawingShape = new RectangleShape(-10, 10, 10, -10);
                    geoCanvas.BeginDrawing(nativeImage, drawingShape, GeographyUnit.Meter);
                    style.DrawSample(geoCanvas, new DrawingRectangleF(geoCanvas.Width * .5f, geoCanvas.Height * .5f, geoCanvas.Width, geoCanvas.Height));
                    geoCanvas.EndDrawing();

                    var streamSource = new MemoryStream();
                    nativeImage.Save(streamSource, ImageFormat.Png);

                    var imageSource = new BitmapImage();
                    imageSource.BeginInit();
                    imageSource.StreamSource = streamSource;
                    imageSource.EndInit();
                    imageSource.Freeze();

                    styleLegendItem.IconSource = imageSource;
                }

                yield return(styleLegendItem);
            }
            else if (style is ClassBreakStyle || style is RegexStyle || style is ValueStyle || style is FilterStyle)
            {
                var clonedStyle     = style.CloneDeep();
                var classBreakStyle = clonedStyle as ClassBreakStyle;
                var regexStyle      = clonedStyle as RegexStyle;
                var valueStyle      = clonedStyle as ValueStyle;
                var filterStyle     = clonedStyle as FilterStyle;
                IEnumerable <Styles.Style> subStyles = new Collection <Styles.Style>();
                if (classBreakStyle != null)
                {
                    subStyles = classBreakStyle.ClassBreaks.SelectMany(classBreakItem =>
                    {
                        foreach (var item in classBreakItem.CustomStyles)
                        {
                            item.Name = ClassBreakSubItem.GetClassBreakStyleName(classBreakItem.Value);
                        }
                        return(classBreakItem.CustomStyles);
                    });
                }
                else if (regexStyle != null)
                {
                    subStyles = regexStyle.RegexItems.SelectMany(regexItem => regexItem.CustomStyles);
                }
                else if (filterStyle != null)
                {
                    subStyles = new Collection <Styles.Style>();//filterStyle.Styles;
                }
                else
                {
                    subStyles = valueStyle.ValueItems.SelectMany(valueItem =>
                    {
                        foreach (var item in valueItem.CustomStyles)
                        {
                            item.Name = valueItem.Value;
                        }
                        return(valueItem.CustomStyles);
                    });
                }

                LegendImporterItemViewModel styleLegendItem = new LegendImporterItemViewModel
                {
                    Text = style.Name,
                    CheckBoxVisibility = Visibility.Visible,
                    Level = level,
                    Style = style
                };
                styleLegendItem.PropertyChanged += LayerLegendImporterItemPropertyChanged;

                using (Bitmap nativeImage = new Bitmap(iconSize, iconSize))
                {
                    var geoCanvas    = new PlatformGeoCanvas();
                    var drawingShape = new RectangleShape(-10, 10, 10, -10);
                    geoCanvas.BeginDrawing(nativeImage, drawingShape, GeographyUnit.Meter);
                    style.DrawSample(geoCanvas, new DrawingRectangleF(geoCanvas.Width * .5f, geoCanvas.Height * .5f, geoCanvas.Width, geoCanvas.Height));
                    geoCanvas.EndDrawing();

                    var streamSource = new MemoryStream();
                    nativeImage.Save(streamSource, ImageFormat.Png);
                    BitmapImage imageSource = new BitmapImage();
                    imageSource.BeginInit();
                    imageSource.StreamSource = streamSource;
                    imageSource.EndInit();
                    imageSource.Freeze();

                    styleLegendItem.IconSource = imageSource;
                }

                yield return(styleLegendItem);

                foreach (var itemStyle in subStyles)
                {
                    foreach (var tmpItem in GenerateStyleItems(itemStyle, level + 3))
                    {
                        yield return(tmpItem);
                    }
                }
            }
            else
            {
                var componentStyle = style as CompositeStyle;
                if (componentStyle != null)
                {
                    if (componentStyle.Styles.Count > 1)
                    {
                        LegendImporterItemViewModel styleLegendItem = new LegendImporterItemViewModel
                        {
                            Text = style.Name,
                            CheckBoxVisibility = Visibility.Visible,
                            Level      = level,
                            IconSource = new BitmapImage()
                        };

                        yield return(styleLegendItem);

                        foreach (var innerStyle in componentStyle.Styles.Reverse())
                        {
                            foreach (var tmpItem in GenerateStyleItems(innerStyle, level + 3))
                            {
                                yield return(tmpItem);
                            }
                        }
                    }
                    else
                    {
                        foreach (var tmpItem in GenerateStyleItems(componentStyle.Styles.FirstOrDefault(), level))
                        {
                            yield return(tmpItem);
                        }
                    }
                }
                else
                {
                    LegendImporterItemViewModel styleLegendItem = new LegendImporterItemViewModel
                    {
                        Text = style.Name,
                        CheckBoxVisibility = Visibility.Collapsed,
                        Level      = level,
                        IconSource = new BitmapImage()
                    };

                    yield return(styleLegendItem);
                }
            }
        }