RTF_TableRow.cs 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. namespace FastReport.RichTextParser
  5. {
  6. /// <summary>
  7. /// This class represents a RTF column description.
  8. /// </summary>
  9. ///
  10. class RTF_Column
  11. {
  12. private Column column;
  13. private RTF_BorderLine_Parser border_parser = new RichTextParser.RTF_BorderLine_Parser();
  14. enum CurrentSide { None, Top, Left, Bottom, Right }
  15. private CurrentSide side = CurrentSide.None;
  16. public Column Column { get { return column; } }
  17. internal bool Parse(RTF_Parser parser, RTF_Header header)
  18. {
  19. bool parsed = false;
  20. if (side != CurrentSide.None)
  21. parsed = border_parser.Parse(parser, header);
  22. if (parsed == false)
  23. {
  24. switch (side)
  25. {
  26. case CurrentSide.Top:
  27. column.border_top = border_parser.line;
  28. break;
  29. case CurrentSide.Left:
  30. column.border_left = border_parser.line;
  31. break;
  32. case CurrentSide.Bottom:
  33. column.border_bottom = border_parser.line;
  34. break;
  35. case CurrentSide.Right:
  36. column.border_right = border_parser.line;
  37. break;
  38. }
  39. side = CurrentSide.None;
  40. parsed = true;
  41. switch (parser.Control)
  42. {
  43. case "clcbpat":
  44. {
  45. int cidx = (int)parser.Number;
  46. if (cidx > 0)
  47. --cidx;
  48. column.back_color = header.Document.color_list[cidx];
  49. }
  50. break;
  51. case "clvertalt":
  52. column.valign = Column.VertAlign.Top;
  53. parser.current_paragraph_format.Valign = ParagraphFormat.VerticalAlign.Top;
  54. break;
  55. case "clvertalc":
  56. column.valign = Column.VertAlign.Center;
  57. parser.current_paragraph_format.Valign = ParagraphFormat.VerticalAlign.Center;
  58. break;
  59. case "clvertalb":
  60. column.valign = Column.VertAlign.Bottom;
  61. parser.current_paragraph_format.Valign = ParagraphFormat.VerticalAlign.Bottom;
  62. break;
  63. case "cltxlrtb":
  64. // Ignore default text in a cell flows
  65. break;
  66. case "clbrdrt":
  67. side = CurrentSide.Top;
  68. border_parser.Clear();
  69. break;
  70. case "clbrdrl":
  71. side = CurrentSide.Left;
  72. border_parser.Clear();
  73. break;
  74. case "clbrdrb":
  75. side = CurrentSide.Bottom;
  76. border_parser.Clear();
  77. break;
  78. case "clbrdrr":
  79. side = CurrentSide.Right;
  80. border_parser.Clear();
  81. break;
  82. case "clvmgf":
  83. column.verticallY_merged = true;
  84. break;
  85. case "clmgf":
  86. column.horizontally_merged = true;
  87. break;
  88. default:
  89. parsed = false;
  90. break;
  91. }
  92. }
  93. return parsed;
  94. }
  95. internal void SetWidth(uint w)
  96. {
  97. column.Width = w;
  98. }
  99. internal RTF_Column()
  100. {
  101. column = new Column();
  102. column.back_color = System.Drawing.Color.Transparent;
  103. }
  104. }
  105. internal class RTF_Row : RTF_CommonRichElement
  106. {
  107. private RTF_SequenceParser sequence;
  108. private TableRow parsing_row;
  109. public TableRow Row { get { return parsing_row; } }
  110. internal override RichObject RichObject
  111. {
  112. get
  113. {
  114. RichObject rich = new RichObject();
  115. rich.type = RichObject.Type.Table;
  116. rich.table = sequence.CurrentTable;
  117. rich.size = sequence.CurrentTable.size;
  118. return rich;
  119. }
  120. }
  121. internal override bool Parse(RTF_Parser parser, RTF_Header header)
  122. {
  123. bool parsed = true;
  124. {
  125. switch (parser.Control)
  126. {
  127. case "trrh":
  128. parsing_row.height = (int)parser.Number;
  129. break;
  130. case "trgaph":
  131. parsing_row.trgaph = (uint)parser.Number;
  132. break;
  133. case "trpaddl":
  134. parsing_row.default_pad_left = (int)parser.Number;
  135. break;
  136. case "trpaddr":
  137. parsing_row.default_pad_right = (int)parser.Number;
  138. break;
  139. default:
  140. parsed = false;
  141. break;
  142. }
  143. }
  144. return parsed;
  145. }
  146. internal void AddCell(RichObjectSequence curr_par)
  147. {
  148. parsing_row.cells.Add(curr_par);
  149. }
  150. /// <summary>
  151. /// Create RTF row
  152. /// </summary>
  153. /// <param name="parent_sequence"></param>
  154. ///
  155. internal RTF_Row(RTF_SequenceParser parent_sequence)
  156. {
  157. sequence = parent_sequence;
  158. parsing_row.cells = new List<RichObjectSequence>();
  159. }
  160. }
  161. }