Exemplo n.º 1
0
        private bool IsBounded(IEnumerable <object> items)
        {
            var oneItem = new object[1];

            foreach (IPickingAdapter pickingAdapter in AdaptedControl.AsAll <IPickingAdapter>())
            {
                foreach (object item in items)
                {
                    oneItem[0] = item;
                    Rectangle adapterBounds = pickingAdapter.GetBounds(oneItem);
                    if (!adapterBounds.IsEmpty)
                    {
                        return(true);
                    }
                }
            }

            foreach (IPickingAdapter2 pickingAdapter in AdaptedControl.AsAll <IPickingAdapter2>())
            {
                foreach (object item in items)
                {
                    oneItem[0] = item;
                    Rectangle adapterBounds = pickingAdapter.GetBounds(oneItem);
                    if (!adapterBounds.IsEmpty)
                    {
                        return(true);
                    }
                }
            }

            return(false);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Performs custom actions on adaptable control MouseUp events; base method should
        /// be called first</summary>
        /// <param name="sender">Adaptable control</param>
        /// <param name="e">Mouse event args</param>
        protected override void OnMouseUp(object sender, MouseEventArgs e)
        {
            base.OnMouseUp(sender, e);

            if (e.Button == MouseButtons.Left)
            {
                if (m_draggingAnnotations != null)
                {
                    if (m_initiated)
                    {
                        ITransactionContext transactionContext = AdaptedControl.ContextAs <ITransactionContext>();
                        transactionContext.DoTransaction(
                            delegate
                        {
                            foreach (IItemDragAdapter itemDragAdapter in AdaptedControl.AsAll <IItemDragAdapter>())
                            {
                                itemDragAdapter.EndDrag();
                            }
                        }, "Drag Items".Localize());

                        m_initiated = false;
                    }
                }

                if (m_autoTranslateAdapter != null)
                {
                    m_autoTranslateAdapter.Enabled = false;
                }
            }
        }
Exemplo n.º 3
0
        private void control_MouseUp(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Right && ((Control.ModifierKeys & Keys.Alt) == 0))
            {
                Point  p      = new Point(e.X, e.Y);
                object target = null;

                foreach (IPickingAdapter pickingAdapter in AdaptedControl.AsAll <IPickingAdapter>())
                {
                    DiagramHitRecord hitRecord = pickingAdapter.Pick(p);
                    if (hitRecord.Item != null)
                    {
                        target = hitRecord.Item;
                        break;
                    }
                }

                // iter over IPickingAdapter
                if (target == null)
                {
                    foreach (IPickingAdapter2 pickingAdapter in AdaptedControl.AsAll <IPickingAdapter2>())
                    {
                        DiagramHitRecord hitRecord = pickingAdapter.Pick(p);
                        if (hitRecord.Item != null)
                        {
                            target = hitRecord.Item;
                            break;
                        }
                    }
                }

                object context = AdaptedControl.Context;
                TriggeringLocation = p;
                var commands = new List <object>(m_providers.GetCommands(context, target));

                OnContextMenuOpening(commands);


                Point screenP = AdaptedControl.PointToScreen(p);
                m_commandService.RunContextMenu(commands, screenP);
            }
        }
