Exemplo n.º 1
0
        protected override void OnPaint(PaintEventArgs pe)
        {
            int y = 0;

            if (!IsSoftRefresh)
            {
                DrawnNodes.Clear();
                foreach (var node in Nodes)
                {
                    node.Drawn  = false;
                    node.ZIndex = 0;
                }
                for (int i = 0; i < Nodes.Count(); i++)
                {
                    CalculateChildren(pe.Graphics, Nodes.ElementAt(i), 0, ref y, true);
                }
            }
            foreach (var item in DrawnNodes.OrderBy(r => r.ZIndex))
            {
                Draw(pe.Graphics, item);
            }
            if (LastClickDrag)
            {
                pe.Graphics.DrawLine(Pens.Red, new Point(0, LatchPoint.Y), new Point(this.Width, LatchPoint.Y));
            }
            IsSoftRefresh = false;
        }
Exemplo n.º 2
0
 private void MouseUpCascade(object sender, MouseEventArgs e)
 {
     if (NodesMoved.Count > 0)
     {
         DragStopped(e);
         LastClickDrag  = false;
         NodeBeingMoved = null;
         HardRefresh();
         return;
     }
     foreach (var item in DrawnNodes.OrderByDescending(r => r.ZIndex))
     {
         if (item.Contains(e.Location))
         {
             MouseUpOnElem(item, e);
             break;
         }
     }
     if (LastClickDrag)
     {
         LastClickDrag  = false;
         NodeBeingMoved = null;
         HardRefresh();
     }
 }
Exemplo n.º 3
0
        private void CalculateIndividual(Graphics g, RTreeNode node, int depth, ref int y)
        {
            y += SPACING;
            int x          = 0 + node.Depth * 8;
            var drawString = "[" + (node.Collapsed ? "+" : "-") + "]" + node.Name;

            node.Location = new Point(x, y);
            node.Size     = new Size(300, DefaultFont.Height);
            g.DrawString(drawString, DefaultFont, Brushes.Black, x, y);
            DrawnNodes.Add(node);
        }
Exemplo n.º 4
0
 private void MouseMoveCascade(object sender, MouseEventArgs e)
 {
     foreach (var item in DrawnNodes.OrderBy(r => r.ZIndex))
     {
         if (item.Contains(e.Location))
         {
             MouseMoveOnElem(item, e);
             break;
         }
     }
 }
Exemplo n.º 5
0
        private IEnumerable <RTreeNode> MoveChildren(RTreeNode topNode, Size size)
        {
            var res = new List <RTreeNode>();

            res.Add(topNode);
            topNode.ZIndex    = DrawnNodes.Max(r => r.ZIndex) + 1;
            topNode.Location += size;
            if (!topNode.Collapsed)
            {
                foreach (var node in topNode.Children.OrderBy(r => r.Left))
                {
                    res.AddRange(MoveChildren(node, size));
                }
            }
            return(res);
        }
Exemplo n.º 6
0
        RTreeNode FindNodeClosestTo(RTreeNode fromNode, Point p, out bool inside)
        {
            RTreeNode best = null;
            double    dist = 9999999;

            inside = false;
            foreach (var node in DrawnNodes.Where(r => r != fromNode && !fromNode.Children.Contains(r)))
            {
                if (node.Contains(p))
                {
                    inside = true;
                    return(node);
                }
                var ptA   = p;
                var ptB   = node.Location + new Size(0, node.Size.Height);
                var rdist = Math.Sqrt((ptA.X - ptB.X) * (ptA.X - ptB.X) + (ptA.Y - ptB.Y) * (ptA.Y - ptB.Y));
                if (rdist < dist)
                {
                    dist = rdist;
                    best = node;
                }
            }

            /*for (int i = 0; i < DrawnNodes.Count; i++)
             * {
             *  var node = DrawnNodes[i];
             *  if (node == fromNode)
             *      continue;
             *  var ptA = p;
             *  var ptB = node.Location + new Size(0, node.Size.Height);
             *  var rdist = Math.Sqrt((ptA.X-ptB.X)* (ptA.X - ptB.X)+ (ptA.Y - ptB.Y)* (ptA.Y - ptB.Y));
             *  if(rdist < dist)
             *  {
             *      dist = rdist;
             *      best = node;
             *  }
             *
             *  contPlace:
             *  continue;
             * }*/
            return(best);
        }