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

216 lines
5.8 KiB
C#

using System;
namespace CPF.ReoGrid.Actions
{
public class SetRangeStyleAction : WorksheetReusableAction
{
public WorksheetRangeStyle Style
{
get
{
return this.style;
}
set
{
this.style = value;
}
}
public SetRangeStyleAction(int row, int col, int rows, int cols, WorksheetRangeStyle style) : this(new RangePosition(row, col, rows, cols), style)
{
}
public SetRangeStyleAction(string address, WorksheetRangeStyle style)
{
this.backupRootStyle = null;
this.backupRowStyles = null;
this.backupColStyles = null;
this.backupData = null;
this.isFullColSelected = false;
this.isFullRowSelected = false;
this.isFullGridSelected = false;
bool flag = RangePosition.IsValidAddress(address);
if (flag)
{
base.Range = new RangePosition(address);
this.style = style;
return;
}
throw new InvalidAddressException(address);
}
public SetRangeStyleAction(RangePosition range, WorksheetRangeStyle style) : base(range)
{
this.backupRootStyle = null;
this.backupRowStyles = null;
this.backupColStyles = null;
this.backupData = null;
this.isFullColSelected = false;
this.isFullRowSelected = false;
this.isFullGridSelected = false;
this.style = new WorksheetRangeStyle(style);
}
public override void Do()
{
this.backupData = base.Worksheet.GetPartialGrid(base.Range);
this.affectedRange = base.Worksheet.FixRange(base.Range);
int row = base.Range.Row;
int col = base.Range.Col;
int endRow = base.Range.EndRow;
int endCol = base.Range.EndCol;
int rowCount = base.Worksheet.RowCount;
int columnCount = base.Worksheet.ColumnCount;
this.isFullColSelected = (this.affectedRange.Rows == rowCount);
this.isFullRowSelected = (this.affectedRange.Cols == columnCount);
this.isFullGridSelected = (this.isFullRowSelected && this.isFullColSelected);
bool flag = this.isFullGridSelected;
if (flag)
{
this.backupRootStyle = WorksheetRangeStyle.Clone(base.Worksheet.RootStyle);
this.backupRowStyles = new WorksheetRangeStyle[rowCount];
this.backupColStyles = new WorksheetRangeStyle[columnCount];
for (int i = 0; i < rowCount; i++)
{
RowHeader rowHeader = base.Worksheet.RetrieveRowHeader(i);
bool flag2 = rowHeader != null && rowHeader.InnerStyle != null;
if (flag2)
{
this.backupRowStyles[i] = WorksheetRangeStyle.Clone(rowHeader.InnerStyle);
}
}
for (int j = 0; j < columnCount; j++)
{
ColumnHeader columnHeader = base.Worksheet.RetrieveColumnHeader(j);
bool flag3 = columnHeader != null && columnHeader.InnerStyle != null;
if (flag3)
{
this.backupColStyles[j] = WorksheetRangeStyle.Clone(columnHeader.InnerStyle);
}
}
}
else
{
bool flag4 = this.isFullRowSelected;
if (flag4)
{
this.backupRowStyles = new WorksheetRangeStyle[endRow - row + 1];
for (int k = row; k <= endRow; k++)
{
this.backupRowStyles[k - row] = WorksheetRangeStyle.Clone(base.Worksheet.RetrieveRowHeader(k).InnerStyle);
}
}
else
{
bool flag5 = this.isFullColSelected;
if (flag5)
{
this.backupColStyles = new WorksheetRangeStyle[endCol - col + 1];
for (int l = col; l <= endCol; l++)
{
this.backupColStyles[l - col] = WorksheetRangeStyle.Clone(base.Worksheet.RetrieveColumnHeader(l).InnerStyle);
}
}
}
}
base.Worksheet.SetRangeStyles(this.affectedRange, this.style);
}
public override void Undo()
{
bool flag = this.isFullGridSelected;
if (flag)
{
base.Worksheet.RootStyle = WorksheetRangeStyle.Clone(this.backupRootStyle);
for (int i = 0; i < this.backupRowStyles.Length; i++)
{
bool flag2 = this.backupRowStyles[i] != null;
if (flag2)
{
RowHeader rowHeader = base.Worksheet.RetrieveRowHeader(i);
bool flag3 = rowHeader != null;
if (flag3)
{
rowHeader.InnerStyle = WorksheetRangeStyle.Clone(this.backupRowStyles[i]);
}
}
}
for (int j = 0; j < this.backupColStyles.Length; j++)
{
bool flag4 = this.backupColStyles[j] != null;
if (flag4)
{
ColumnHeader columnHeader = base.Worksheet.RetrieveColumnHeader(j);
bool flag5 = columnHeader != null;
if (flag5)
{
columnHeader.InnerStyle = WorksheetRangeStyle.Clone(this.backupColStyles[j]);
}
}
}
}
else
{
bool flag6 = this.isFullRowSelected;
if (flag6)
{
for (int k = 0; k < this.backupRowStyles.Length; k++)
{
RowHeader rowHeader2 = base.Worksheet.RetrieveRowHeader(k + this.affectedRange.Row);
bool flag7 = rowHeader2 != null;
if (flag7)
{
rowHeader2.InnerStyle = this.backupRowStyles[k];
}
}
}
else
{
bool flag8 = this.isFullColSelected;
if (flag8)
{
for (int l = 0; l < this.backupColStyles.Length; l++)
{
ColumnHeader columnHeader2 = base.Worksheet.RetrieveColumnHeader(l + this.affectedRange.Col);
bool flag9 = columnHeader2 != null;
if (flag9)
{
columnHeader2.InnerStyle = this.backupColStyles[l];
}
}
}
}
}
base.Worksheet.SetPartialGrid(this.affectedRange, this.backupData, PartialGridCopyFlag.CellStyle);
}
public override string GetName()
{
return "Set Style";
}
public override WorksheetReusableAction Clone(RangePosition range)
{
return new SetRangeStyleAction(range, this.style);
}
private WorksheetRangeStyle style;
private WorksheetRangeStyle backupRootStyle;
private WorksheetRangeStyle[] backupRowStyles;
private WorksheetRangeStyle[] backupColStyles;
private PartialGrid backupData;
private bool isFullColSelected;
private bool isFullRowSelected;
private bool isFullGridSelected;
private RangePosition affectedRange;
}
}