216 lines
5.8 KiB
C#
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;
|
|||
|
}
|
|||
|
}
|