コード例 #1
0
        /// <summary>
        /// Met en attente un auto-scale qui sera exécuté dès que le gantt sera prêt.
        /// </summary>
        /// <param name="horizontal"><c>true</c> pour scaler horizontalement.</param>
        /// <param name="vertical"><c>true</c> pour scaler verticalement.</param>
        /// <param name="resetZooms"><c>true</c> pour  RAZ le zoom.</param>
        public void EnqueueAutoScale(bool horizontal, bool vertical, bool resetZooms)
        {
            if (!this.Gantts.Any())
            {
                return;
            }

            if (resetZooms)
            {
                _ignoreZoomChanges = true;
                if (horizontal)
                {
                    this.ZoomX = 1;
                }
                if (vertical)
                {
                    this.ZoomY = 1;
                }

                foreach (var chart in this.Gantts)
                {
                    KGanttChartView ganttChart = null;
                    var             grid       = chart as GanttChartDataGrid;
                    if (grid != null && grid.GanttChartView != null)
                    {
                        ganttChart = grid.GanttChartView as KGanttChartView;
                    }
                    else
                    {
                        var v = chart as GanttChartView;
                        if (v != null)
                        {
                            ganttChart = v as KGanttChartView;
                        }
                    }

                    if (ganttChart != null)
                    {
                        if (horizontal)
                        {
                            ganttChart.DeferScrollToHorizontalOffset(0);
                        }
                        if (vertical)
                        {
                            ganttChart.DeferScrollToVerticalOffset(0);
                        }
                    }
                }

                _ignoreZoomChanges = false;
            }

            if (this.Gantts.Any(g => g.IsReadyForAutoScale))
            {
                this.AutoScale(horizontal, vertical);
            }
            else if (this.Gantts.Any(g => !g.IsReadyForAutoScale))
            {
                this.AutoScaleEnqueued = () => this.AutoScale(horizontal, vertical);
                foreach (var gantt in this.Gantts.Where(g => !g.IsReadyForAutoScale))
                {
                    gantt.ReadyForAutoScale -= OnReadyForAutoScale;
                    gantt.ReadyForAutoScale += OnReadyForAutoScale;
                }
            }
        }
コード例 #2
0
        /// <summary>
        /// Execute les différentes actions de zoom mise en file.
        /// </summary>
        /// <param name="zoomable">Le gantt.</param>
        /// <param name="chart">Le chart.</param>
        /// <param name="actions">Les actions.</param>
        private void ExecuteZoomActions(IZoommerGantt zoomable, KGanttChartView chart, IEnumerable <ZoomAction> actions)
        {
            double zoomX            = zoomable.ZoomX;
            double zoomY            = zoomable.ZoomY;
            double verticalOffset   = chart.ScrollVerticalOffset;
            double horizontalOffset = chart.ScrollHorizontalOffset;
            bool   scrollHorizontal = false;
            bool   scrollVertical   = false;

            foreach (var action in actions)
            {
                switch (action.Action)
                {
                case ZoomActionEnum.ZoomXIn:
                {
                    double delta = zoomX * 1.2 - zoomX;
                    zoomX            += delta;
                    horizontalOffset += action.MousePosition.X * delta;
                    scrollHorizontal  = true;
                }
                break;

                case ZoomActionEnum.ZoomXOut:
                {
                    double delta = zoomX / 1.2 - zoomX;
                    zoomX            += delta;
                    horizontalOffset += action.MousePosition.X * delta;
                    scrollHorizontal  = true;
                }
                break;

                case ZoomActionEnum.ZoomYIn:
                {
                    double delta = zoomY * 1.2 - zoomY;
                    zoomY          += delta;
                    verticalOffset += action.MousePosition.Y * delta;
                    scrollVertical  = true;
                }
                break;

                case ZoomActionEnum.ZoomYOut:
                {
                    double delta = zoomY / 1.2 - zoomY;
                    zoomY          += delta;
                    verticalOffset += action.MousePosition.Y * delta;
                    scrollVertical  = true;
                }
                break;

                case ZoomActionEnum.ScrollRight:
                    horizontalOffset += 48;
                    scrollHorizontal  = true;
                    break;

                case ZoomActionEnum.ScrollLeft:
                    horizontalOffset -= 48;
                    scrollHorizontal  = true;
                    break;

                default:
                    throw new ArgumentOutOfRangeException("action");
                }
            }

            ApplyZoom(zoomX, zoomY);
            if (scrollHorizontal)
            {
                chart.DeferScrollToHorizontalOffset(horizontalOffset);
            }
            if (scrollVertical)
            {
                chart.DeferScrollToVerticalOffset(verticalOffset);
            }

            SetBusy(false, chart);
        }