コード例 #1
0
        public static void AddStyle()
        {
            if (GisEditor.LayerListManager.SelectedLayerListItem == null)
            {
                return;
            }
            var featureLayer = GisEditor.LayerListManager.SelectedLayerListItem.ConcreteObject as FeatureLayer;

            if (featureLayer == null)
            {
                featureLayer = GisEditor.LayerListManager.SelectedLayerListItem.Parent.ConcreteObject as FeatureLayer;
            }
            if (featureLayer != null)
            {
                var styleArguments     = new StyleBuilderArguments();
                var featureLayerPlugin = GisEditor.LayerManager.GetLayerPlugins(featureLayer.GetType()).FirstOrDefault() as FeatureLayerPlugin;
                switch (featureLayerPlugin.GetFeatureSimpleShapeType(featureLayer))
                {
                case SimpleShapeType.Point:
                    styleArguments.AvailableStyleCategories = StyleCategories.Point | StyleCategories.Label | StyleCategories.Composite;
                    break;

                case SimpleShapeType.Line:
                    styleArguments.AvailableStyleCategories = StyleCategories.Line | StyleCategories.Label | StyleCategories.Composite;
                    break;

                case SimpleShapeType.Area:
                    styleArguments.AvailableStyleCategories = StyleCategories.Area | StyleCategories.Label | StyleCategories.Composite;
                    break;
                }
                var componentStyle = new CompositeStyle();
                styleArguments.StyleToEdit        = componentStyle;
                styleArguments.FeatureLayer       = featureLayer;
                styleArguments.FromZoomLevelIndex = 1;
                styleArguments.ToZoomLevelIndex   = GisEditor.ActiveMap.ZoomLevelSet.GetZoomLevels().Where(z => z.GetType() == typeof(ZoomLevel)).Count();
                styleArguments.AppliedCallback    = new Action <StyleBuilderResult>((styleResult) =>
                {
                    if (!styleResult.Canceled)
                    {
                        foreach (var zoomLevel in featureLayer.ZoomLevelSet.CustomZoomLevels)
                        {
                            zoomLevel.CustomStyles.Remove(componentStyle);
                        }

                        for (int i = styleResult.FromZoomLevelIndex - 1; i < styleResult.ToZoomLevelIndex; i++)
                        {
                            featureLayer.ZoomLevelSet.CustomZoomLevels[i].CustomStyles.Add(styleResult.CompositeStyle);
                        }

                        LayerListHelper.InvalidateTileOverlay();
                        GisEditor.UIManager.InvokeRefreshPlugins(new RefreshArgs(featureLayer, RefreshArgsDescriptions.AddStyleCommandDescription));
                        componentStyle = styleResult.CompositeStyle as CompositeStyle;
                    }
                });

                styleArguments.FillRequiredColumnNames();
                var styleResults = GisEditor.StyleManager.EditStyle(styleArguments);
                styleArguments.AppliedCallback(styleResults);
            }
        }
コード例 #2
0
        protected virtual StyleBuilderWindow GetStyleBuiderUICore(StyleBuilderArguments arguments)
        {
            StyleBuilderWindow window = new StyleBuilderWindow();

            window.StyleBuilderArguments = arguments;
            return(window);
        }
コード例 #3
0
 public StyleItemViewModel(StyleLayerListItem styleItem, StyleBuilderArguments styleArguments)
 {
     this.styleItem      = styleItem;
     this.styleArguments = styleArguments;
     this.InitializeSubViewModels();
     this.InitializeContextMenuItems();
 }
コード例 #4
0
        /// <summary>
        /// Initializes a new instance of the <see cref="StyleBuilderWindow" /> class.
        /// </summary>
        /// <param name="styleBuilderArguments">The style builder arguments.</param>
        public StyleBuilderWindow(StyleBuilderArguments styleBuilderArguments)
        {
            ApplyWindowStyle(this);

            this.styleBuilderArguments = styleBuilderArguments;
            this.InitializeComponent();
            this.Loaded += new RoutedEventHandler(StyleBuilderWindow_Loaded);
        }
