using System; using System.Collections; using System.Drawing; namespace GoldPrinter { public class GridBase : IGrid, IDisposable { protected ArrayList _arrRowsHeight; protected ArrayList _arrColsWidth; protected ArrayList _arrColsAlign; protected string[,] _arrStrGrid = new string[0, 0]; private Point _location = new Point(0, 0); private int _Width = 300; private int _Height = 200; private Font _font = new Font("宋体", 10f); private AlignFlag _alignFlag = AlignFlag.Left; private GridLineFlag _gridLineFlag = GridLineFlag.Both; private GridMergeFlag _gridMergeFlag = GridMergeFlag.None; private GridBorderFlag _gridBorderFlag = GridBorderFlag.Single; private int _rows = 0; private int _cols = 0; private int _fixedRows = 0; private int _fixedCols = 0; private int _row = 0; private int _col = 0; private int _rowSel = 0; private int _colSel = 0; private int _rowheight = 20; private int _colWidth = 75; public Point Location { get { return this._location; } set { this._location = value; } } public int Width { get { return this._Width; } set { this._Width = this.GetValidIntValue(value); } } public int Height { get { return this._Height; } set { this._Height = this.GetValidIntValue(value); } } public Font Font { get { return this._font; } set { this._font = value; } } public AlignFlag AlignMent { get { return this._alignFlag; } set { this._alignFlag = value; this.ChangeFieldAlignMent(); } } public GridLineFlag Line { get { return this._gridLineFlag; } set { this._gridLineFlag = value; } } public GridMergeFlag Merge { get { return this._gridMergeFlag; } set { this._gridMergeFlag = value; } } public GridBorderFlag Border { get { return this._gridBorderFlag; } set { this._gridBorderFlag = value; } } public int Rows { get { return this._rows; } set { this._rows = this.GetValidIntValue(value); this.ChangeFieldRows(); } } public int Cols { get { return this._cols; } set { this._cols = this.GetValidIntValue(value); this.ChangeFieldCols(); } } public int FixedRows { get { return this._fixedRows; } set { this._fixedRows = this.GetValidIntValue(value); if (this._fixedRows > this.Rows) { this._fixedRows = this.Rows; } } } public int FixedCols { get { return this._fixedCols; } set { this._fixedCols = this.GetValidIntValue(value); if (this._fixedCols > this.Cols) { this._fixedCols = this.Cols; } } } public int Row { get { return this._row; } set { this._row = this.GetValidIntValue(value); if (this._row >= this.Rows) { this._row = this.Rows - 1; } } } public int Col { get { return this._col; } set { this._col = this.GetValidIntValue(value); if (this._col >= this.Cols) { this._col = this.Cols - 1; } } } public int RowSel { get { return this._rowSel; } set { int num = this.GetValidIntValue(value); if (num >= this._rows) { num = this._rows - 1; } this._rowSel = num; } } public int ColSel { get { return this._colSel; } set { int num = this.GetValidIntValue(value); if (num >= this._cols) { num = this._cols - 1; } this._rowSel = num; } } public int PreferredRowHeight { get { return this._rowheight; } set { this._rowheight = this.GetValidIntValue(value); this.ChangeFieldPreferredRowHeight(); } } public int PreferredColWidth { get { return this._rowheight; } set { this._rowheight = this.GetValidIntValue(value); this.ChangeFieldPreferredColWidth(); } } public int[] RowsHeight { get { int[] array = new int[this._rows]; for (int i = 0; i < this._rows; i++) { array[i] = (int)this._arrRowsHeight[i]; } return array; } set { int num = 0; while (num < this._rows && num < value.Length) { this._arrRowsHeight[num] = value[num]; num++; } } } public int[] ColsWidth { get { int[] array = new int[this._cols]; for (int i = 0; i < this._cols; i++) { array[i] = (int)this._arrColsWidth[i]; } return array; } set { int num = 0; while (num < this._cols && num < value.Length) { this._arrColsWidth[num] = value[num]; num++; } } } public AlignFlag[] ColsAlignment { get { AlignFlag[] array = new AlignFlag[this._cols]; for (int i = 0; i < this._cols; i++) { array[i] = (AlignFlag)this._arrColsAlign[i]; } return array; } set { AlignFlag[] array = new AlignFlag[this._cols]; int num = 0; while (num < this._cols && num < array.Length) { this._arrColsAlign[num] = array[num]; num++; } } } public string Text { get { return this._arrStrGrid[this._row, this._col]; } set { this._arrStrGrid[this._row, this._col] = value; } } public string[,] GridText { get { return this._arrStrGrid; } set { this._arrStrGrid = value; this._rows = this._arrStrGrid.GetLength(0); this._cols = this._arrStrGrid.GetLength(1); this.InitRowHeight(); this.InitColWidth(); this.InitColAlignMent(); } } private int GetValidIntValue(int val) { int num = val; if (num < 0) { num = 0; } if (num > 2147483647) { num = 2147483647; } return num; } public int get_RowHeight(int index) { return (int)this._arrRowsHeight[index]; } public void set_RowHeight(int index, int rowHeight) { int validIntValue = this.GetValidIntValue(rowHeight); this._arrRowsHeight[index] = validIntValue; } public int get_ColWidth(int index) { return (int)this._arrColsWidth[index]; } public void set_ColWidth(int index, int colWidth) { int validIntValue = this.GetValidIntValue(colWidth); this._arrColsWidth[index] = validIntValue; } public AlignFlag get_ColAlignment(int index) { return (AlignFlag)this._arrColsAlign[index]; } public void set_ColAlignment(int index, AlignFlag colAlignment) { this._arrColsAlign[index] = colAlignment; } public string get_TextMatrix(int row, int col) { return this._arrStrGrid[row, col]; } public void set_TextMatrix(int row, int col, string textMatrix) { this._arrStrGrid[row, col] = textMatrix; } protected virtual void ChangeFieldPreferredRowHeight() { this.InitRowHeight(); } protected virtual void ChangeFieldPreferredColWidth() { this.InitColWidth(); } protected virtual void ChangeFieldAlignMent() { this.InitColAlignMent(); } protected virtual void ChangeFieldRows() { this.ReDimArrString(ref this._arrStrGrid, this._rows, this._cols); this.ResetRowHeight(); } protected virtual void ChangeFieldCols() { this.ReDimArrString(ref this._arrStrGrid, this._rows, this._cols); this.ResetColWidth(); } protected void InitRowHeight() { this._arrRowsHeight = new ArrayList(); for (int i = 0; i < this._rows; i++) { this._arrRowsHeight.Add(this._rowheight); } } protected void InitColWidth() { this._arrColsWidth = new ArrayList(); for (int i = 0; i < this._cols; i++) { this._arrColsWidth.Add(this._colWidth); } } protected void InitColAlignMent() { this._arrColsAlign = new ArrayList(); for (int i = 0; i < this._cols; i++) { this._arrColsAlign.Add(this._alignFlag); } } protected void ResetRowHeight() { int num = this._arrRowsHeight.Count - this._cols; if (num > 0) { num = Math.Abs(num); for (int i = 0; i < num; i++) { this._arrRowsHeight.RemoveAt(this._arrRowsHeight.Count - 1); } } else if (num < 0) { num = Math.Abs(num); for (int i = 0; i < num; i++) { this._arrRowsHeight.Add(this._rowheight); } } } protected void ResetColWidth() { int num = this._arrColsWidth.Count - this._cols; if (num > 0) { num = Math.Abs(num); for (int i = 0; i < num; i++) { this._arrColsWidth.RemoveAt(this._arrColsWidth.Count - 1); } } else if (num < 0) { num = Math.Abs(num); for (int i = 0; i < num; i++) { this._arrColsWidth.Add(this._colWidth); } } } public virtual void Dispose() { this.Font.Dispose(); } public GridBase() : this(3, 4) { } public GridBase(int rows, int cols) { this._rows = rows; this._cols = cols; this.Initialize(rows, cols); } public IGrid Clone() { return (IGrid)base.MemberwiseClone(); } public void Initialize(int rows, int cols) { this._rows = rows; this._cols = cols; this.ReDimArrString(ref this._arrStrGrid, rows, cols); this.InitRowHeight(); this.InitColWidth(); this.InitColAlignMent(); } public int GetAllColsWidthSum() { int num = 0; for (int i = 0; i < this.Cols; i++) { num += (int)this._arrColsWidth[i]; } return num; } public int GetAllRowsHeightSum() { int num = 0; for (int i = 0; i < this.Rows; i++) { num += (int)this._arrRowsHeight[i]; } return num; } public int[] GetAverageColsWidth() { int[] array = new int[this._cols]; int num = 0; int num2 = this._Width / this._cols; for (int i = 0; i < this._cols - 1; i++) { array[i] = num2; num++; } array[array.Length - 1] = this._Width - num2 * num; return array; } protected void ReDimArrString(ref string[,] arrStr, int rows, int cols) { if (arrStr == null || arrStr.Length == 0) { arrStr = new string[rows, cols]; for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { arrStr[i, j] = ""; } } } else { string[,] array = new string[rows, cols]; int length = arrStr.GetLength(0); int length2 = arrStr.GetLength(1); int num = 0; int num2 = 0; if (rows >= length) { if (cols >= length2) { num = length; num2 = length2; for (int i = 0; i < length; i++) { for (int j = 0; j < cols; j++) { array[i, j] = ""; } } for (int i = length; i < rows; i++) { for (int j = 0; j < cols; j++) { array[i, j] = ""; } } } if (cols <= length2) { num = length; num2 = cols; for (int i = length; i < rows; i++) { for (int j = 0; j < length2; j++) { array[i, j] = ""; } } } } if (rows <= length) { if (cols >= length2) { num = rows; num2 = length2; for (int i = 0; i < length; i++) { for (int j = length2; j < cols; j++) { array[i, j] = ""; } } } if (cols <= length2) { num = rows; num2 = cols; } } for (int i = 0; i < num; i++) { for (int j = 0; j < num2; j++) { array[i, j] = arrStr[i, j]; } } arrStr = array; } } } }