Example #1
0
 /// <summary>
 /// Add a row summary. It's a row without columns
 /// </summary>
 /// <param name="text">Row text</param>
 /// <param name="width">Row width</param>
 /// <param name="paddingLeft">Simulate a padding left</param>
 /// <returns>Return a row summary</returns>
 public RowSummary AddRowSummary(string text, int width = 0, int paddingLeft = 0)
 {
     var row = new RowSummary()
     {
         Text = text,
         Width = width,
         PaddingLeft = paddingLeft
     };
     this.Rows.Add(row);
     return row;
 }
Example #2
0
        private void ChunkRows(List <IRow> rows)
        {
            var rowsSummaries = Rows.Where(f => f.GetType() == typeof(RowSummary)).Cast <RowSummary>().ToList();

            foreach (var summary in rowsSummaries)
            {
                var newsLines = this.ChunksWords(summary.Text, summary.Width);
                if (newsLines.Count() > 1)
                {
                    var newRowsForThisRow = new List <RowSummary>();
                    foreach (var newLine in newsLines)
                    {
                        var rowAdd = new RowSummary();
                        rowAdd.Width       = summary.Width;
                        rowAdd.PaddingLeft = summary.PaddingLeft;
                        rowAdd.Text        = newLine;
                        newRowsForThisRow.Add(rowAdd);
                    }

                    var index = rows.IndexOf(summary);
                    rows.Remove(summary);
                    rows.InsertRange(index, newRowsForThisRow);
                }
            }

            var rowsNormal = rows.Where(f => f.GetType() == typeof(Row)).Cast <Row>().ToList();

            foreach (var row in rowsNormal)
            {
                var newRowsForThisRow = new List <Row>();
                var indexColumn       = 0;
                foreach (var column in row.Columns)
                {
                    var definition = this.ColumnsDefinition[indexColumn];
                    //column.Text = column.Text != null ? column.Text.TrimEnd('\r', '\n') : null;

                    var newsLines = this.ChunksWords(column.Text, definition.Width).ToArray();

                    if (newsLines.Length > 1)
                    {
                        var indexNewRow = 0;
                        foreach (var newLine in newsLines)
                        {
                            Row rowNew = newRowsForThisRow.ElementAtOrDefault(indexNewRow);
                            if (rowNew == null)
                            {
                                rowNew           = new Row();
                                rowNew.IsMainRow = indexNewRow == 0 ? true : false;
                                foreach (var columnCopy in row.Columns)
                                {
                                    if (rowNew.IsMainRow && columnCopy != column)
                                    {
                                        rowNew.AddColumnInRow(columnCopy.Text);
                                    }
                                    else if (columnCopy == column)
                                    {
                                        rowNew.AddColumnInRow(newLine);
                                    }
                                    else
                                    {
                                        rowNew.AddColumnInRow("");
                                    }
                                }

                                newRowsForThisRow.Add(rowNew);
                            }
                            else
                            {
                                rowNew.Columns[indexColumn].Text = newLine;
                            }

                            indexNewRow++;
                        }
                    }

                    indexColumn++;
                }

                if (newRowsForThisRow.Any())
                {
                    var index = rows.IndexOf(row);
                    rows.Remove(row);
                    rows.InsertRange(index, newRowsForThisRow);
                }
            }
        }