コード例 #5
0
        /// <summary>
        /// Gets the UI.
        /// </summary>
        /// <param name="styleArguments">The style arguments.</param>
        /// <returns>The style user control</returns>
        public StyleUserControl GetUI(StyleBuilderArguments styleArguments)
        {
            StyleUserControl styleUI = GetUICore(styleArguments);

            if (styleUI != null)
            {
                styleUI.StyleItem = this;
            }
            return(styleUI);
        }
コード例 #6
0
        /// <summary>
        /// Edits the style core.
        /// </summary>
        /// <param name="styleBuilderArguments">The style builder arguments.</param>
        /// <param name="selectedConcreteObject">The selected concrete object.</param>
        /// <returns></returns>
        protected virtual StyleBuilderResult EditStyleCore(StyleBuilderArguments styleBuilderArguments)
        {
            StyleBuilderResult styleEditResult = new StyleBuilderResult();
            StyleBuilderWindow styleBuilder    = new StyleBuilderWindow(styleBuilderArguments);

            styleBuilder.IsSubStyleReadonly    = styleBuilderArguments.IsSubStyleReadonly;
            styleEditResult.Canceled           = !styleBuilder.ShowDialog().Value;
            styleEditResult.FromZoomLevelIndex = styleBuilder.StyleBuilderResult.FromZoomLevelIndex;
            styleEditResult.ToZoomLevelIndex   = styleBuilder.StyleBuilderResult.ToZoomLevelIndex;
            styleEditResult.CompositeStyle     = styleBuilder.StyleBuilderResult.CompositeStyle;
            return(styleEditResult);
        }
コード例 #7
0
        public StyleBuilderViewModel(CompositeStyle editingStyle, StyleBuilderArguments styleArguments)
        {
            this.componentStyle      = editingStyle;
            this.styleArguments      = styleArguments;
            this.fromZoomLevelModels = new Collection <ZoomLevelModel>();
            this.InitializeZoomLevels(fromZoomLevelModels);
            this.toZoomLevelModels = new Collection <ZoomLevelModel>();
            this.InitializeZoomLevels(toZoomLevelModels);

            this.InitializeStyleItems(styleArguments.SelectedConcreteObject);
            this.InitializeUIItems(styleArguments.AvailableUIElements);
            this.InitializeCommands();
            this.mainContextMenu = RootStyleItem.ContextMenu;
        }
コード例 #8
0
        private static StyleBuilderArguments GetDuplicateStyleArguments(StyleCategories styleCategories, StyleBuilderArguments styleArguments)
        {
            StyleBuilderArguments newStyleBuilderArguments = new StyleBuilderArguments
            {
                AppliedCallback          = styleArguments.AppliedCallback,
                AvailableStyleCategories = styleCategories | StyleCategories.Label | StyleCategories.Composite,
                AvailableUIElements      = styleArguments.AvailableUIElements,
                FeatureLayer             = styleArguments.FeatureLayer,
                FromZoomLevelIndex       = styleArguments.FromZoomLevelIndex,
                SelectedConcreteObject   = styleArguments.SelectedConcreteObject,
                StyleToEdit      = styleArguments.StyleToEdit,
                ToZoomLevelIndex = styleArguments.ToZoomLevelIndex
            };

            newStyleBuilderArguments.FillRequiredColumnNames();

            return(newStyleBuilderArguments);
        }
