Пример #1
0
        internal void CreateRadialMenuForPreview(Point pt, uint bubbleId)
        {
            if (radialMenu != null)
                return;

            ModifierKeys keys = Keyboard.Modifiers;
            if (keys.HasFlag(ModifierKeys.Control))
                return;

            lastHoveredBubbleId = bubbleId;

            double startAngle = 90;
            Point worldCoords = pt;
            NodePart part = NodePart.NorthEast;
            worldCoords.Offset(-Configurations.CenterOffsetX, Configurations.CenterOffsetY);

            Dictionary<int, string> menuItems = new Dictionary<int, string>();
            Dictionary<int, string> overloadedItems = new Dictionary<int, string>();

            IInfoBubble infoBubble = null;
            this.graphController.GetInfoBubble(bubbleId, out infoBubble);
            if (infoBubble != null)
            {
                States nodeState;
                graphController.GetNodeState(infoBubble.OwnerId, out nodeState);
                bool textualPreviewFlag = nodeState.HasFlag(States.TextualPreview);
                bool geometryPreviewFlag = nodeState.HasFlag(States.GeometryPreview);
                if (textualPreviewFlag == false && geometryPreviewFlag == false)
                {
                    textualPreviewFlag = true;
                    geometryPreviewFlag = true;
                }

                if (textualPreviewFlag)
                    menuItems.Add(Configurations.GeometricOutput, "Geometric Preview");
                if (geometryPreviewFlag)
                    menuItems.Add(Configurations.TextualOutput, "Textual Preview");
                if (nodeState.HasFlag(States.PreviewHidden))
                    menuItems.Add(Configurations.HidePreview, "Show Preview");
                else
                    menuItems.Add(Configurations.HidePreview, "Hide Preview");
            }

            if (this.lastHoveredNodePart != part || this.lastHoveredNodeId != int.MaxValue)
            {
                this.graphController.DoCreateRadialMenu(part, bubbleId);
                lastHoveredNodePart = part;
                lastHoveredNodeId = uint.MaxValue;
                selectedMenuId = int.MinValue;
            }

            if (menuItems != null && menuItems.Count > 0)
            {
                radialMenu = new RadialMenu(bubbleId, worldCoords, Configurations.CircleRadius, menuItems, startAngle, part);
                this.children.Add(radialMenu.GetRadialVisual());
                ScrollToMenuVisual(radialMenu.GetRadialVisual(), radialMenu.GetMenuWidth());

                if (Application.Current != null && (Application.Current.MainWindow != null))
                {
                    if (Application.Current.MainWindow.IsFocused == false)
                    {
                        Application.Current.MainWindow.Activate();
                        Application.Current.MainWindow.Topmost = true;
                        Application.Current.MainWindow.Topmost = false;
                        Application.Current.MainWindow.Focus();
                    }
                }
                Keyboard.Focus(this.graphCanvas.graphCanvas);
            }
        }
Пример #2
0
 private void RemoveSubRadialMenu()
 {
     if (subRadialMenu != null)
     {
         children.Remove(subRadialMenu.GetRadialVisual());
         subRadialMenu = null;
         graphController.DoCreateRadialMenu(lastHoveredNodePart, lastHoveredNodeId);
     }
 }
Пример #3
0
 private void CreateSubRadialMenu(Point subRadialMenuOffset)
 {
     if (radialMenu != null)
     {
         Point worldCoords = radialMenu.GetWorldCoords();
         double startAngle = radialMenu.GetStartAngle();
         startAngle = (startAngle / Math.PI) * 180;
         worldCoords.Offset(subRadialMenuOffset.X, subRadialMenuOffset.Y + Configurations.CircleRadius / 2);
         Dictionary<int, string> menuItems = new Dictionary<int, string>();
         Dictionary<int, string> overloadedItems = new Dictionary<int, string>();
         graphController.DoCreateSubRadialMenu(selectedMenuId);
         this.graphController.GetMenuItems(out menuItems, out overloadedItems);
         if (overloadedItems.Count > 0)
         {
             subRadialMenu = new RadialMenu(lastHoveredNodeId, worldCoords, Configurations.CircleRadius, overloadedItems, startAngle, lastHoveredNodePart);
             this.children.Add(subRadialMenu.GetRadialVisual());
             radialMenu.Fade();
         }
     }
     return;
 }