Exemplo n.º 4
0
        private void control_MouseMove(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.None &&
                AdaptedControl.Focused)
            {
                object           pickedItem = null;
                object           pickedPart = null;
                DiagramHitRecord hitRecord  = null;
                foreach (IPickingAdapter pickingAdapter in AdaptedControl.AsAll <IPickingAdapter>())
                {
                    hitRecord = pickingAdapter.Pick(new Point(e.X, e.Y));
                    if (hitRecord.Item != null)
                    {
                        pickedItem = hitRecord.Item;
                        pickedPart = hitRecord.Part;
                        break;
                    }
                }

                if (pickedItem == null)
                {
                    foreach (IPickingAdapter2 pickingAdapter in AdaptedControl.AsAll <IPickingAdapter2>())
                    {
                        hitRecord = pickingAdapter.Pick(new Point(e.X, e.Y));
                        if (hitRecord.Item != null)
                        {
                            pickedItem = hitRecord.Item;
                            pickedPart = hitRecord.Part;
                            break;
                        }
                    }
                }

                if (hitRecord.Item != m_hoverItem || hitRecord.Part != m_hoverPart ||
                    hitRecord.SubItem != m_hoverSubItem || hitRecord.SubPart != m_hoverSubPart)
                {
                    StartHover(hitRecord);
                }
            }
        }
        /// <summary>
        /// Performs custom actions when performing a mouse dragging operation</summary>
        /// <param name="e">Mouse move event args</param>
        protected override void OnDragging(MouseEventArgs e)
        {
            if (m_layoutContext != null &&
                !m_isDragging)
            {
                ResetHotNode();

                if (e.Button == MouseButtons.Left &&
                    ((Control.ModifierKeys & Keys.Alt) == 0) &&
                    !AdaptedControl.Capture)
                {
                    {
                        m_firstPoint = GdiUtil.InverseTransform(m_transformAdapter.Transform, FirstPoint);
                        m_mousePick  = m_graphAdapter.Pick(FirstPoint);
                        if (m_mousePick.Node != null)
                        {
                            m_initiated = true;

                            foreach (IItemDragAdapter itemDragAdapter in AdaptedControl.AsAll <IItemDragAdapter>())
                            {
                                itemDragAdapter.BeginDrag(this);
                            }

                            AdaptedControl.Capture = true;

                            if (m_autoTranslateAdapter != null)
                            {
                                m_autoTranslateAdapter.Enabled = true;
                            }
                        }
                    }
                }
            }

            if (m_draggingNodes != null)
            {
                AdaptedControl.Invalidate();
            }
        }
Exemplo n.º 6
0
        /// <summary>
        /// Computes a rectangle bounding a collection of objects</summary>
        /// <param name="items">Enumeration of objects to find bounds for</param>
        /// <returns>Rectangle bounding a collection of objects</returns>
        protected Rectangle GetBounds(IEnumerable <object> items)
        {
            Rectangle bounds = new Rectangle();

            foreach (IPickingAdapter pickingAdapter in AdaptedControl.AsAll <IPickingAdapter>())
            {
                Rectangle adapterBounds = pickingAdapter.GetBounds(items);
                if (!adapterBounds.IsEmpty)
                {
                    bounds = bounds.IsEmpty ? adapterBounds : Rectangle.Union(bounds, adapterBounds);
                }
            }

            foreach (IPickingAdapter2 pickingAdapter in AdaptedControl.AsAll <IPickingAdapter2>())
            {
                Rectangle adapterBounds = pickingAdapter.GetBounds(items);
                if (!adapterBounds.IsEmpty)
                {
                    bounds = bounds.IsEmpty ? adapterBounds : Rectangle.Union(bounds, adapterBounds);
                }
            }
            return(bounds);
        }
Exemplo n.º 7
0
        /// <summary>
        /// Performs custom actions when ending a mouse dragging operation</summary>
        /// <param name="e">Mouse event args</param>
        protected override void OnEndDrag(MouseEventArgs e)
        {
            base.OnEndDrag(e);
            if (m_draggingNodes != null && m_draggingNodes.Length > 0)
            {
                foreach (var draggingNode in m_draggingNodes)
                {
                    ResetCustomStyle(draggingNode);
                }

                foreach (IItemDragAdapter itemDragAdapter in AdaptedControl.AsAll <IItemDragAdapter>())
                {
                    itemDragAdapter.EndingDrag(); //call ourselves, too
                }
                var transactionContext = AdaptedControl.ContextAs <ITransactionContext>();
                transactionContext.DoTransaction(delegate
                {
                    foreach (IItemDragAdapter itemDragAdapter in AdaptedControl.AsAll <IItemDragAdapter>())
                    {
                        itemDragAdapter.EndDrag();         //call ourselves, too
                    }
                }, "Drag Items".Localize());

                if (m_autoTranslateAdapter != null)
                {
                    m_autoTranslateAdapter.Enabled = false;
                }
                AdaptedControl.Invalidate();
            }
            m_draggingNodes = null;
            m_newPositions  = null;
            m_oldPositions  = null;
            ResetCustomStyle(m_targetItem);
            m_targetItem          = null;
            m_resizing            = false;
            AdaptedControl.Cursor = Cursors.Default;
        }
