Example #1
0
        private void StartAction(MouseEventArgs e)
        {
            switch (ActiveElementType)
            {
            case HoverType.Unknown when !e.CtrlKey && !e.ShiftKey:
                // panning starts, when you simply press the mouse down anywhere where there's nothing.
                ActionType = ActionType.Pan;
                break;

            case HoverType.Unknown when e.ShiftKey:
                ActionType           = ActionType.SelectRegion;
                select_region.Origin = new Point(e.RelativeToOrigin(this));
                select_region.Point  = new Point(e.RelativeToOrigin(this));
                break;

            case HoverType.Unknown when e.CtrlKey:
                // this isn't really a sensible thing to do. It's probably a misplaced select
                break;

            case HoverType.Border:
                // we create a new link if we simply press on the border of a node
                CreateNewLink(e);
                break;

            case HoverType.Node when !e.CtrlKey:
                StartMove();
                break;

            case HoverType.Node when e.CtrlKey:
                // this is a selection/deselection, but the action type is not yet known.
                TriggerSelectionOfNode();
                break;

            case HoverType.Anchor:
                ActionObject.Set(ActiveElement.Link, ActiveElement.Anchor);
                ActionType = ActionType.MoveAnchor;
                break;

            case HoverType.ControlPoint:
                ActionObject.Set(ActiveElement.Link, ActiveElement.ControlPoint);
                ActionType = ActionType.MoveControlPoint;
                break;

            case HoverType.Link:
                ActionObject.Set(ActiveElement.Link);
                ActiveElement.Link.Select();
                ActionType = ActionType.ModifyLink;
                break;

            case HoverType.NewNode:
                CreateNewNode();
                break;
            }
        }
Example #2
0
        private void FixNodeAnchor(MouseEventArgs e)
        {
            var(anchor, old_node, old_x, old_y) = (ActionObject.Anchor, ActionObject.Node, ActionObject.X, ActionObject.Y);
            var node = ActiveElement.Node;

            if (node == null && !ActionObject.Link.Links.AllowFreeFloatingLinks)
            {
                // free-floating links are not allowed and this action would not attach the link to a node
                return;
            }
            var(x, y) = (node != null) ? e.RelativeTo(node) : e.RelativeToOrigin(this);
            Changes.NewAndDo(new ChangeAction(() =>
            {
                anchor.Node      = node;
                anchor.RelativeX = x;
                anchor.RelativeY = y;
            }, () =>
            {
                anchor.Node      = old_node;
                anchor.RelativeX = old_x;
                anchor.RelativeY = old_y;
            }));
            Overview?.TriggerUpdate();
            ActionObject.Link.Deselect();
            ActionObject.Link.Links.OnModified?.Invoke(ActionObject.Link);
            ActionObject.Clear();
            ActionType = ActionType.None;
        }
Example #3
0
        private void UpdateSelection(MouseEventArgs e)
        {
            (select_region.Point.X, select_region.Point.Y) = e.RelativeToOrigin(this);
            select_region.TriggerStateHasChanged();
            var p1 = select_region.Point;
            var p2 = select_region.Origin;

            var(min_x, max_x) = (Math.Min(p1.X, p2.X), Math.Max(p1.X, p2.X));
            var(min_y, max_y) = (Math.Min(p1.Y, p2.Y), Math.Max(p1.Y, p2.Y));
            foreach (var node in Nodes.all_nodes)
            {
                if (min_x <= node.X && node.X <= max_x &&
                    min_y <= node.Y && node.Y <= max_y &&
                    !Group.Contains(node))
                {
                    node.Select();
                    node.TriggerStateHasChanged();
                    Group.Add(node);
                }
            }
        }