/// <summary>
        /// Method used to set SegmentSelectionBrush to SelectedIndex segment
        /// </summary>
        /// <param name="newIndex"></param>
        /// <param name="oldIndex"></param>
        protected internal override void SelectedIndexChanged(int newIndex, int oldIndex)
        {
            ChartSelectionChangedEventArgs chartSelectionChangedEventArgs;

            if (ActualArea != null && ActualArea.SelectionBehaviour != null)
            {
                // Resets the adornment selection when the mouse pointer moved away from the adornment or clicked the same adornment.
                if (ActualArea.SelectionBehaviour.SelectionStyle == SelectionStyle.Single)
                {
                    if (SelectedSegmentsIndexes.Contains(oldIndex))
                    {
                        SelectedSegmentsIndexes.Remove(oldIndex);
                    }

                    OnResetSegment(oldIndex);
                }

                if (newIndex >= 0 && ActualArea.GetEnableSegmentSelection())
                {
                    if (!SelectedSegmentsIndexes.Contains(newIndex))
                    {
                        SelectedSegmentsIndexes.Add(newIndex);
                    }

                    // Selects the adornment when the mouse is over or clicked on adornments(adornment selection).
                    if (adornmentInfo != null && adornmentInfo.HighlightOnSelection)
                    {
                        UpdateAdornmentSelection(newIndex);
                    }

                    if (ActualArea != null && Segments.Count > 0)
                    {
                        chartSelectionChangedEventArgs = new ChartSelectionChangedEventArgs()
                        {
                            SelectedSegment         = Segments[0],
                            SelectedSegments        = Area.SelectedSegments,
                            SelectedSeries          = this,
                            SelectedIndex           = newIndex,
                            PreviousSelectedIndex   = oldIndex,
                            NewPointInfo            = GetDataPoint(newIndex),
                            PreviousSelectedSeries  = null,
                            PreviousSelectedSegment = null,
                            IsSelected = true
                        };

                        chartSelectionChangedEventArgs.PreviousSelectedSeries = this.ActualArea.PreviousSelectedSeries;

                        if (oldIndex != -1)
                        {
                            chartSelectionChangedEventArgs.PreviousSelectedSegment = Segments[0];
                            chartSelectionChangedEventArgs.OldPointInfo            = GetDataPoint(oldIndex);
                        }

                        (ActualArea as SfChart).OnSelectionChanged(chartSelectionChangedEventArgs);
                        PreviousSelectedIndex = newIndex;
                    }
                    else if (Segments.Count == 0)
                    {
                        triggerSelectionChangedEventOnLoad = true;
                    }
                }
                else if (newIndex == -1 && ActualArea != null)
                {
                    chartSelectionChangedEventArgs = new ChartSelectionChangedEventArgs()
                    {
                        SelectedSegment         = null,
                        SelectedSegments        = Area.SelectedSegments,
                        SelectedSeries          = null,
                        SelectedIndex           = newIndex,
                        PreviousSelectedIndex   = oldIndex,
                        PreviousSelectedSegment = null,
                        PreviousSelectedSeries  = this,
                        IsSelected = false
                    };

                    if (oldIndex != -1)
                    {
                        chartSelectionChangedEventArgs.PreviousSelectedSegment = Segments[0];
                        chartSelectionChangedEventArgs.OldPointInfo            = GetDataPoint(oldIndex);
                    }

                    (ActualArea as SfChart).OnSelectionChanged(chartSelectionChangedEventArgs);
                    PreviousSelectedIndex = newIndex;
                }
            }
            else if (newIndex >= 0 && Segments.Count == 0)
            {
                triggerSelectionChangedEventOnLoad = true;
            }
        }
