Ejemplo n.º 1
0
        private void Thumb_DragDelta(object sender, DragDeltaEventArgs e)
        {
            GanttChartView ganttChartView;
            ScrollViewer   scrollViewer;
            GanttChartItem dataContext = this.Thumb.DataContext as GanttChartItem;

            if (dataContext != null)
            {
                ganttChartView = dataContext.GanttChartView as GanttChartView;
                if ((ganttChartView != null) && !dataContext.HasChildren)
                {
                    this.horizontalChange = e.HorizontalChange;
                    scrollViewer          = ganttChartView.ScrollViewer;
                    if (!this.isDuringInternalScrollOperation)
                    {
                        double x          = this.originalHorizontalPosition + this.horizontalChange;
                        double itemHeight = ganttChartView.ItemHeight;
                        Point  p          = new Point(x, 0.0);
                        this.isDuringInternalScrollOperation = true;
                        base.Dispatcher.BeginInvoke((Action)(() =>
                        {
                            double previousHorizontalOffset = scrollViewer.HorizontalOffset;
                            ScrollContentPresenter visual = ganttChartView.ScrollContentPresenter;
                            if ((scrollViewer != null) && (visual != null))
                            {
                                try
                                {
                                    p = this.TransformToVisual(visual).Transform(p);
                                    if (p.X < itemHeight)
                                    {
                                        scrollViewer.ScrollToHorizontalOffset(scrollViewer.HorizontalOffset - itemHeight);
                                    }
                                    if (p.X > (scrollViewer.ViewportWidth - itemHeight))
                                    {
                                        scrollViewer.ScrollToHorizontalOffset(scrollViewer.HorizontalOffset + itemHeight);
                                    }
                                }
                                catch
                                {
                                }
                            }
                            this.Dispatcher.BeginInvoke((Action)(() =>
                            {
                                this.originalHorizontalPosition -= scrollViewer.HorizontalOffset - previousHorizontalOffset;
                                this.isDuringInternalScrollOperation = false;
                            }));
                        }));
                    }
                    switch (this.Role)
                    {
                    case DragTaskThumbRole.UpdateFinish:
                        if (!dataContext.IsMilestone)
                        {
                            double num3 = ganttChartView.GetPosition(dataContext.Finish) + e.HorizontalChange;
                            dataContext.Finish = ganttChartView.GetPreviousVisibleWorkingTime(ganttChartView.GetUpdateScaleTime(ganttChartView.GetDateTime(num3)));
                            return;
                        }
                        return;

                    case DragTaskThumbRole.UpdateCompletedFinish:
                        if (!dataContext.IsMilestone)
                        {
                            double num4 = ganttChartView.GetPosition(dataContext.CompletedFinish) + e.HorizontalChange;
                            dataContext.CompletedFinish = ganttChartView.GetPreviousVisibleWorkingTime(ganttChartView.GetUpdateScaleTime(ganttChartView.GetDateTime(num4)));
                            return;
                        }
                        return;
                    }
                    double   position        = ganttChartView.GetPosition(dataContext.Start) + e.HorizontalChange;
                    TimeSpan effort          = dataContext.Effort;
                    TimeSpan completedEffort = dataContext.CompletedEffort;
                    dataContext.Start = ganttChartView.GetNextVisibleWorkingTime(ganttChartView.GetUpdateScaleTime(ganttChartView.GetDateTime(position)));
                    if (!dataContext.IsMilestone)
                    {
                        dataContext.Effort          = effort;
                        dataContext.CompletedEffort = completedEffort;
                    }
                }
            }
        }