コード例 #1
0
        private void MainNodeDragOver(object sender, DragEventArgs e)
        {
            e.Handled = true;
            var dragingItemViewModel = (StyleItemViewModel)e.Data.GetData(typeof(StyleItemViewModel));
            var currentItemViewModel = ((StyleBuilderViewModel)(((Grid)sender)).DataContext);
            var dragingItem          = dragingItemViewModel.StyleItem;
            var currentItem          = currentItemViewModel.RootStyleItem.StyleItem;
            var dragingItemParent    = dragingItem.Parent;
            var currentItemParent    = currentItem.Parent;

            if (dragingItem != null && currentItem != null && dragingItem != currentItem && !IsParent(currentItem, dragingItem))
            {
                if (currentItem.CanContainStyleItem(dragingItem))
                {
                    dragingItemParent.Children.Remove(dragingItem);
                    currentItem.Children.Insert(0, dragingItem);
                    dragingItemViewModel = StyleItemViewModel.FindStyleItemViewModel(currentItemViewModel.RootStyleItem.StyleItemViewModels, dragingItem);
                }
            }

            if (dragingItemViewModel != null)
            {
                dragingItemViewModel.IsSelected = true;
            }
        }
コード例 #2
0
        /// <summary>
        /// Initializes the DB click timer.
        /// </summary>
        private void InitializeDBClickTimer()
        {
            if (rootNodeClickTimer == null)
            {
                rootNodeClickTimer          = new DispatcherTimer();
                rootNodeClickTimer.Interval = TimeSpan.FromMilliseconds(500);
                rootNodeClickTimer.Tick    += (s, args) =>
                {
                    if (rootNodeMouseDownCount > 1)
                    {
                        StyleItemViewModel renamingItemViewModel = null;
                        if (multiStyleBuilderViewModel.SelectedStyleBuilderViewModel.IsRootNodeSelected)
                        {
                            renamingItemViewModel = multiStyleBuilderViewModel.SelectedStyleBuilderViewModel.RootStyleItem;
                        }
                        else if (multiStyleBuilderViewModel.SelectedStyleBuilderViewModel.SelectedStyleItem != null)
                        {
                            renamingItemViewModel = multiStyleBuilderViewModel.SelectedStyleBuilderViewModel.SelectedStyleItem;
                        }

                        if (renamingItemViewModel != null)
                        {
                            renamingItemViewModel.IsRenaming = true;
                        }
                    }
                    rootNodeMouseDownCount = 0;
                    rootNodeClickTimer.Stop();
                };
            }
        }
コード例 #3
0
 private static StyleItemViewModel GetRootViewModel(StyleItemViewModel currentStyleItemViewModel)
 {
     if (currentStyleItemViewModel.StyleBuilder != null)
     {
         return(currentStyleItemViewModel);
     }
     else
     {
         return(GetRootViewModel(currentStyleItemViewModel.ParentViewModel));
     }
 }
コード例 #4
0
        private void InitializeStyleItems(object selectedObject)
        {
            if (selectedObject == null)
            {
                selectedObject = componentStyle.Styles.FirstOrDefault();
            }
            var actualRootStyleItem = new ComponentStyleItem(componentStyle);

            rootStyleItem = new StyleItemViewModel(actualRootStyleItem, styleArguments);
            rootStyleItem.StyleBuilder = this;
            rootStyleItem.StyleItem.ConcreteObjectUpdated += UpdatePreviewSource;
            ResetSelectedStyleItem(selectedObject);
        }
コード例 #5
0
        private void AddNewStyleItemViewModel(MapSuite.GisEditor.StyleLayerListItem tmpStyleItem, int insertIndex = -1)
        {
            var styleItemViewModel = new StyleItemViewModel(tmpStyleItem, styleArguments);

            styleItemViewModel.ParentViewModel = this;

            if (insertIndex == -1)
            {
                styleItemViewModels.Add(styleItemViewModel);
            }
            else
            {
                styleItemViewModels.Insert(insertIndex, styleItemViewModel);
            }
        }
コード例 #6
0
        private void TreeViewItemDragOver(object sender, DragEventArgs e)
        {
            e.Handled = true;
            var dragingItemViewModel = (StyleItemViewModel)e.Data.GetData(typeof(StyleItemViewModel));
            var currentItemViewModel = ((StyleItemViewModel)(((Grid)sender)).DataContext);
            var dragingItem          = dragingItemViewModel.StyleItem;
            var currentItem          = currentItemViewModel.StyleItem;
            var dragingItemParent    = dragingItem.Parent;
            var currentItemParent    = currentItem.Parent;

            if (dragingItem != null && currentItem != null && dragingItem != currentItem && !IsParent(currentItem, dragingItem))
            {
                if (currentItem.CanContainStyleItem(dragingItem))
                {
                    dragingItemParent.Children.Remove(dragingItem);
                    currentItem.Children.Insert(0, dragingItem);
                    dragingItemViewModel = StyleItemViewModel.FindStyleItemViewModel(currentItemViewModel.ParentViewModel.StyleItemViewModels, dragingItem);
                }
                else if (dragingItemParent == currentItemParent)
                {
                    var dragingIndex = dragingItemParent.Children.IndexOf(dragingItem);
                    var currentIndex = dragingItemParent.Children.IndexOf(currentItem);
                    dragingItemParent.Children.Move(dragingIndex, currentIndex);
                }
                else
                {
                    if (currentItemParent is StyleLayerListItem && ((StyleLayerListItem)currentItemParent).CanContainStyleItem(dragingItem))
                    {
                        dragingItemParent.Children.Remove(dragingItem);
                        var currentIndex = currentItemParent.Children.IndexOf(currentItem);
                        currentItemParent.Children.Insert(currentIndex, dragingItem);
                        dragingItemViewModel = StyleItemViewModel.FindStyleItemViewModel(currentItemViewModel.ParentViewModel.StyleItemViewModels, dragingItem);
                    }
                    else
                    {
                        e.Effects = DragDropEffects.None;
                    }
                }

                if (dragingItemViewModel != null)
                {
                    dragingItemViewModel.IsSelected = true;
                }
            }
        }