Example #2
0
        /// <summary>
        /// Method used to set SegmentSelectionBrush to <see cref="SelectedIndex"/> <see cref="ChartSegment3D"/>
        /// and trigger chart selection event.
        /// </summary>
        /// <param name="newIndex">The New Index</param>
        /// <param name="oldIndex">The Old Index</param>
        protected internal override void SelectedIndexChanged(int newIndex, int oldIndex)
        {
            ChartSelectionChangedEventArgs chartSelectionChangedEventArgs;

            if (this.ActualArea != null)
            {
                ChartSegment3D segment;

                // Reset the oldIndex segment Interior
                if (this.Area.SelectionStyle == SelectionStyle3D.Single)
                {
                    if (SelectedSegmentsIndexes.Contains(oldIndex))
                    {
                        SelectedSegmentsIndexes.Remove(oldIndex);
                    }

                    this.OnResetSegment(oldIndex);
                }

                if (newIndex >= 0 && (ActualArea as SfChart3D).EnableSegmentSelection)
                {
                    if (!SelectedSegmentsIndexes.Contains(newIndex))
                    {
                        SelectedSegmentsIndexes.Add(newIndex);
                    }

                    // Set the SegmentSelectionBrush to newIndex segment Interior
                    if (newIndex < Segments.Count && this.SegmentSelectionBrush != null)
                    {
                        segment = Segments[newIndex] as ChartSegment3D;
                        segment.BindProperties();

                        foreach (var item in segment.Polygons)
                        {
                            item.Fill = this.SegmentSelectionBrush;
                            item.ReDraw();
                        }
                    }

                    if (newIndex < Segments.Count)
                    {
                        chartSelectionChangedEventArgs = new ChartSelectionChangedEventArgs()
                        {
                            SelectedSegment         = this.SelectedSegment,
                            SelectedSegments        = this.Area.SelectedSegments,
                            SelectedSeries          = this,
                            SelectedIndex           = newIndex,
                            PreviousSelectedIndex   = oldIndex,
                            NewPointInfo            = Segments[newIndex].Item,
                            PreviousSelectedSegment = null,
                            PreviousSelectedSeries  = null,
                            IsSelected = true
                        };

                        chartSelectionChangedEventArgs.PreviousSelectedSeries = this.Area.PreviousSelectedSeries;

                        if (oldIndex >= 0 && oldIndex < Segments.Count)
                        {
                            chartSelectionChangedEventArgs.PreviousSelectedSegment = this.Segments[oldIndex];
                            chartSelectionChangedEventArgs.OldPointInfo            = Segments[oldIndex].Item;
                        }

                        (ActualArea as SfChart3D).OnSelectionChanged(chartSelectionChangedEventArgs);
                        this.PreviousSelectedIndex = newIndex;
                    }
                    else if (Segments.Count == 0)
                    {
                        this.triggerSelectionChangedEventOnLoad = true;
                    }
                }
                else if (newIndex == -1 && this.ActualArea != null)
                {
                    chartSelectionChangedEventArgs = new ChartSelectionChangedEventArgs()
                    {
                        SelectedSegment         = null,
                        SelectedSegments        = this.Area.SelectedSegments,
                        SelectedSeries          = null,
                        SelectedIndex           = newIndex,
                        PreviousSelectedIndex   = oldIndex,
                        PreviousSelectedSegment = null,
                        PreviousSelectedSeries  = this,
                        IsSelected = false
                    };

                    if (oldIndex != -1 && oldIndex < Segments.Count)
                    {
                        chartSelectionChangedEventArgs.PreviousSelectedSegment = this.Segments[oldIndex];
                        chartSelectionChangedEventArgs.OldPointInfo            = Segments[oldIndex].Item;
                    }

                    (ActualArea as SfChart3D).OnSelectionChanged(chartSelectionChangedEventArgs);
                    this.PreviousSelectedIndex = newIndex;
                }
            }
        }