Exemplo n.º 8
0
        /// <summary>
        /// Performs custom actions when performing a mouse dragging operation</summary>
        /// <param name="e">Mouse event args</param>
        protected override void OnDragging(MouseEventArgs e)
        {
            if (m_layoutContext != null &&
                m_draggingAnnotations == null)
            {
                if (e.Button == MouseButtons.Left &&
                    ((Control.ModifierKeys & Keys.Alt) == 0) &&
                    !AdaptedControl.Capture)
                {
                    {
                        m_mousePick = Pick(FirstPoint);
                        if (m_mousePick.Item != null)
                        {
                            m_initiated = true;

                            foreach (IItemDragAdapter itemDragAdapter in AdaptedControl.AsAll <IItemDragAdapter>())
                            {
                                itemDragAdapter.BeginDrag(this);
                            }

                            AdaptedControl.Capture = true;

                            if (m_autoTranslateAdapter != null)
                            {
                                m_autoTranslateAdapter.Enabled = true;
                            }
                        }
                    }
                }
            }

            if (m_draggingAnnotations != null)
            {
                AdaptedControl.Invalidate();
            }
        }
Exemplo n.º 9
0
        /// <summary>
        /// Raises the BeginDrag event and performs custom processing</summary>
        /// <param name="e">A MouseEventArgs that contains the event data</param>
        protected override void OnBeginDrag(MouseEventArgs e)
        {
            base.OnBeginDrag(e);
            if (m_layoutContext != null && e.Button == MouseButtons.Left &&
                ((Control.ModifierKeys & Keys.Alt) == 0) &&
                !AdaptedControl.Capture)
            {
                m_firstPoint = GdiUtil.InverseTransform(m_transformAdapter.Transform, FirstPoint);
                m_mousePick  = m_graphAdapter.Pick(FirstPoint);
                if (CanDragging())
                {
                    foreach (var itemDragAdapter in AdaptedControl.AsAll <IItemDragAdapter>())
                    {
                        if (itemDragAdapter != this)
                        {
                            itemDragAdapter.BeginDrag(this);
                        }
                    }


                    // drag all selected nodes, and any edges impinging on them
                    ActiveCollection <TNode> draggingNodes = new ActiveCollection <TNode>();
                    HashSet <TNode>          nodes         = new HashSet <TNode>();

                    foreach (var node in m_selectionContext.GetSelection <TNode>())
                    {
                        if (AllowDragging(node))
                        {
                            AddDragNode(node, draggingNodes, nodes);
                        }
                    }

                    m_draggingNodes = draggingNodes.GetSnapshot <TNode>();

                    if ((m_draggingNodes.Length == 1) && m_draggingNodes[0] == m_mousePick.Item)
                    {
                        if (m_mousePick.SubItem != null)
                        {
                            if (m_mousePick.SubItem.Is <TNode>()) // favor dragging sub item
                            {
                                m_draggingNodes[0] = m_mousePick.SubItem.Cast <TNode>();
                            }

                            if (m_mousePick.SubPart.Is <DiagramBorder>()) // sub-container resizing?
                            {
                                var borderPart = m_mousePick.SubPart.Cast <DiagramBorder>();
                                if (m_editableGraphContainer != null && m_editableGraphContainer.CanResize(m_mousePick.SubItem, borderPart))
                                {
                                    m_firstBound = m_graphAdapter.GetLocalBound(m_mousePick.SubItem.As <TNode>());
                                    m_resizing   = true;
                                    m_targetItem = m_mousePick.SubItem;
                                }
                            }
                        }
                        else if (m_mousePick.Part.Is <DiagramBorder>()) // then favor container resizing
                        {
                            var borderPart = m_mousePick.Part.Cast <DiagramBorder>();
                            if (m_editableGraphContainer != null && m_editableGraphContainer.CanResize(m_mousePick.Item, borderPart))
                            {
                                m_firstBound = m_graphAdapter.GetLocalBound(m_mousePick.Item.As <TNode>());
                                m_resizing   = true;
                                m_targetItem = m_mousePick.Item;
                            }
                        }
                    }

                    m_newPositions = new Point[m_draggingNodes.Length];
                    m_oldPositions = new Point[m_draggingNodes.Length];
                    for (int i = 0; i < m_draggingNodes.Length; i++)
                    {
                        // Initialize m_newPositions in case the mouse up event occurs before
                        //  a paint event, which can happen during rapid clicking.
                        Point currentLocation = m_draggingNodes[i].Bounds.Location;
                        m_newPositions[i] = currentLocation;
                        m_oldPositions[i] = currentLocation;
                    }

                    AdaptedControl.Capture = true;
                    if (m_autoTranslateAdapter != null)
                    {
                        m_autoTranslateAdapter.Enabled = true;
                    }
                }
            }
        }