コード例 #9
0
        public static void EditStyle(LayerListItem selectedLayerListItem)
        {
            var componentStyleItem = LayerListHelper.FindViewModelInTree <CompositeStyle>(selectedLayerListItem) as StyleLayerListItem;

            if (componentStyleItem != null)
            {
                var componentStyle = componentStyleItem.ConcreteObject as CompositeStyle;
                var styleArguments = new StyleBuilderArguments();
                styleArguments.FeatureLayer = componentStyleItem.Parent.ConcreteObject as FeatureLayer;
                var featureLayerPlugin = GisEditor.LayerManager.GetLayerPlugins(styleArguments.FeatureLayer.GetType()).FirstOrDefault() as FeatureLayerPlugin;
                if (featureLayerPlugin != null)
                {
                    styleArguments.AvailableStyleCategories = GetStyleCategoriesByFeatureLayer(styleArguments.FeatureLayer);
                    int from = 1;
                    int to   = GisEditor.ActiveMap.ZoomLevelSet.CustomZoomLevels.Where(z => z.GetType() == typeof(ZoomLevel)).Count();
                    if (!string.IsNullOrEmpty(componentStyleItem.ZoomLevelRange))
                    {
                        var array = componentStyleItem.ZoomLevelRange.Split(" to ".ToArray(), StringSplitOptions.RemoveEmptyEntries);
                        if (array.Length == 2)
                        {
                            int.TryParse(array[0].Replace("(", "").Trim(), out from);
                            int.TryParse(array[1].Replace(")", "").Trim(), out to);
                        }
                    }

                    styleArguments.FromZoomLevelIndex = from;
                    styleArguments.ToZoomLevelIndex   = to;
                    styleArguments.AppliedCallback    = new Action <StyleBuilderResult>((styleResults) =>
                    {
                        if (!styleResults.Canceled)
                        {
                            var resultStyle = styleResults.CompositeStyle as CompositeStyle;
                            var count       = GisEditor.ActiveMap.ZoomLevelSet.GetZoomLevels().Where(z => z.GetType() == typeof(ZoomLevel)).Count();
                            for (int i = 0; i < count; i++)
                            {
                                var customStyles = styleArguments.FeatureLayer.ZoomLevelSet.CustomZoomLevels[i].CustomStyles;
                                if (i >= styleResults.FromZoomLevelIndex - 1 && i < styleResults.ToZoomLevelIndex)
                                {
                                    if (!customStyles.Contains(componentStyle))
                                    {
                                        customStyles.Add(componentStyle);
                                    }
                                    componentStyle.Styles.Clear();
                                    componentStyle.Name = resultStyle.Name;
                                    foreach (var item in resultStyle.Styles)
                                    {
                                        componentStyle.Styles.Add(item);
                                    }
                                }
                                else
                                {
                                    customStyles.Remove(componentStyle);
                                }
                            }
                            if (styleArguments.FeatureLayer.IsVisible)
                            {
                                foreach (var overlay in GisEditor.ActiveMap.GetOverlaysContaining(styleArguments.FeatureLayer))
                                {
                                    overlay.Invalidate();
                                }
                            }
                            GisEditor.UIManager.InvokeRefreshPlugins(new RefreshArgs(styleResults, RefreshArgsDescriptions.EditStyleDescription));
                        }
                    });
                    var styleItems = new Collection <StyleLayerListItem>();
                    foreach (var style in componentStyle.Styles)
                    {
                        var item = GisEditor.StyleManager.GetStyleLayerListItem(style);
                        if (item != null)
                        {
                            styleItems.Add(item);
                        }
                    }

                    var clonedStyleItems     = new Collection <StyleLayerListItem>();
                    var clonedCompositeStyle = componentStyle.CloneDeep() as CompositeStyle;

                    styleArguments.StyleToEdit = clonedCompositeStyle;

                    foreach (var style in clonedCompositeStyle.Styles)
                    {
                        var item = GisEditor.StyleManager.GetStyleLayerListItem(style);
                        if (item != null)
                        {
                            clonedStyleItems.Add(item);
                        }
                    }

                    object selectedClonedObject = FindSelectedObject(styleItems.ToList(), clonedStyleItems.ToList(), selectedLayerListItem.ConcreteObject);
                    styleArguments.FillRequiredColumnNames();
                    styleArguments.SelectedConcreteObject = selectedClonedObject;
                    var styleBuilder = GisEditor.StyleManager.GetStyleBuiderUI(styleArguments);
                    //styleBuilder.StyleBuilderArguments = styleArguments;
                    //var styleResult = GisEditor.StyleManager.EditStyle(styleArguments, selectedClonedObject);
                    if (styleBuilder.ShowDialog().GetValueOrDefault())
                    {
                        styleArguments.AppliedCallback(styleBuilder.StyleBuilderResult);
                    }
                }
            }
        }