Example #3
0
        /// <summary>
        /// Updates the <see cref="ChartSeries3D"/> on mouse down selection.
        /// </summary>
        /// <param name="currentIndex">The Current Selected Index</param>
        internal void OnMouseDownSelection(int currentIndex)
        {
            bool seriesSelection = this.Area.EnableSeriesSelection &&
                                   (IsSideBySide || this is ScatterSeries3D ||
                                    this is CircularSeriesBase3D ||
                                    (!this.IsSideBySide &&
                                     ((!this.Area.EnableSegmentSelection) ||
                                      (this.Area.EnableSegmentSelection && currentIndex == -1))));

            if (seriesSelection)
            {
                int index = this.Area.Series.IndexOf(this as ChartSeries3D);
                selectionChangingEventArgs.IsDataPointSelection = false;
                bool isCancel = this.RaiseSelectionChanging(index, this.Area.SeriesSelectedIndex);

                if (!isCancel)
                {
                    if (this.Area.SelectionStyle != SelectionStyle3D.Single && this.Area.SelectedSeriesCollection.Contains(this))
                    {
                        this.Area.SelectedSeriesCollection.Remove(this);

                        if (this.Area.SeriesSelectedIndex == index)
                        {
                            this.Area.SeriesSelectedIndex = -1;
                        }

                        SfChart3D.OnResetSeries(this);
                    }
                    else if (this.Area.SeriesSelectedIndex == index)
                    {
                        this.Area.SeriesSelectedIndex = -1;
                    }
                    else if (index > -1)
                    {
                        this.Area.SeriesSelectedIndex    = index;
                        this.Area.PreviousSelectedSeries = this;
                    }
                }
            }
            else if (this.Area.EnableSegmentSelection)
            {
                selectionChangingEventArgs.IsDataPointSelection = true;
                bool isCancel = this.RaiseSelectionChanging(currentIndex, this.SelectedIndex);

                if (!isCancel)
                {
                    if (this.Area.SelectionStyle != SelectionStyle3D.Single && SelectedSegmentsIndexes.Contains(currentIndex))
                    {
                        SelectedSegmentsIndexes.Remove(currentIndex);

                        if (this.SelectedIndex == currentIndex)
                        {
                            this.SelectedIndex = -1;
                        }

                        this.OnResetSegment(currentIndex);
                    }
                    else if (this.SelectedIndex == currentIndex)
                    {
                        this.SelectedIndex = -1;
                    }
                    else if (currentIndex > -1)
                    {
                        this.SelectedIndex = currentIndex;
                        this.Area.PreviousSelectedSeries = this;
                    }
                }
            }
        }
