public ClassBreakStyleItem(ClassBreakStyle style) : base(style) { classBreakStyle = style; if (classBreakStyle != null) { foreach (var classBreak in classBreakStyle.ClassBreaks) { StyleLayerListItem classBreakItem = new ClassBreakSubItem(classBreak, classBreakStyle.ColumnName); Children.Add(classBreakItem); } } }
protected override void UpdateStyleItemCore() { base.UpdateStyleItemCore(); if (classBreakStyle != null) { var deletedClassBreaks = Children.Where(i => !classBreakStyle.ClassBreaks.Any(c => c == i.ConcreteObject)).ToList(); foreach (var deletedClassBreak in deletedClassBreaks) { if (Children.Contains(deletedClassBreak)) { Children.Remove(deletedClassBreak); } } var addedClassBreaks = classBreakStyle.ClassBreaks.Where(c => !Children.Any(i => i.ConcreteObject == c)).ToList(); foreach (var addedClassBreak in addedClassBreaks) { StyleLayerListItem classBreakItem = new ClassBreakSubItem(addedClassBreak, classBreakStyle.ColumnName); Children.Add(classBreakItem); } } }
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); } } }