コード例 #10
0
 /// <summary>
 /// Edits the style.
 /// </summary>
 /// <param name="styleBuilderArguments">The style builder arguments.</param>
 /// <returns></returns>
 public StyleBuilderResult EditStyle(StyleBuilderArguments styleBuilderArguments)
 {
     return(EditStyleCore(styleBuilderArguments));
 }
コード例 #11
0
        private static void AddSubMenuItemsForStyle(StyleBuilderArguments styleArguments, StyleCategories styleCategories
                                                    , string categoryName
                                                    , MenuItem rootMenuItem
                                                    , StyleItemViewModel currentStyleItemViewModel
                                                    , bool hasCompositedStyle)
        {
            if (hasCompositedStyle &&
                styleCategories != StyleCategories.None &&
                !styleCategories.HasFlag(StyleCategories.Label))
            {
                styleCategories = styleCategories | StyleCategories.Composite;
            }

            var plugins = GisEditor.StyleManager.GetStylePlugins(styleCategories);

            if (plugins.Count > 0)
            {
                var menuItems = plugins.Select(plugin =>
                {
                    if (plugin.RequireColumnNames && styleArguments.ColumnNames.Count == 0)
                    {
                        return(null);
                    }

                    MenuItem subMenuItem = new MenuItem();
                    subMenuItem.Header   = plugin.Name;
                    subMenuItem.Icon     = new Image {
                        Source = plugin.SmallIcon, Width = 16, Height = 16
                    };
                    subMenuItem.CommandParameter = new Tuple <StylePlugin, StyleCategories>(plugin, styleCategories);
                    subMenuItem.Command          = new RelayCommand <Tuple <StylePlugin, StyleCategories> >(commandParameter =>
                    {
                        StylePlugin tmpStylePlugin = commandParameter.Item1;
                        Styles.Style style         = tmpStylePlugin.GetDefaultStyle();
                        style.Name = tmpStylePlugin.Name;

                        StyleLayerListItem styleItem = GisEditor.StyleManager.GetStyleLayerListItem(style);
                        if (styleItem != null)
                        {
                            currentStyleItemViewModel.StyleItem.Children.Insert(0, styleItem);
                            currentStyleItemViewModel.StyleItem.UpdateConcreteObject();
                            var styleItemUI = currentStyleItemViewModel.StyleItem.GetUI(GetDuplicateStyleArguments(styleCategories, styleArguments));
                            if (styleItemUI != null)
                            {
                                currentStyleItemViewModel.StyleItem.UpdateUI(styleItemUI);
                            }

                            var addedStyleItemViewModel = currentStyleItemViewModel.StyleItemViewModels.FirstOrDefault(vm => vm.StyleItem == styleItem);
                            if (addedStyleItemViewModel != null)
                            {
                                if (commandParameter.Item2 == StyleCategories.Label)
                                {
                                    addedStyleItemViewModel.IsSelected = true;
                                }
                                else
                                {
                                    StyleItemViewModel rootStyleItemViewModel = GetRootViewModel(currentStyleItemViewModel);

                                    tmpStyleCategories    = commandParameter.Item2;
                                    var tmpStyleArguments = rootStyleItemViewModel.StyleBuilder.StyleArguments;
                                    rootStyleItemViewModel.StyleBuilder.PropertyChanged -= StyleBuilder_PropertyChanged;
                                    rootStyleItemViewModel.StyleBuilder.PropertyChanged += StyleBuilder_PropertyChanged;

                                    addedStyleItemViewModel.IsSelected = true;

                                    rootStyleItemViewModel.StyleBuilder.PropertyChanged -= StyleBuilder_PropertyChanged;
                                    rootStyleItemViewModel.StyleBuilder.StyleArguments   = tmpStyleArguments;
                                }
                            }
                        }
                    });
                    return(subMenuItem);
                }).Where(i => i != null).ToArray();

                foreach (var item in menuItems)
                {
                    rootMenuItem.Items.Add(item);
                }
            }
        }
