Beispiel #1
0
        public void TestGetSnapshotGeneric()
        {
            ActiveCollection <object> test = new ActiveCollection <object>();

            CollectionAssert.IsEmpty(test.GetSnapshot());
            test.Add("a");
            test.Add(this);
            Assert.AreEqual(test.GetSnapshot <object>(), new object[] { "a", this });
            Assert.AreEqual(test.GetSnapshot <string>(), new string[] { "a" });
        }
Beispiel #2
0
        public void TestGetSnapshot()
        {
            ActiveCollection <object> test = new ActiveCollection <object>();

            CollectionAssert.IsEmpty(test.GetSnapshot());
            test.Add("a");
            object[] snapshot = test.GetSnapshot();
            Assert.AreEqual(snapshot, new object[] { "a" });
            test.Add("b");
            snapshot = test.GetSnapshot();
            Assert.AreEqual(snapshot, new object[] { "a", "b" });
        }
Beispiel #3
0
        /// <summary>
        /// Begins dragging any selected items managed by the adapter. May be called
        /// by another adapter when it begins dragging.</summary>
        /// <param name="initiator">Control adapter that is initiating the drag</param>
        void IItemDragAdapter.BeginDrag(ControlAdapter initiator)
        {
            // drag all selected nodes, and any edges impinging on them
            var draggingNodes = new ActiveCollection <Element>();

            foreach (var node in m_selectionContext.GetSelection <Element>())
            {
                draggingNodes.Add(node);
            }

            m_draggingNodes.AddRange(draggingNodes.GetSnapshot());

            var draggingGrpPins = new ActiveCollection <GroupPin>();

            // add the selected floating pins
            foreach (var grpin in m_selectionContext.GetSelection <GroupPin>())
            {
                draggingGrpPins.Add(grpin);
            }
            m_draggingGroupPins.AddRange(draggingGrpPins.GetSnapshot());

            if (m_draggingGroupPins.Any())
            {
                m_originalPinY = new int[m_draggingGroupPins.Count];
                for (int i = 0; i < m_originalPinY.Length; i++)
                {
                    m_originalPinY[i] = m_draggingGroupPins[i].Bounds.Location.Y;
                }
            }
        }
        void IItemDragAdapter.BeginDrag(ControlAdapter initiator)
        {
            m_isDragging = true;

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

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

            // render all edges connected to the dragging nodes
            foreach (TEdge edge in m_graph.Edges)
            {
                if (nodes.Contains(edge.FromNode) ||
                    nodes.Contains(edge.ToNode))
                {
                    draggingEdges.Add(edge);

                    m_graphAdapter.SetStyle(edge, DiagramDrawingStyle.Ghosted);
                }
            }

            m_draggingNodes = draggingNodes.GetSnapshot <TNode>();
            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;
            }

            m_draggingEdges = draggingEdges.ToArray();
        }
Beispiel #5
0
        void IItemDragAdapter.BeginDrag(ControlAdapter initiator)
        {
            // drag all selected nodes, and any edges impinging on them
            ActiveCollection <TNode> draggingNodes = new ActiveCollection <TNode>();
            HashSet <TNode>          nodes         = new HashSet <TNode>();

            foreach (TNode node in m_selectionContext.GetSelection <TNode>())
            {
                AddDragNode(node, draggingNodes, nodes);
            }
            m_draggingNodes = draggingNodes.GetSnapshot <TNode>();

            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;
            }
        }
Beispiel #6
0
        /// <summary>
        /// Begins dragging any selected items managed by the adapter. May be called
        /// by another adapter when it begins dragging.</summary>
        /// <param name="initiator">Control adapter that is initiating the drag</param>
        void IItemDragAdapter.BeginDrag(ControlAdapter initiator)
        {
           
            // drag all selected nodes, and any edges impinging on them
            var draggingNodes = new ActiveCollection<Element>();
         
            foreach (var node in m_selectionContext.GetSelection<Element>())
                draggingNodes.Add(node);
                 
            m_draggingNodes.AddRange(draggingNodes.GetSnapshot());

            var draggingGrpPins= new ActiveCollection<GroupPin>();
            // add the selected floating pins
            foreach (var grpin in m_selectionContext.GetSelection<GroupPin>())         
                draggingGrpPins.Add(grpin);
            m_draggingGroupPins.AddRange(draggingGrpPins.GetSnapshot());

            if (m_draggingGroupPins.Any())
            {
                m_originalPinY = new int[m_draggingGroupPins.Count];
                for (int i = 0; i < m_originalPinY.Length; i++)
                    m_originalPinY[i] = m_draggingGroupPins[i].Bounds.Location.Y;
            }
        }
Beispiel #7
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;
                    }
                }
            }
        }
Beispiel #8
0
 public void TestGetSnapshotGeneric()
 {
     ActiveCollection<object> test = new ActiveCollection<object>();
     CollectionAssert.IsEmpty(test.GetSnapshot());
     test.Add("a");
     test.Add(this);
     Assert.AreEqual(test.GetSnapshot<object>(), new object[] { "a", this });
     Assert.AreEqual(test.GetSnapshot<string>(), new string[] { "a" });
 }
Beispiel #9
0
 public void TestGetSnapshot()
 {
     ActiveCollection<object> test = new ActiveCollection<object>();
     CollectionAssert.IsEmpty(test.GetSnapshot());
     test.Add("a");
     object[] snapshot = test.GetSnapshot();
     Assert.AreEqual(snapshot, new object[] { "a" });
     test.Add("b");
     snapshot = test.GetSnapshot();
     Assert.AreEqual(snapshot, new object[] { "a", "b" });
 }