Example #4
0
        /// <summary>
        /// Updates the series when mouse moved.
        /// </summary>
        /// <param name="element">The Element</param>
        /// <param name="pos">The Position</param>
        internal void OnMouseMoveSelection(FrameworkElement element, Point pos)
        {
            if (element == null || !(element.Tag is ChartSegment3D))
            {
                return;
            }

            var segment      = element.Tag as ChartSegment3D;
            int currentIndex = -1;

            if (this.IsSideBySide || segment.Series is CircularSeriesBase3D)
            {
                currentIndex = Segments.IndexOf(segment);
            }
            else
            {
                this.dataPoint = this.GetDataPoint(pos);
                if (this.dataPoint != null)
                {
                    currentIndex = dataPoint.Index;
                }
            }

            bool seriesSelection = this.Area.EnableSeriesSelection &&
                                   (segment.Series.IsSideBySide || segment.Series is ScatterSeries3D ||
                                    segment.Series is CircularSeriesBase3D ||
                                    (!segment.Series.IsSideBySide &&
                                     ((!this.Area.EnableSegmentSelection) ||
                                      (this.Area.EnableSegmentSelection && currentIndex == -1))));

            if (seriesSelection)
            {
                int index = this.Area.Series.IndexOf(segment.Series as ChartSeries3D);

                if (index > -1)
                {
                    bool isCancel = this.RaiseSelectionChanging(index, this.Area.SeriesSelectedIndex);

                    if (!isCancel)
                    {
                        this.Area.SeriesSelectedIndex    = index;
                        this.Area.PreviousSelectedSeries = this;
                    }
                }
            }
            else if (this.Area.EnableSegmentSelection)
            {
                if (currentIndex > -1)
                {
                    bool isCancel = this.RaiseSelectionChanging(currentIndex, this.SelectedIndex);

                    if (!isCancel)
                    {
                        if (this.Area.SelectionStyle == SelectionStyle3D.Single)
                        {
                            this.SelectedIndex = currentIndex;
                        }
                        else
                        {
                            SelectedSegmentsIndexes.Add(currentIndex);
                        }

                        this.Area.PreviousSelectedSeries = this;
                    }
                }
            }
        }
        /// <summary>
        /// Method used to set SegmentSelectionBrush to SelectedIndex segment
        /// </summary>
        /// <param name="newIndex"></param>
        /// <param name="oldIndex"></param>
        protected internal override void SelectedIndexChanged(int newIndex, int oldIndex)
        {
            ChartSelectionChangedEventArgs chartSelectionChangedEventArgs;

            if (ActualArea != null && ActualArea.SelectionBehaviour != null && !ActualArea.GetEnableSeriesSelection())
            {
                // Reset the old segment
                if (ActualArea.SelectionBehaviour.SelectionStyle == SelectionStyle.Single)
                {
                    if (SelectedSegmentsIndexes.Contains(oldIndex))
                    {
                        SelectedSegmentsIndexes.Remove(oldIndex);
                    }

                    OnResetSegment(oldIndex);
                }

                if (newIndex >= 0 && ActualArea.GetEnableSegmentSelection())
                {
                    if (!SelectedSegmentsIndexes.Contains(newIndex))
                    {
                        SelectedSegmentsIndexes.Add(newIndex);
                    }

                    dataPoint = GetDataPoint(newIndex);

                    if (dataPoint != null && SegmentSelectionBrush != null)
                    {
                        // Selects the adornment when the mouse is over or clicked on adornments(adornment selection).
                        if (adornmentInfo != null && adornmentInfo.HighlightOnSelection)
                        {
                            UpdateAdornmentSelection(newIndex);
                        }

                        // Generate pixels for the particular data point
                        if (Segments.Count > 0)
                        {
                            if (Segments.Count > 0)
                            {
                                GeneratePixels();
                            }
                        }

                        // Set the SegmentSelectionBrush to the selected segment pixels
                        OnBitmapSelection(selectedSegmentPixels, SegmentSelectionBrush, true);
                    }

                    // trigger the SelectionChanged event.
                    if (ActualArea != null && Segments.Count > 0)
                    {
                        chartSelectionChangedEventArgs = new ChartSelectionChangedEventArgs()
                        {
                            SelectedSegment       = Segments[0],
                            SelectedSegments      = Area.SelectedSegments,
                            SelectedSeries        = this,
                            SelectedIndex         = newIndex,
                            PreviousSelectedIndex = oldIndex,
                            NewPointInfo          = GetDataPoint(newIndex),
                            IsSelected            = true
                        };

                        chartSelectionChangedEventArgs.PreviousSelectedSeries = this.ActualArea.PreviousSelectedSeries;

                        if (oldIndex != -1)
                        {
                            chartSelectionChangedEventArgs.PreviousSelectedSegment = Segments[0];
                            chartSelectionChangedEventArgs.OldPointInfo            = GetDataPoint(oldIndex);
                        }

                        (ActualArea as SfChart).OnSelectionChanged(chartSelectionChangedEventArgs);
                        PreviousSelectedIndex = newIndex;
                    }
                    else if (Segments.Count == 0)
                    {
                        triggerSelectionChangedEventOnLoad = true;
                    }
                }
                else if (newIndex == -1 && ActualArea != null)
                {
                    chartSelectionChangedEventArgs = new ChartSelectionChangedEventArgs()
                    {
                        SelectedSegment         = null,
                        SelectedSegments        = Area.SelectedSegments,
                        SelectedSeries          = null,
                        SelectedIndex           = newIndex,
                        PreviousSelectedIndex   = oldIndex,
                        PreviousSelectedSeries  = this,
                        PreviousSelectedSegment = null,
                        IsSelected = false
                    };

                    if (oldIndex != -1)
                    {
                        chartSelectionChangedEventArgs.PreviousSelectedSegment = GetDataPoint(oldIndex);
                        chartSelectionChangedEventArgs.OldPointInfo            = GetDataPoint(oldIndex);
                    }

                    (ActualArea as SfChart).OnSelectionChanged(chartSelectionChangedEventArgs);
                    PreviousSelectedIndex = newIndex;
                }
            }
            else if (newIndex >= 0 && Segments.Count == 0)
            {
                triggerSelectionChangedEventOnLoad = true;
            }
        }
        /// <summary>
        /// Method used to set SegmentSelectionBrush to selectedindex chartsegment
        /// </summary>
        /// <param name="newIndex"/>
        /// <param name="oldIndex"/>
        protected internal override void SelectedIndexChanged(int newIndex, int oldIndex)
        {
            CircularSeriesBase circularseries = this as CircularSeriesBase;
            bool isGroupTo = circularseries != null && !double.IsNaN(circularseries.GroupTo);
            ChartSelectionChangedEventArgs chartSelectionChangedEventArgs;

            if (ActualArea != null && ActualArea.SelectionBehaviour != null)
            {
                ChartSegment selectedSegment = null, oldSegment = null;

                // Reset the oldIndex segment Interior
                if (ActualArea.SelectionBehaviour.SelectionStyle == SelectionStyle.Single)
                {
                    if (SelectedSegmentsIndexes.Contains(oldIndex))
                    {
                        SelectedSegmentsIndexes.Remove(oldIndex);
                    }

                    OnResetSegment(oldIndex);
                }

                if (oldIndex != -1 && oldIndex < ActualData.Count)
                {
                    object oldItem = isGroupTo ? Segments[oldIndex].Item : ActualData[oldIndex];
                    oldSegment = Segments.Where(segment => segment.Item == oldItem).FirstOrDefault();
                }

                if (newIndex >= 0 && ActualArea.GetEnableSegmentSelection())
                {
                    if (!SelectedSegmentsIndexes.Contains(newIndex))
                    {
                        SelectedSegmentsIndexes.Add(newIndex);
                    }
                    if (Segments.Count == 0)
                    {
                        triggerSelectionChangedEventOnLoad = true;
                        return;
                    }

                    if (newIndex < Segments.Count || newIndex < ActualData.Count)
                    {
                        // For adornment selection implementation
                        if (adornmentInfo is ChartAdornmentInfo && adornmentInfo.HighlightOnSelection)
                        {
                            UpdateAdornmentSelection(newIndex);
                        }

                        // Set the SegmentSelectionBrush to newIndex segment Interior
                        if (this is ISegmentSelectable)
                        {
                            object newItem = isGroupTo ? Segments[newIndex].Item : ActualData[newIndex];
                            selectedSegment = Segments.Where(segment => segment.Item == newItem).FirstOrDefault();
                            if (selectedSegment != null)
                            {
                                if (this.SegmentSelectionBrush != null)
                                {
                                    selectedSegment.BindProperties();
                                }
                                selectedSegment.IsSelectedSegment = true;
                            }
                        }
                    }

                    if (newIndex < Segments.Count || newIndex < ActualData.Count)
                    {
                        chartSelectionChangedEventArgs = new ChartSelectionChangedEventArgs()
                        {
                            SelectedSegment         = selectedSegment,
                            SelectedSegments        = Area.SelectedSegments,
                            SelectedSeries          = this,
                            SelectedIndex           = newIndex,
                            PreviousSelectedIndex   = oldIndex,
                            PreviousSelectedSegment = oldSegment,
                            NewPointInfo            = selectedSegment != null ? selectedSegment.Item : null,
                            OldPointInfo            = oldSegment != null ? oldSegment.Item : null,
                            PreviousSelectedSeries  = null,
                            IsSelected = true
                        };

                        if (this.ActualArea.PreviousSelectedSeries != null && oldIndex != -1)
                        {
                            chartSelectionChangedEventArgs.PreviousSelectedSeries = this.ActualArea.PreviousSelectedSeries;
                        }

                        (ActualArea as SfChart).OnSelectionChanged(chartSelectionChangedEventArgs);
                        PreviousSelectedIndex = newIndex;
                    }
                }
                else if (newIndex == -1)
                {
                    chartSelectionChangedEventArgs = new ChartSelectionChangedEventArgs()
                    {
                        SelectedSegment         = null,
                        SelectedSegments        = Area.SelectedSegments,
                        SelectedSeries          = null,
                        SelectedIndex           = newIndex,
                        PreviousSelectedIndex   = oldIndex,
                        PreviousSelectedSegment = oldSegment,
                        NewPointInfo            = null,
                        OldPointInfo            = oldSegment.Item,
                        PreviousSelectedSeries  = this,
                        IsSelected = false
                    };
                    (ActualArea as SfChart).OnSelectionChanged(chartSelectionChangedEventArgs);
                    PreviousSelectedIndex = newIndex;
                }
            }
        }