Exemplo n.º 1
0
        /// <summary>
        /// Method starts drop if possible
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void _TryToDrop(DragEventArgs e)
        {
            DragAndDropHelper dragAndDropHelper = new DragAndDropHelper();

            Point  mousePoint    = e.GetPosition(ganttControl);
            object hoveredObject = ganttControl.HitTest(mousePoint); // Get object under mouse cursor.
            Object dropTarget    = _GetTargetData(hoveredObject);    // Get Tag from hovered object.

            if (dropTarget == null)                                  // If target drop object is "null" - do nothing.
            {
                return;
            }

            // Get collection of dragging orders.
            ICollection <Order> draggingOrders = dragAndDropHelper.GetDraggingOrders(e.Data);

            // If user try to change single stop position - define additional parameters.
            if ((1 == draggingOrders.Count) && (dropTarget is Route) && (hoveredObject is IGanttItemElement) && ((Route)dropTarget).Stops.Count > 0)
            {
                IGanttItem parentItem = null;
                int        index      = 0;
                parentItem = ((IGanttItemElement)hoveredObject).ParentGanttItem;
                index      = parentItem.GanttItemElements.IndexOf((IGanttItemElement)hoveredObject);

                Debug.Assert(index + 1 < parentItem.GanttItemElements.Count);
                if (parentItem.GanttItemElements[index + 1].Tag is Stop)
                {
                    dropTarget = (Stop)parentItem.GanttItemElements[index + 1].Tag;
                }
            }

            // Do Drop.
            dragAndDropHelper.Drop(dropTarget, e.Data);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Returns collection of rectangles which should be highlighted.
        /// </summary>
        /// <param name="context">Drawing context.</param>
        /// <returns>Collection of rectangles.</returns>
        private Collection <Rect> _GetHighlightedRects(GanttItemElementDrawingContext context)
        {
            DragAndDropHelper helper = new DragAndDropHelper();

            // Define collection of dragged orders.
            Collection <Order> orders = helper.GetDraggingOrders(context.DraggedData);

            // If more than one order is dragged - we don't need to highlight anything. Just return.
            if (orders.Count > 1)
            {
                return(null);
            }

            // Define default values for dates.
            DateTime startTime = DateTime.MinValue;
            DateTime endTime   = DateTime.MaxValue;

            // Create result collection.
            Collection <Rect> rectResults = new Collection <Rect>();

            Order order = orders[0];

            Debug.Assert(order != null);

            // If both indows are wideopen - define wideopen time span - from MinDate to MaxDate.
            if (order.TimeWindow.IsWideOpen && order.TimeWindow2.IsWideOpen)
            {
                rectResults.Add(new Rect(context.DrawingArea.X, context.DrawingArea.Top, context.DrawingArea.Width, context.DrawingArea.Height + ANTI_ALIASING_GAP));
            }

            // If first time window is not wideopen - define first time span.
            if (!order.TimeWindow.IsWideOpen)
            {
                startTime = new DateTime(order.TimeWindow.EffectiveFrom.Ticks);
                endTime   = new DateTime(order.TimeWindow.EffectiveTo.Ticks);

                rectResults.Add(_GetRect(startTime, endTime, context));
            }

            // If second time window is not wideopen - define second time span.
            if (!order.TimeWindow2.IsWideOpen)
            {
                startTime = new DateTime(order.TimeWindow2.EffectiveFrom.Ticks);
                endTime   = new DateTime(order.TimeWindow2.EffectiveTo.Ticks);

                rectResults.Add(_GetRect(startTime, endTime, context));
            }

            return(rectResults);
        }