178 lines
4.7 KiB
C#
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;
|
|
}
|
|
}
|