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