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

178 lines
4.7 KiB
C#

using System;
using System.Collections.Generic;
using System.Diagnostics;
using CPF.ReoGrid.Data;
namespace CPF.ReoGrid.Chart
{
public class WorksheetChartDataSource : IChartDataSource<WorksheetChartDataSerial>, IDataSource<WorksheetChartDataSerial>
{
public Worksheet Worksheet { get; protected set; }
public WorksheetChartDataSource(Worksheet worksheet)
{
this.worksheet = worksheet;
}
public WorksheetChartDataSource(Worksheet worksheet, string serialNamesRange, string serialsRange, RowOrColumn serialPerRowOrColumn = RowOrColumn.Row) : this(worksheet)
{
bool flag = worksheet == null;
if (flag)
{
throw new ArgumentNullException("worksheet");
}
RangePosition serialNamesRange2;
bool flag2 = !worksheet.TryGetRangeByAddressOrName(serialNamesRange, out serialNamesRange2);
if (flag2)
{
throw new InvalidAddressException("cannot determine the serial names range by specified range address or name.");
}
RangePosition serialsRange2;
bool flag3 = !worksheet.TryGetRangeByAddressOrName(serialsRange, out serialsRange2);
if (flag3)
{
throw new InvalidAddressException("cannot determine the serials range by specified range address or name.");
}
this.AddSerialsFromRange(serialNamesRange2, serialsRange2, serialPerRowOrColumn);
}
public WorksheetChartDataSource(Worksheet worksheet, RangePosition serialNamesRange, RangePosition serialsRange, RowOrColumn serialPerRowOrColumn = RowOrColumn.Row) : this(worksheet)
{
bool flag = worksheet == null;
if (flag)
{
throw new ArgumentNullException("worksheet");
}
this.AddSerialsFromRange(serialNamesRange, serialsRange, serialPerRowOrColumn);
}
private void AddSerialsFromRange(RangePosition serialNamesRange, RangePosition serialsRange, RowOrColumn serialPerRowOrColumn = RowOrColumn.Row)
{
bool flag = serialPerRowOrColumn == RowOrColumn.Row;
if (flag)
{
for (int i = serialsRange.Row; i <= serialsRange.EndRow; i++)
{
CellPosition labelAddress = new CellPosition(i, serialNamesRange.Col);
this.AddSerial(this.worksheet, labelAddress, new RangePosition(i, serialsRange.Col, 1, serialsRange.Cols));
}
}
else
{
for (int j = serialsRange.Col; j <= serialsRange.EndCol; j++)
{
CellPosition labelAddress2 = new CellPosition(serialNamesRange.Row, j);
this.AddSerial(this.worksheet, labelAddress2, new RangePosition(serialsRange.Row, j, serialsRange.Rows, 1));
}
}
}
public virtual void OnDataChanged()
{
bool flag = this.DataChanged != null;
if (flag)
{
this.DataChanged(this, null);
}
}
//[DebuggerBrowsable(DebuggerBrowsableState.Never)]
public event EventHandler DataChanged;
public RangePosition CategoryNameRange { get; set; }
public string GetCategoryName(int index)
{
bool isEmpty = this.CategoryNameRange.IsEmpty;
string result;
if (isEmpty)
{
result = null;
}
else
{
result = this.worksheet.GetCellData<string>(this.CategoryNameRange.Row, this.CategoryNameRange.Col + index);
}
return result;
}
public virtual int SerialCount
{
get
{
return this.serials.Count;
}
}
public virtual int CategoryCount
{
get
{
return this.categoryCount;
}
}
public WorksheetChartDataSerial this[int index]
{
get
{
bool flag = index < 0 || index >= this.serials.Count;
if (flag)
{
throw new ArgumentOutOfRangeException("index");
}
return this.serials[index];
}
}
public void Add(WorksheetChartDataSerial serial)
{
this.serials.Add(serial);
this.UpdateCategoryCount(serial);
}
internal void UpdateCategoryCount(WorksheetChartDataSerial serial)
{
this.categoryCount = Math.Max(this.categoryCount, Math.Max(serial.DataRange.Cols, serial.DataRange.Rows));
}
public WorksheetChartDataSerial AddSerial(Worksheet worksheet, CellPosition labelAddress, RangePosition serialRange)
{
WorksheetChartDataSerial worksheetChartDataSerial = new WorksheetChartDataSerial(this, worksheet, labelAddress, serialRange);
this.Add(worksheetChartDataSerial);
return worksheetChartDataSerial;
}
public WorksheetChartDataSerial GetSerial(int index)
{
bool flag = index < 0 || index >= this.serials.Count;
if (flag)
{
throw new ArgumentOutOfRangeException("index");
}
return this.serials[index];
}
public WorksheetChartDataSerialCollection Serials
{
get
{
bool flag = this.collection == null;
if (flag)
{
this.collection = new WorksheetChartDataSerialCollection(this);
}
return this.collection;
}
}
private Worksheet worksheet;
private int categoryCount;
internal List<WorksheetChartDataSerial> serials = new List<WorksheetChartDataSerial>();
private WorksheetChartDataSerialCollection collection;
}
}