private void EnableSingleSelection(bool enable)
        {
            GraphEditorInputMode mode = (GraphEditorInputMode)graphControl.InputMode;

            if (enable)
            {
                // remember old recognizer so we can restore it later
                oldMultiSelectionRecognizer = mode.MultiSelectionRecognizer;

                // disable marquee selection
                mode.MarqueeSelectionInputMode.Enabled = false;
                // disable multi selection with Ctrl-Click
                mode.MultiSelectionRecognizer = EventRecognizers.Never;

                // deactivate commands that can lead to multi selection
                mode.AvailableCommands.Remove(Commands.ToggleItemSelection);
                mode.AvailableCommands.Remove(Commands.SelectAll);

                mode.NavigationInputMode.AvailableCommands.Remove(Commands.ExtendSelectionLeft);
                mode.NavigationInputMode.AvailableCommands.Remove(Commands.ExtendSelectionUp);
                mode.NavigationInputMode.AvailableCommands.Remove(Commands.ExtendSelectionDown);
                mode.NavigationInputMode.AvailableCommands.Remove(Commands.ExtendSelectionRight);

                // add custom binding for toggle item selection
                toggleBindingOverride = mode.KeyboardInputMode.AddCommandBinding(Commands.ToggleItemSelection, ToggleItemSelectionExecuted, ToggleItemSelectionCanExecute);

                //Disable selection of (possibly multiple) items
                oldPasteItems             = mode.PasteSelectableItems;
                mode.PasteSelectableItems = GraphItemTypes.None;

                //Also clear the selection - even though the setup works when more than one item is selected, it looks a bit strange
                graphControl.Selection.Clear();
            }
            else
            {
                // restore old settings
                mode.MarqueeSelectionInputMode.Enabled = true;
                mode.MultiSelectionRecognizer          = oldMultiSelectionRecognizer;
                mode.PasteSelectableItems = oldPasteItems;

                // re-activate commands
                mode.AvailableCommands.Add(Commands.ToggleItemSelection);
                mode.AvailableCommands.Add(Commands.SelectAll);

                mode.NavigationInputMode.AvailableCommands.Add(Commands.ExtendSelectionLeft);
                mode.NavigationInputMode.AvailableCommands.Add(Commands.ExtendSelectionUp);
                mode.NavigationInputMode.AvailableCommands.Add(Commands.ExtendSelectionDown);
                mode.NavigationInputMode.AvailableCommands.Add(Commands.ExtendSelectionRight);

                // remove custom binding for toggle item selection
                toggleBindingOverride.Remove();
                toggleBindingOverride = null;
            }
        }
Пример #2
0
        private void OnWindowLoaded(object sender, RoutedEventArgs e)
        {
            graphControl.Graph.NodeDefaults.Style = new ShinyPlateNodeStyle {
                Brush = Brushes.Orange
            };
            var graphEditorInputMode = new GraphEditorInputMode();

            graphControl.InputMode = graphEditorInputMode;
            oldPasteItems          = graphEditorInputMode.PasteSelectableItems;

            EnableSingleSelection(true);

            LoadGraph();
            graphControl.FitGraphBounds();
        }
        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);


            graphControl.Graph.NodeDefaults.Style = new ShinyPlateNodeStyle {
                Brush = Brushes.Orange
            };
            var graphEditorInputMode = new GraphEditorInputMode();

            graphControl.InputMode = graphEditorInputMode;
            oldPasteItems          = graphEditorInputMode.PasteSelectableItems;

            EnableSingleSelection(true);

            LoadGraph();
            graphControl.FitGraphBounds();
        }
Пример #4
0
        private void EnableSingleSelection(bool enable)
        {
            GraphEditorInputMode mode = (GraphEditorInputMode)graphControl.InputMode;

            if (enable)
            {
                // remember old recognizer so we can restore it later
                oldMultiSelectionRecognizer = mode.MultiSelectionRecognizer;

                // disable marquee selection
                mode.MarqueeSelectionInputMode.Enabled = false;
                // disable multi selection with Ctrl-Click
                mode.MultiSelectionRecognizer = EventRecognizers.Never;

                // deactivate commands that can lead to multi selection
                mode.AvailableCommands.Remove(GraphCommands.ToggleItemSelection);
                mode.AvailableCommands.Remove(ApplicationCommands.SelectAll);

                mode.NavigationInputMode.AvailableCommands.Remove(ComponentCommands.ExtendSelectionLeft);
                mode.NavigationInputMode.AvailableCommands.Remove(ComponentCommands.ExtendSelectionUp);
                mode.NavigationInputMode.AvailableCommands.Remove(ComponentCommands.ExtendSelectionDown);
                mode.NavigationInputMode.AvailableCommands.Remove(ComponentCommands.ExtendSelectionRight);

                // add dummy command bindings that do nothing in order to prevent WPF default behavior
                graphControl.CommandBindings.Add(extendSelectionLeftBinding);
                graphControl.CommandBindings.Add(extendSelectionRightBinding);
                graphControl.CommandBindings.Add(extendSelectionUpBinding);
                graphControl.CommandBindings.Add(extendSelectionDownBinding);

                // add custom binding for toggle item selection
                graphControl.CommandBindings.Add(customToggleSelectionBinding);

                //Disable selection of (possibly multiple) items
                oldPasteItems             = mode.PasteSelectableItems;
                mode.PasteSelectableItems = GraphItemTypes.None;

                //Also clear the selection - even though the setup works when more than one item is selected, it looks a bit strange
                graphControl.Selection.Clear();
            }
            else
            {
                // restore old settings
                mode.MarqueeSelectionInputMode.Enabled = true;
                mode.MultiSelectionRecognizer          = oldMultiSelectionRecognizer;
                mode.PasteSelectableItems = oldPasteItems;

                // re-activate commands
                mode.AvailableCommands.Add(GraphCommands.ToggleItemSelection);
                mode.AvailableCommands.Add(ApplicationCommands.SelectAll);

                mode.NavigationInputMode.AvailableCommands.Add(ComponentCommands.ExtendSelectionLeft);
                mode.NavigationInputMode.AvailableCommands.Add(ComponentCommands.ExtendSelectionUp);
                mode.NavigationInputMode.AvailableCommands.Add(ComponentCommands.ExtendSelectionDown);
                mode.NavigationInputMode.AvailableCommands.Add(ComponentCommands.ExtendSelectionRight);

                graphControl.CommandBindings.Remove(extendSelectionLeftBinding);
                graphControl.CommandBindings.Remove(extendSelectionRightBinding);
                graphControl.CommandBindings.Remove(extendSelectionUpBinding);
                graphControl.CommandBindings.Remove(extendSelectionDownBinding);

                // remove custom binding for toggle item selection
                graphControl.CommandBindings.Remove(customToggleSelectionBinding);
            }
        }