/// <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; } } }
/// <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); }