CPF/CPF.ReoGrid/Chart/WorksheetChartDataSerial.cs
2024-06-24 10:15:59 +08:00

177 lines
4.1 KiB
C#

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