コード例 #12
0
        public static bool AddStyleToLayerWithStyleWizard(IEnumerable <Layer> layers, bool replaceStyle = false)
        {
            bool addedStyle = false;
            var  newLayers  = layers.ToArray();

            foreach (var tmpLayer in newLayers)
            {
                var shapeFileFeatureLayer = tmpLayer as FeatureLayer;
                if (shapeFileFeatureLayer != null &&
                    newLayers.Length == 1)
                {
                    var styleWizardWindow = GisEditor.ControlManager.GetUI <StyleWizardWindow>();
                    styleWizardWindow.StyleCategories = LayerListHelper.GetStyleCategoriesByFeatureLayer(shapeFileFeatureLayer);
                    styleWizardWindow.StyleCategories = styleWizardWindow.StyleCategories ^ StyleCategories.Composite;
                    styleWizardWindow.StyleCategories = styleWizardWindow.StyleCategories ^ StyleCategories.Label;
                    if ((styleWizardWindow as System.Windows.Window).ShowDialog().GetValueOrDefault())
                    {
                        if (styleWizardWindow.StyleWizardResult != null)
                        {
                            if (GisEditor.ActiveMap != null)
                            {
                                GisEditor.ActiveMap.ActiveLayer = shapeFileFeatureLayer;
                            }

                            StyleBuilderArguments arguments = new StyleBuilderArguments();
                            arguments.FeatureLayer             = shapeFileFeatureLayer;
                            arguments.AvailableStyleCategories = LayerListHelper.GetStyleCategoriesByFeatureLayer(shapeFileFeatureLayer);
                            StylePlugin styleProvider = styleWizardWindow.StyleWizardResult.StylePlugin;

                            arguments.AppliedCallback = new Action <StyleBuilderResult>(args =>
                            {
                                if (args.CompositeStyle != null)
                                {
                                    if (replaceStyle)
                                    {
                                        foreach (var customZoomLevel in shapeFileFeatureLayer.ZoomLevelSet.CustomZoomLevels)
                                        {
                                            customZoomLevel.CustomStyles.Clear();
                                        }
                                    }
                                    AddNewStyleToLayer(shapeFileFeatureLayer, args.CompositeStyle, args.FromZoomLevelIndex, args.ToZoomLevelIndex);
                                }
                            });

                            var newStyle = styleProvider.GetDefaultStyle();
                            newStyle.Name = styleProvider.Name;
                            CompositeStyle componentStyle = new CompositeStyle();
                            componentStyle.Name = shapeFileFeatureLayer.Name;
                            componentStyle.Styles.Add(newStyle);
                            arguments.StyleToEdit = componentStyle;

                            arguments.FillRequiredColumnNames();
                            var styleResult = GisEditor.StyleManager.EditStyle(arguments);
                            if (!styleResult.Canceled)
                            {
                                componentStyle = (CompositeStyle)styleResult.CompositeStyle;
                                arguments.AppliedCallback(styleResult);
                                addedStyle = true;
                            }
                        }
                    }
                    //if (GisEditor.StyleManager.UseWizard != styleWizardWindow.IsAlwaysShowWhenLayerIsAdded)
                    //{
                    //    GisEditor.StyleManager.UseWizard = styleWizardWindow.IsAlwaysShowWhenLayerIsAdded;
                    //    GisEditor.InfrastructureManager.SaveSettings(GisEditor.StyleManager);
                    //}
                }
            }
            return(addedStyle);
        }
