Example #1
0
        private static void OnBarHeightChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            KGanttChartView view = d as KGanttChartView;

            if (view != null)
            {
                view.UpdateBars();
            }
        }
Example #2
0
        private static void OnDisplayedTimeChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            KGanttChartView view = d as KGanttChartView;

            if (view != null)
            {
                view.OnDisplayedTimeChanged();
                view.UpdateScrollFromDisplayedTime();
            }
        }
Example #3
0
        private static void OnTimelinePageStartChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            KGanttChartView view = d as KGanttChartView;

            if (view != null)
            {
                view.ClearScheduleCacheValues();
                view.CoerceTimelinePage();
                view.UpdateComputedWidth();
                view.UpdateScales();
                view.UpdateBars();
                view.UpdateDisplayedTimeFromScroll();
                view.OnTimelinePageChanged();
            }
        }
Example #4
0
 /// <summary>
 /// S'assure que les zoom opérations existent.
 /// </summary>
 /// <param name="zoomable">The zoomable.</param>
 /// <param name="chart">The chart.</param>
 private void EnsureOperations(IZoommerGantt zoomable, KGanttChartView chart)
 {
     if (_zoomOperations == null)
     {
         _zoomOperations = new Subject <ZoomAction>();
         _zoomOperations
         .BufferWithInactivity(TimeSpan.FromMilliseconds(200))
         .Take(1)
         .ObserveOnDispatcher()
         .Subscribe(actions =>
         {
             ExecuteZoomActions(zoomable, chart, actions);
             _zoomOperations.OnCompleted();
             _zoomOperations.Dispose();
             _zoomOperations = null;
         });
     }
 }
Example #5
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;
                }
            }
        }
Example #6
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);
        }
Example #7
0
 /// <summary>
 /// Définit l'état occupé d'un chart.
 /// </summary>
 /// <param name="isBusy"><c>true</c> si occupé.</param>
 /// <param name="chart">Le chart.</param>
 private void SetBusy(bool isBusy, KGanttChartView chart)
 {
     chart.SpinnerVisibility = isBusy ? Visibility.Visible : Visibility.Collapsed;
 }