コード例 #7
0
        private StyleItemViewModel FindStyleItemViewModel(ObservableCollection <StyleItemViewModel> observableCollection, object selectedObject)
        {
            StyleItemViewModel result = null;

            foreach (var styleItemViewModel in observableCollection)
            {
                if (styleItemViewModel.StyleItem.ConcreteObject == selectedObject)
                {
                    result = styleItemViewModel;
                    break;
                }
                else
                {
                    result = FindStyleItemViewModel(styleItemViewModel.StyleItemViewModels, selectedObject);
                    if (result != null)
                    {
                        break;
                    }
                }
            }

            return(result);
        }
コード例 #8
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);
                }
            }
        }
コード例 #9
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);
        }
コード例 #10
0
        private void InitializeContextMenuItems()
        {
            if (styleArguments.AvailableStyleCategories != StyleCategories.None &&
                styleItem.Parent != null)
            {
                this.contextMenu = new ContextMenu();

                if (StyleItem.ConcreteObject is FilterStyle)
                {
                    this.contextMenu.Items.Add(GetMenuItem("View filtered data", ViewFilteredData, "/GisEditorPluginCore;component/Images/styles_filterarealinepoint.png"));
                }

                if (StyleItem.CanAddInnerStyle)
                {
                    var menuItem = GetAddStyleMenuItem(styleArguments, this);
                    this.contextMenu.Items.Add(menuItem);
                }

                this.contextMenu.Items.Add(GetMenuItem("Move up", MoveUpClick, GetImageUri("moveUp.png")));
                this.contextMenu.Items.Add(GetMenuItem("Move down", MoveDownClick, GetImageUri("moveDown.png")));
                this.contextMenu.Items.Add(GetMenuItem("Move to top", MoveToTopClick, GetImageUri("toTop.png")));
                this.contextMenu.Items.Add(GetMenuItem("Move to bottom", MoveToBottomClick, GetImageUri("toBottom.png")));
                if (styleItem.ConcreteObject is Styles.Style)
                {
                    this.contextMenu.Items.Add(new Separator());
                    this.contextMenu.Items.Add(GetMenuItem("Insert from Library...", InsertFromLibrary, GetImageUri("insert_from_library.png"), !styleArguments.IsSubStyleReadonly));
                    this.contextMenu.Items.Add(GetMenuItem("Replace from Library...", ReplaceFromLibrary, GetImageUri("replace_from_library.png"), !styleArguments.IsSubStyleReadonly));
                    this.contextMenu.Items.Add(new Separator());
                }
                if (StyleItem.ConcreteObject is Styles.Style)
                {
                    this.contextMenu.Items.Add(GetMenuItem("Duplicate", DuplicateClick, "/GisEditorInfrastructure;component/Images/duplicate.png", !styleArguments.IsSubStyleReadonly));
                }
                if (StyleItem.CanRename)
                {
                    this.contextMenu.Items.Add(GetMenuItem("Rename", RenameClick, GetImageUri("rename.png"), !styleArguments.IsSubStyleReadonly));
                }

                this.contextMenu.Items.Add(GetMenuItem("Remove", RemoveItemClick, GetImageUri("unload.png"), !styleArguments.IsSubStyleReadonly));
            }
            else if (styleItem is ComponentStyleItem)
            {
                this.contextMenu = new ContextMenu();

                MenuItem addStyleMenuItem = StyleItemViewModel.GetAddStyleMenuItem(styleArguments, this);
                if (addStyleMenuItem.Items.Count > 0)
                {
                    addStyleMenuItem.IsEnabled = !styleArguments.IsSubStyleReadonly;
                    this.contextMenu.Items.Add(addStyleMenuItem);
                }

                this.contextMenu.Items.Add(new Separator());
                this.contextMenu.Items.Add(GetMenuItem("Insert from Library...", InsertFromLibrary, GetImageUri("insert_from_library.png"), !styleArguments.IsSubStyleReadonly));
                this.contextMenu.Items.Add(GetMenuItem("Replace from Library...", ReplaceFromLibrary, GetImageUri("replace_from_library.png")));
                this.contextMenu.Items.Add(new Separator());

                var renameMenuItem = new MenuItem();
                renameMenuItem.Header = GisEditor.LanguageManager.GetStringResource("SytleBuilderWindowRenameLabel");
                renameMenuItem.Click += RenameClick;
                renameMenuItem.Icon   = new Image
                {
                    Source = new BitmapImage(new Uri("/GisEditorInfrastructure;component/Images/rename.png", UriKind.Relative)),
                    Width  = 16,
                    Height = 16
                };

                this.contextMenu.Items.Add(renameMenuItem);
                this.contextMenu.Items.Add(GetMenuItem("Save Style", SaveStyleClick, GetImageUri("Export.png")));
            }
        }