コード例 #13
0
        private static void AddStyle(StylePlugin styleProvider)
        {
            Style style = null;
            StyleBuilderArguments arguments           = new StyleBuilderArguments();
            FeatureLayer          currentFeatureLayer = null;

            if (GisEditor.LayerListManager.SelectedLayerListItem == null)
            {
                return;
            }

            //add a new style by right-clicking on a layer node
            if (GisEditor.LayerListManager.SelectedLayerListItem.ConcreteObject is FeatureLayer)
            {
                currentFeatureLayer = (FeatureLayer)GisEditor.LayerListManager.SelectedLayerListItem.ConcreteObject;
            }

            //add a new style by right-clicking on a zoomlevel node
            else if (GisEditor.LayerListManager.SelectedLayerListItem.ConcreteObject is ZoomLevel)
            {
                ZoomLevel editingZoomLevel = (ZoomLevel)GisEditor.LayerListManager.SelectedLayerListItem.ConcreteObject;
                arguments.FromZoomLevelIndex = GisEditor.ActiveMap.GetSnappedZoomLevelIndex(editingZoomLevel.Scale, false) + 1;
                arguments.ToZoomLevelIndex   = (int)editingZoomLevel.ApplyUntilZoomLevel;
                currentFeatureLayer          = (FeatureLayer)GisEditor.LayerListManager.SelectedLayerListItem.Parent.ConcreteObject;
            }

            //replace an existing style
            else if (GisEditor.LayerListManager.SelectedLayerListItem.ConcreteObject is Style)
            {
                Style currentStyle = (Style)GisEditor.LayerListManager.SelectedLayerListItem.ConcreteObject;
                currentFeatureLayer = LayerListHelper.FindMapElementInTree <FeatureLayer>(GisEditor.LayerListManager.SelectedLayerListItem);
            }

            arguments.AvailableStyleCategories = LayerListHelper.GetStyleCategoriesByFeatureLayer(currentFeatureLayer);
            arguments.FeatureLayer             = currentFeatureLayer;
            arguments.FillRequiredColumnNames();
            arguments.AppliedCallback = args =>
            {
                if (args.CompositeStyle != null)
                {
                    ZoomLevelHelper.ApplyStyle(args.CompositeStyle, currentFeatureLayer, args.FromZoomLevelIndex, args.ToZoomLevelIndex);
                }
            };

            style      = styleProvider.GetDefaultStyle();
            style.Name = styleProvider.Name;
            var componentStyle = new CompositeStyle(style)
            {
                Name = currentFeatureLayer.Name
            };

            arguments.StyleToEdit = componentStyle;
            //var styleResults = GisEditor.StyleManager.EditStyle(arguments);
            if (currentFeatureLayer != null)
            {
                var featureLayerPlugin = GisEditor.LayerManager.GetLayerPlugins(currentFeatureLayer.GetType()).FirstOrDefault() as FeatureLayerPlugin;
                if (featureLayerPlugin != null)
                {
                    var styleBuilder = GisEditor.StyleManager.GetStyleBuiderUI();
                    if (styleBuilder != null)
                    {
                        styleBuilder.StyleBuilderArguments = arguments;
                        if (styleBuilder.ShowDialog().GetValueOrDefault())
                        {
                            arguments.AppliedCallback(styleBuilder.StyleBuilderResult);
                        }
                    }
                }
            }
        }
コード例 #14
0
 /// <summary>
 /// Gets the UI core.
 /// </summary>
 /// <param name="styleArguments">The style arguments.</param>
 /// <returns>The style user control</returns>
 protected virtual StyleUserControl GetUICore(StyleBuilderArguments styleArguments)
 {
     return(null);
 }