Пример #4
0
        private void CreateRadialMenuForSelectionBox()
        {
            double startAngle = 90;
            Point worldCoords = this.graphController.GetNorthEastPositionOfSelectionBox();
            NodePart part = NodePart.NorthEast;
            worldCoords.Offset(-Configurations.CenterOffsetX, Configurations.CenterOffsetY);

            Dictionary<int, string> menuItems = new Dictionary<int, string>();
            Dictionary<int, string> overloadedItems = new Dictionary<int, string>();

            if (this.lastHoveredNodePart != part || this.lastHoveredNodeId != int.MaxValue)
            {
                this.graphController.DoCreateRadialMenu(part, uint.MaxValue);
                lastHoveredNodePart = part;
                lastHoveredNodeId = uint.MaxValue;
                selectedMenuId = int.MinValue;
            }

            this.graphController.GetMenuItems(out menuItems, out overloadedItems);
            if (menuItems != null && menuItems.Count > 0)
            {
                radialMenu = new RadialMenu(uint.MaxValue, worldCoords, Configurations.CircleRadius, menuItems, startAngle, part);
                this.children.Add(radialMenu.GetRadialVisual());
                ScrollToMenuVisual(radialMenu.GetRadialVisual(), radialMenu.GetMenuWidth());

                if (Application.Current != null && (Application.Current.MainWindow != null))
                {
                    if (Application.Current.MainWindow.IsFocused == false)
                    {
                        Application.Current.MainWindow.Activate();
                        Application.Current.MainWindow.Topmost = true;
                        Application.Current.MainWindow.Topmost = false;
                        Application.Current.MainWindow.Focus();
                    }
                }
                Keyboard.Focus(this.graphCanvas.graphCanvas);
            }
        }
Пример #5
0
        private void CreateRadialMenu(uint nodeId, NodePart part, Point subRadialMenuOffset)
        {
            ModifierKeys keys = Keyboard.Modifiers;
            if (keys.HasFlag(ModifierKeys.Control))
                return;
            Rect result;
            NodeType type;
            double startAngle;
            Point worldCoords;

            if (this.Controller.GetNodePartRegion(nodeId, NodePart.None, mouseDownPosition, out result, out type) == false)
                return;
            worldCoords = result.Location;

            switch (part)
            {
                case NodePart.NorthEast:
                    startAngle = 90;
                    worldCoords.X += result.Width;
                    worldCoords.Offset(-Configurations.CenterOffsetX, Configurations.CenterOffsetY);
                    break;
                case NodePart.North:
                    startAngle = 180;
                    this.Controller.GetNodePartRegion(nodeId, NodePart.North, mouseDownPosition, out result, out type);
                    worldCoords.X += result.Width;
                    worldCoords.Offset(Configurations.CenterOffsetX, Configurations.CenterOffsetY);
                    break;
                case NodePart.NorthWest:
                    startAngle = 180;
                    worldCoords.Offset(Configurations.CenterOffsetX, Configurations.CenterOffsetY);
                    break;
                case NodePart.South:
                    startAngle = 270;
                    this.Controller.GetNodePartRegion(nodeId, NodePart.South, mouseDownPosition, out result, out type);
                    worldCoords.X += result.Width;
                    worldCoords.Y += result.Height;
                    worldCoords.Offset(Configurations.CenterOffsetX, -Configurations.CenterOffsetY);
                    break;
                default:
                    startAngle = 90;
                    worldCoords.X += result.Width;
                    worldCoords.Offset(-Configurations.CenterOffsetX, Configurations.CenterOffsetY);
                    break;
            }

            Dictionary<int, string> menuItems = null;
            Dictionary<int, string> overloadedItems = null;
            if (this.lastHoveredNodePart != part || this.lastHoveredNodeId != nodeId)
            {
                this.graphController.DoCreateRadialMenu(part, nodeId);
                lastHoveredNodePart = part;
                lastHoveredNodeId = nodeId;
                selectedMenuId = int.MinValue;
            }
            this.graphController.GetMenuItems(out menuItems, out overloadedItems);
            if (null != menuItems && (menuItems.Count > 0))
            {
                radialMenu = new RadialMenu(nodeId, worldCoords, Configurations.CircleRadius, menuItems, startAngle, part);
                this.children.Add(radialMenu.GetRadialVisual());
                ScrollToMenuVisual(radialMenu.GetRadialVisual(), radialMenu.GetMenuWidth());

                if (Application.Current != null && (Application.Current.MainWindow != null))
                {
                    if (Application.Current.MainWindow.IsFocused == false)
                    {
                        Application.Current.MainWindow.Activate();
                        Application.Current.MainWindow.Topmost = true;
                        Application.Current.MainWindow.Topmost = false;
                        Application.Current.MainWindow.Focus();
                    }
                }
                Keyboard.Focus(this.graphCanvas.graphCanvas);
            }
        }
Пример #6
0
        internal void RemoveRadialMenu()
        {
            if (radialMenu != null)
            {
                children.Remove(radialMenu.GetRadialVisual());
                radialMenu = null;

                lastHoveredBubbleId = uint.MaxValue;
                //lastHoveredNodeId = uint.MaxValue;
            }
        }