/// <summary> /// Internal use only. /// Constructor. /// </summary> /// <param name="representative">Representative cell for the cell. /// (Usually the one located at top left corner of the group of merged cell.)</param> /// <param name="rowSpan">Number of rows that this group of merged cells spans.</param> /// <param name="colSpan">Number of columns that this group of merged cells spans.</param> /// <param name="rowIndex">The relative row index of the cell within this group /// of merged cells.</param> /// <param name="colIndex">The relative column index of the cell within this group /// of merged cells.</param> internal CellMergeInfo(RtfTableCell representative, int rowSpan, int colSpan, int rowIndex, int colIndex) { _representative = representative; _rowSpan = rowSpan; _colSpan = colSpan; _rowIndex = rowIndex; _colIndex = colIndex; }
private void validateMergedCellBorders(RtfTableCell representative) { if (!representative.IsMerged) { throw new Exception("Invalid representative (cell is not merged)."); } validateMergedCellBorder(representative, Direction.Top); validateMergedCellBorder(representative, Direction.Right); validateMergedCellBorder(representative, Direction.Bottom); validateMergedCellBorder(representative, Direction.Left); }
public RtfTable(int rowCount, int colCount, float horizontalWidth, float fontSize) { _fontSize = fontSize; _alignment = Align.None; _margins = new Margins(); _rowCount = rowCount; _colCount = colCount; _representativeList = new List <RtfTableCell>(); _startNewPage = false; _titleRowCount = 0; _cellPadding = new Margins[_rowCount]; if (_rowCount < 1 || _colCount < 1) { throw new Exception("The number of rows or columns is less than 1."); } HeaderBackgroundColour = null; RowBackgroundColour = null; RowAltBackgroundColour = null; // Set cell default width according to paper width _defaultCellWidth = horizontalWidth / (float)colCount; _cells = new RtfTableCell[_rowCount][]; _rowHeight = new float[_rowCount]; _rowKeepInSamePage = new bool[_rowCount]; for (int i = 0; i < _rowCount; i++) { _cells[i] = new RtfTableCell[_colCount]; _rowHeight[i] = 0F; _rowKeepInSamePage[i] = false; _cellPadding[i] = new Margins(); for (int j = 0; j < _colCount; j++) { _cells[i][j] = new RtfTableCell(_defaultCellWidth, i, j, this); } } }
private void validateMergedCellBorder(RtfTableCell representative, Direction dir) { if (!representative.IsMerged) { throw new Exception("Invalid representative (cell is not merged)."); } Dictionary <Border, int> stat = new Dictionary <Border, int>(); Border majorityBorder; int majorityCount; int limit = (dir == Direction.Top || dir == Direction.Bottom) ? representative.MergeInfo.ColSpan : representative.MergeInfo.RowSpan; for (int i = 0; i < limit; i++) { int r, c; Border bdr; if (dir == Direction.Top || dir == Direction.Bottom) { if (dir == Direction.Top) { r = 0; } else // dir == bottom { r = representative.MergeInfo.RowSpan - 1; } c = i; } else // dir == right || left { if (dir == Direction.Right) { c = representative.MergeInfo.ColSpan - 1; } else // dir == left { c = 0; } r = i; } bdr = _cells[representative.RowIndex + r][representative.ColIndex + c].Borders[dir]; if (stat.ContainsKey(bdr)) { stat[bdr] = (int)stat[bdr] + 1; } else { stat[bdr] = 1; } } majorityCount = -1; majorityBorder = representative.Borders[dir]; foreach (KeyValuePair <Border, int> de in stat) { if (de.Value > majorityCount) { majorityCount = de.Value; majorityBorder.Style = de.Key.Style; majorityBorder.Width = de.Key.Width; majorityBorder.Color = de.Key.Color; } } }