using System; using CPF.ReoGrid.Data; using CPF.ReoGrid.Events; using CPF.ReoGrid.Utility; namespace CPF.ReoGrid.Chart { public class WorksheetChartDataSerial : IChartDataSerial, IDataSerial { public Worksheet Worksheet { get; protected set; } public virtual RangePosition DataRange { get { return this.dataRange; } set { bool flag = this.dataRange != value; if (flag) { this.dataRange = value; this.dataSource.OnDataChanged(); } } } public CellPosition LabelAddress { get; set; } protected WorksheetChartDataSerial(WorksheetChartDataSource dataSource, Worksheet worksheet, CellPosition labelAddress) { bool flag = dataSource == null; if (flag) { throw new ArgumentNullException("dataSource"); } bool flag2 = worksheet == null; if (flag2) { throw new ArgumentNullException("worksheet"); } this.dataSource = dataSource; this.worksheet = worksheet; this.LabelAddress = labelAddress; bool flag3 = this.worksheet != null; if (flag3) { this.worksheet.CellDataChanged += this.worksheet_CellDataChanged; this.worksheet.RangeDataChanged += this.worksheet_RangeDataChanged; } } ~WorksheetChartDataSerial() { try { bool flag = this.worksheet != null; if (flag) { this.worksheet.CellDataChanged -= this.worksheet_CellDataChanged; this.worksheet.RangeDataChanged -= this.worksheet_RangeDataChanged; } } finally { GC.SuppressFinalize(this); } } public WorksheetChartDataSerial(WorksheetChartDataSource dataSource, Worksheet worksheet, CellPosition labelAddress, RangePosition dataRange) : this(dataSource, worksheet, labelAddress) { this.dataRange = dataRange; } public WorksheetChartDataSerial(WorksheetChartDataSource dataSource, Worksheet worksheet, string labelAddress, string addressOrName) : this(dataSource, worksheet, new CellPosition(labelAddress)) { bool flag = RangePosition.IsValidAddress(addressOrName); if (flag) { this.dataRange = new RangePosition(addressOrName); } else { bool flag2 = NamedRange.IsValidName(addressOrName); if (!flag2) { throw new InvalidAddressException(addressOrName); } bool flag3 = this.worksheet != null; if (!flag3) { throw new ReferenceObjectNotAssociatedException("Data source must associate to valid worksheet instance."); } NamedRange refRange; bool flag4 = worksheet.TryGetNamedRange(addressOrName, out refRange); if (!flag4) { throw new InvalidAddressException(addressOrName); } this.dataRange = refRange; } } private void worksheet_CellDataChanged(object sender, CellEventArgs e) { CellPosition position = e.Cell.Position; bool flag = this.dataRange.Contains(position) || this.LabelAddress == position; if (flag) { this.dataSource.OnDataChanged(); } } private void worksheet_RangeDataChanged(object sender, RangeEventArgs e) { RangePosition range = e.Range; bool flag = this.dataRange.IntersectWith(range) || range.Contains(this.LabelAddress); if (flag) { this.dataSource.OnDataChanged(); } } public string Label { get { return (this.worksheet == null || this.LabelAddress.IsEmpty) ? string.Empty : this.worksheet.GetCellText(this.LabelAddress); } } public int Count { get { return this.dataRange.Cols; } } public double? this[int index] { get { bool flag = this.dataRange.Rows > this.dataRange.Cols; object cellData; if (flag) { cellData = this.worksheet.GetCellData(this.dataRange.Row + index, this.dataRange.Col); } else { cellData = this.worksheet.GetCellData(this.dataRange.Row, this.dataRange.Col + index); } double value; bool flag2 = CellUtility.TryGetNumberData(cellData, out value); double? result; if (flag2) { result = new double?(value); } else { result = null; } return result; } } private WorksheetChartDataSource dataSource; private Worksheet worksheet; private RangePosition dataRange; } }