Example #1
0
        private IEnumerator <object> DragSeparatorTask(int index)
        {
            RaiseDragStarted();
            var initialMousePosition = Input.MousePosition;
            var initialHeights       = Nodes.Select(i => i.AsWidget.Height).ToList();

            while (Input.IsMousePressed())
            {
                WidgetContext.Current.MouseCursor = MouseCursor.SizeNS;
                var dragDelta = Input.MousePosition.Y - initialMousePosition.Y;
                AdjustStretchDelta(initialHeights[index], Nodes[index].AsWidget, ref dragDelta);
                dragDelta = -dragDelta;
                AdjustStretchDelta(initialHeights[index + 1], Nodes[index + 1].AsWidget, ref dragDelta);
                dragDelta = -dragDelta;
                for (int i = 0; i < Nodes.Count; i++)
                {
                    var d = (i == index) ? dragDelta : ((i == index + 1) ? -dragDelta : 0);
                    if (i == Stretches.Count)
                    {
                        Stretches.Add(0);
                    }
                    Stretches[i] = initialHeights[i] + d;
                }
                Layout.InvalidateConstraintsAndArrangement();
                yield return(null);
            }
            RaiseDragEnded();
        }
 public void Add(TrackStretch stretch)
 {
     if (stretch == null)
     {
         throw new ArgumentNullException(nameof(stretch));
     }
     if (Stretches.Count > 0 && stretch.End.Station.Equals(Stretches.Last().Start.Station))
     {
         Stretches.Insert(0, stretch);
     }
     else
     {
         Stretches.Add(stretch);
     }
 }