コード例 #15
0
 /// <summary>
 /// Initializes a new instance of the <see cref="StyleBuilderWindow" /> class.
 /// </summary>
 /// <param name="styleBuilderArguments">The style builder arguments.</param>
 public MultiStyleBuilderWindow(StyleBuilderArguments styleBuilderArguments)
     : this(new StyleBuilderArguments[] { styleBuilderArguments })
 {
 }
コード例 #16
0
 public StyleBuilderWindow GetStyleBuiderUI(StyleBuilderArguments arguments)
 {
     return(GetStyleBuiderUICore(arguments));
 }
コード例 #17
0
        internal static MenuItem GetAddStyleMenuItem(StyleBuilderArguments styleArguments, StyleItemViewModel currentStyleItemViewModel)
        {
            var menuItem = new MenuItem();

            menuItem.Header = GisEditor.LanguageManager.GetStringResource("StyleBuilderWindowAddStyleLabel");
            menuItem.Icon   = new Image
            {
                Source = new BitmapImage(new Uri("/GisEditorInfrastructure;component/Images/addStyle.png", UriKind.Relative)),
                Width  = 16,
                Height = 16
            };

            var styleCategoryPairs = Enum.GetValues(typeof(StyleCategories)).Cast <StyleCategories>()
                                     .Where(c => c != StyleCategories.None)
                                     .Select(c => new { StyleCategory = c, Name = c + " Style" });

            var currentStyleCategory = currentStyleItemViewModel.StyleItem.GetRestrictStyleCategories();

            if (currentStyleCategory == StyleCategories.None)
            {
                currentStyleCategory = styleArguments.AvailableStyleCategories;
            }

            var hasCompositedStyle   = currentStyleCategory.HasFlag(StyleCategories.Composite);
            var styleCategoriesToAdd = styleCategoryPairs.Where(s => s.StyleCategory != StyleCategories.Composite)
                                       .Where(item => currentStyleCategory.HasFlag(item.StyleCategory)).ToArray();

            if (styleCategoriesToAdd.Length > 2)
            {
                foreach (var item in styleCategoriesToAdd)
                {
                    if (item.StyleCategory == StyleCategories.Point || item.StyleCategory == StyleCategories.Line || item.StyleCategory == StyleCategories.Area)
                    {
                        MenuItem groupMenuItem = new MenuItem();
                        groupMenuItem.Header = item.StyleCategory.ToString();
                        AddSubMenuItemsForStyle(styleArguments, item.StyleCategory, item.Name, groupMenuItem, currentStyleItemViewModel, hasCompositedStyle);
                        menuItem.Items.Add(groupMenuItem);
                    }
                    else
                    {
                        AddSubMenuItemsForStyle(styleArguments, item.StyleCategory, item.Name, menuItem, currentStyleItemViewModel, hasCompositedStyle);
                    }
                    menuItem.Items.Add(new Separator());
                }

                var styleCatagories = styleCategoriesToAdd.Select(s => s.StyleCategory).ToList();
                if (styleCatagories.Contains(StyleCategories.Point) && styleCatagories.Contains(StyleCategories.Line) && styleCatagories.Contains(StyleCategories.Area))
                {
                    string   shareStyleText = "Share Styles";
                    MenuItem groupMenuItem  = new MenuItem();
                    groupMenuItem.Header = shareStyleText;
                    AddSubMenuItemsForStyle(styleArguments, StyleCategories.Composite, shareStyleText, groupMenuItem, currentStyleItemViewModel, true);
                    menuItem.Items.Add(groupMenuItem);
                    menuItem.Items.Add(new Separator());
                }
            }
            else
            {
                foreach (var item in styleCategoriesToAdd)
                {
                    AddSubMenuItemsForStyle(styleArguments, item.StyleCategory, item.Name, menuItem, currentStyleItemViewModel, hasCompositedStyle);
                    menuItem.Items.Add(new Separator());
                }
            }
            if (menuItem.Items.Count > 0)
            {
                menuItem.Items.RemoveAt(menuItem.Items.Count - 1);
            }

            return(menuItem);
        }