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