StimulSoftImport.BaseExt.cs 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403
  1. using System;
  2. using System.IO;
  3. using System.Xml;
  4. using System.Drawing;
  5. using System.Windows.Forms;
  6. using FastReport.Table;
  7. using FastReport.Utils;
  8. #if MSCHART
  9. using FastReport.MSChart;
  10. using FastReport.DataVisualization.Charting;
  11. #endif
  12. using FastReport.Dialog;
  13. namespace FastReport.Import.StimulSoft
  14. {
  15. /// <summary>
  16. /// Represents the StimulSoft import plugin.
  17. /// </summary>
  18. public partial class StimulSoftImport : ImportBase
  19. {
  20. partial void LoadSVGImage(ReportComponentBase parent, XmlNode xmlObject, bool useAbsTop)
  21. {
  22. var SVGObject = ComponentsFactory.CreateSVGObject(xmlObject["Name"].InnerText, parent);
  23. LoadReportComponentBase(SVGObject, xmlObject);
  24. if (parent is TableCell)
  25. {
  26. RectangleF rect = ParseRectangleF(xmlObject["ClientRectangle"].InnerText);
  27. rect.Offset(-rect.Left, -rect.Top);
  28. rect.Offset(-rect.Left + 1, -rect.Top + 1);
  29. rect.Width -= 2;
  30. rect.Height -= 2;
  31. SVGObject.Bounds = rect;
  32. }
  33. else if (useAbsTop)
  34. SetAbsTop(SVGObject, parent);
  35. if (xmlObject["Margins"] != null)
  36. SVGObject.Padding = ParseMargins(xmlObject["Margins"].InnerText);
  37. if (xmlObject["File"] != null)
  38. SVGObject.ImageLocation = xmlObject["File"].InnerText;
  39. else if (xmlObject["ImageURL"] != null)
  40. SVGObject.ImageLocation = xmlObject["ImageURL"].InnerText;
  41. }
  42. partial void LoadRichText(ReportComponentBase band, XmlNode xmlObject, bool useAbsTop)
  43. {
  44. RichObject RichObject = ComponentsFactory.CreateRichObject(xmlObject["Name"].InnerText, band);
  45. LoadReportComponentBase(RichObject, xmlObject);
  46. if (band is TableCell)
  47. {
  48. RectangleF rect = ParseRectangleF(xmlObject["ClientRectangle"].InnerText);
  49. rect.Offset(-rect.Left + 1, -rect.Top + 1);
  50. rect.Width -= 2;
  51. rect.Height -= 2;
  52. RichObject.Bounds = rect;
  53. }
  54. else if (useAbsTop)
  55. SetAbsTop(RichObject, band);
  56. if (xmlObject["Margins"] != null)
  57. RichObject.Padding = ParseMargins(xmlObject["Margins"].InnerText);
  58. if (xmlObject["Text"] != null)
  59. RichObject.Text = UnitsConverter.ConvertRTF(xmlObject["Text"].InnerText);
  60. if (xmlObject["FullConvertExpression"] != null)
  61. RichObject.ConvertRichText = UnitsConverter.ConvertBool(xmlObject["FullConvertExpression"].InnerText);
  62. }
  63. partial void LoadSparkLine(BandBase band, XmlNode xmlObject, bool useAbsTop)
  64. {
  65. #if MSCHART
  66. SparklineObject sparkline = ComponentsFactory.CreateSparklineObject(xmlObject["Name"].InnerText, band);
  67. LoadReportComponentBase(sparkline, xmlObject);
  68. if (useAbsTop)
  69. SetAbsTop(sparkline, band);
  70. if (xmlObject["ValueDataColumn"] != null)
  71. sparkline.DataSource = Report.GetDataSource(xmlObject["ValueDataColumn"].InnerText);
  72. #endif
  73. }
  74. partial void LoadChart(BandBase band, XmlNode xmlObject, bool useAbsTop)
  75. {
  76. #if MSCHART
  77. MSChartObject chart = ComponentsFactory.CreateMSChartObject(xmlObject["Name"].InnerText, band);
  78. LoadReportComponentBase(chart, xmlObject);
  79. if (useAbsTop)
  80. SetAbsTop(chart, band);
  81. if (xmlObject["DataSourceName"] != null)
  82. chart.DataSource = Report.GetDataSource(xmlObject["DataSourceName"].InnerText);
  83. Title title = new Title();
  84. chart.Chart.Titles.Add(title);
  85. if (xmlObject["Text"] != null)
  86. title.Text = xmlObject["Text"].InnerText;
  87. if (xmlObject["Font"] != null)
  88. title.Font = ParseFont(xmlObject["Font"].InnerText);
  89. ChartArea chartArea = new ChartArea("Default");
  90. chart.Chart.ChartAreas.Add(chartArea);
  91. chartArea.AxisX = new Axis();
  92. chartArea.AxisX.IsMarginVisible = false;
  93. chartArea.AxisY = new Axis();
  94. chartArea.AxisY.IsMarginVisible = false;
  95. chartArea.AxisX2 = new Axis();
  96. chartArea.AxisY2 = new Axis();
  97. chartArea.Area3DStyle.LightStyle = LightStyle.None;
  98. if (xmlObject["Area"] != null)
  99. {
  100. if (xmlObject["Area"]["Brush"] != null)
  101. chartArea.BackColor = UnitsConverter.ConvertColor(xmlObject["Area"]["Brush"].InnerText);
  102. if (xmlObject["Area"]["XAxis"] != null)
  103. LoadAxis(chartArea.AxisX, xmlObject["Area"]["XAxis"]);
  104. if (xmlObject["Area"]["YAxis"] != null)
  105. LoadAxis(chartArea.AxisY, xmlObject["Area"]["YAxis"]);
  106. if (xmlObject["Area"]["YRightAxis"] != null)
  107. LoadAxis(chartArea.AxisY2, xmlObject["Area"]["YRightAxis"]);
  108. if (xmlObject["Area"]["XTopAxis"] != null)
  109. LoadAxis(chartArea.AxisX2, xmlObject["Area"]["XTopAxis"]);
  110. }
  111. Legend legend = new Legend();
  112. chart.Chart.Legends.Add(legend);
  113. legend.IsDockedInsideChartArea = true;
  114. legend.LegendStyle = LegendStyle.Column;
  115. if (xmlObject["Legend"] != null)
  116. {
  117. if (xmlObject["Legend"]["Visible"] != null)
  118. legend.Enabled = UnitsConverter.ConvertBool(xmlObject["Legend"]["Visible"].InnerText);
  119. if (xmlObject["Legend"]["Brush"] != null)
  120. legend.BackColor = UnitsConverter.ConvertColor(xmlObject["Legend"]["Brush"].InnerText);
  121. if (xmlObject["Legend"]["Font"] != null)
  122. legend.Font = ParseFont(xmlObject["Legend"]["Font"].InnerText);
  123. if (xmlObject["Legend"]["Title"] != null)
  124. legend.Title = xmlObject["Legend"]["Title"].InnerText;
  125. if (xmlObject["Legend"]["TitleFont"] != null)
  126. legend.TitleFont = ParseFont(xmlObject["Legend"]["TitleFont"].InnerText);
  127. if (xmlObject["Legend"]["BorderColor"] != null)
  128. legend.BorderColor = UnitsConverter.ConvertColor(xmlObject["Legend"]["BorderColor"].InnerText);
  129. }
  130. foreach (XmlNode series in xmlObject["Series"])
  131. {
  132. MSChartSeries msSeries = chart.AddSeries(UnitsConverter.ConvertChartType(series.Attributes["type"].Value));
  133. if (series["ToolTipDataColumn"] != null)
  134. msSeries.SeriesSettings.ToolTip = series["ToolTipDataColumn"].InnerText;
  135. if (series["Title"] != null)
  136. msSeries.Name = series["Title"].InnerText;
  137. if (series["Brush"] != null)
  138. msSeries.SeriesSettings.Color = UnitsConverter.ConvertBrushToColor(UnitsConverter.ConvertBrush(series["Brush"].InnerText));
  139. if (series["ListOfArguments"] != null && series["ListOfValues"] != null)
  140. {
  141. string[] ListValue = series["ListOfValues"].InnerText.Split(';');
  142. string[] ListArgument = series["ListOfArguments"].InnerText.Split(';');
  143. for (int i = 0; i < ListArgument.Length; i++)
  144. {
  145. if (ListValue.Length != ListArgument.Length && ListValue.Length <= i)
  146. msSeries.AddValue(ListArgument[i], 0);
  147. else
  148. msSeries.AddValue(ListArgument[i], ListValue[i]);
  149. }
  150. }
  151. if (series["ValueDataColumn"] != null)
  152. msSeries.XValue = SwapBarackets(series["ValueDataColumn"].InnerText);
  153. if (series["ArgumentDataColumn"] != null)
  154. msSeries.YValue1 = SwapBarackets(series["ArgumentDataColumn"].InnerText);
  155. }
  156. #endif
  157. }
  158. #if MSCHART
  159. private void LoadAxis(Axis axis, XmlNode node)
  160. {
  161. if (node["LineStyle"] != null)
  162. axis.LineDashStyle = UnitsConverter.ConvertBorderChartDashStyle(node["LineStyle"].InnerText);
  163. if (node["LineColor"] != null)
  164. axis.LineColor = UnitsConverter.ConvertColor(node["LineColor"].InnerText);
  165. if (node["Title"] != null)
  166. {
  167. if (node["Title"]["Font"] != null)
  168. axis.TitleFont = ParseFont(node["Title"]["Font"].InnerText);
  169. if (node["Title"]["Color"] != null)
  170. axis.TitleForeColor = UnitsConverter.ConvertColor(node["Title"]["Color"].InnerText);
  171. }
  172. if (node["Width"] != null)
  173. axis.LineWidth = UnitsConverter.ConvertInt(node["Width"].InnerText);
  174. }
  175. #endif
  176. #if !FRCORE
  177. partial void LoadDialogPage(XmlNode node)
  178. {
  179. DialogPage page = ComponentsFactory.CreateDialogPage(Report);
  180. page.Form.Width = UnitsConverter.ConvertSize(node["Size"].InnerText).Width;
  181. page.Form.Height = UnitsConverter.ConvertSize(node["Size"].InnerText).Height + 10;
  182. page.Text = node["Text"].InnerText;
  183. LoadDialogObjects(page, node);
  184. page.Form.Scale(new SizeF(DrawUtils.ScreenDpi / 96f, DrawUtils.ScreenDpi / 96f));
  185. }
  186. private void LoadDialogObjects(Base parent, XmlNode node)
  187. {
  188. foreach (XmlNode control in node["Components"])
  189. {
  190. switch (RemovePrefix(control.Attributes["type"].Value))
  191. {
  192. case "TextBoxControl":
  193. TextBoxControl textBox = ComponentsFactory.CreateTextBoxControl(control["Name"].InnerText, parent);
  194. textBox.Multiline = true;
  195. LoadSizeAndLocation(textBox, control);
  196. break;
  197. case "LabelControl":
  198. LabelControl labelControl = ComponentsFactory.CreateLabelControl(control["Name"].InnerText, parent);
  199. labelControl.AutoSize = false;
  200. LoadSizeAndLocation(labelControl, control);
  201. labelControl.Text = control["Text"].InnerText;
  202. if (control["TextAlign"] != null)
  203. labelControl.TextAlign = UnitsConverter.ConvertContentAlignment(control["TextAlign"].InnerText);
  204. break;
  205. case "RadioButtonControl":
  206. RadioButtonControl radioButton = ComponentsFactory.CreateRadioButtonControl(control["Name"].InnerText, parent);
  207. LoadSizeAndLocation(radioButton, control);
  208. radioButton.Text = control["Text"].InnerText;
  209. if (control["Checked"] != null)
  210. radioButton.Checked = UnitsConverter.ConvertBool(control["Checked"].InnerText);
  211. break;
  212. case "DateTimePickerControl":
  213. DateTimePickerControl dateTimePickerControl = ComponentsFactory.CreateDateTimePickerControl(control["Name"].InnerText, parent);
  214. LoadSizeAndLocation(dateTimePickerControl, control);
  215. break;
  216. case "GridControl":
  217. GridControl gridControl = ComponentsFactory.CreateGridControl(control["Name"].InnerText, parent);
  218. LoadSizeAndLocation(gridControl, control);
  219. foreach (XmlNode column in control["Columns"])
  220. {
  221. GridControlColumn controlColumn = new GridControlColumn();
  222. string[] parametrs = column.InnerText.Split(',');
  223. controlColumn.DataColumn = parametrs[0];
  224. controlColumn.Visible = UnitsConverter.ConvertBool(parametrs[1]);
  225. controlColumn.Width = UnitsConverter.ConvertInt(parametrs[2]);
  226. if (UnitsConverter.ConvertInt(parametrs[2]) == 0)
  227. controlColumn.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
  228. controlColumn.HeaderText = parametrs[4];
  229. gridControl.AddChild(controlColumn);
  230. }
  231. break;
  232. case "GroupBoxControl":
  233. GroupBoxControl groupBox = ComponentsFactory.CreateGroupBoxControl(control["Name"].InnerText, parent);
  234. LoadSizeAndLocation(groupBox, control);
  235. LoadDialogObjects(groupBox, control);
  236. groupBox.Text = control["Text"].InnerText;
  237. break;
  238. case "ButtonControl":
  239. ButtonControl buttonControl = ComponentsFactory.CreateButtonControl(control["Name"].InnerText, parent);
  240. LoadSizeAndLocation(buttonControl, control);
  241. buttonControl.Text = control["Text"].InnerText;
  242. if (control["Image"] != null)
  243. {
  244. MemoryStream memoryStream = new MemoryStream();
  245. StreamWriter streamWriter = new StreamWriter(memoryStream);
  246. byte[] arrayimg = Convert.FromBase64String(control["Image"].InnerText);
  247. buttonControl.Image = ImageHelper.Load(arrayimg);
  248. streamWriter.Dispose();
  249. memoryStream.Dispose();
  250. }
  251. break;
  252. case "CheckBoxControl":
  253. CheckBoxControl checkBoxControl = ComponentsFactory.CreateCheckBoxControl(control["Name"].InnerText, parent);
  254. if (control["Checked"] != null)
  255. checkBoxControl.Checked = UnitsConverter.ConvertBool(control["Checked"].InnerText);
  256. LoadSizeAndLocation(checkBoxControl, control);
  257. checkBoxControl.Text = control["Text"].InnerText;
  258. break;
  259. case "ListBoxControl":
  260. ListBoxControl listBoxControl = ComponentsFactory.CreateListBoxControl(control["Name"].InnerText, parent);
  261. LoadSizeAndLocation(listBoxControl, control);
  262. break;
  263. case "CheckedListBoxControl":
  264. CheckedListBoxControl checkedListBoxControl = ComponentsFactory.CreateCheckedListBoxControl(control["Name"].InnerText, parent);
  265. LoadSizeAndLocation(checkedListBoxControl, control);
  266. break;
  267. case "PanelControl":
  268. PanelControl panelControl = ComponentsFactory.CreatePanelControl(control["Name"].InnerText, parent);
  269. LoadSizeAndLocation(panelControl, control);
  270. LoadDialogObjects(panelControl, control);
  271. break;
  272. case "LookUpBoxControl":
  273. ComboBoxControl comboBoxControl = ComponentsFactory.CreateComboBoxControl(control["Name"].InnerText, parent);
  274. comboBoxControl.DropDownStyle = ComboBoxStyle.DropDownList;
  275. LoadSizeAndLocation(comboBoxControl, control);
  276. comboBoxControl.Text = control["Text"].InnerText;
  277. break;
  278. case "NumericUpDownControl":
  279. NumericUpDownControl numericUpDownControl = ComponentsFactory.CreateNumericUpDownControl(control["Name"].InnerText, parent);
  280. LoadSizeAndLocation(numericUpDownControl, control);
  281. if (control["Minimum"] != null)
  282. numericUpDownControl.Minimum = (decimal)UnitsConverter.ConvertFloat(control["Minimum"].InnerText);
  283. if (control["Maximum"] != null)
  284. numericUpDownControl.Maximum = (decimal)UnitsConverter.ConvertFloat(control["Maximum"].InnerText);
  285. if (control["Value"] != null)
  286. numericUpDownControl.Value = (decimal)UnitsConverter.ConvertFloat(control["Value"].InnerText);
  287. break;
  288. case "PictureBoxControl":
  289. PictureBoxControl pictureBoxControl = ComponentsFactory.CreatePictureBoxControl(control["Name"].InnerText, parent);
  290. LoadSizeAndLocation(pictureBoxControl, control);
  291. pictureBoxControl.PictureBox.SizeMode = PictureBoxSizeMode.Zoom;
  292. if (control["Image"] != null)
  293. {
  294. MemoryStream memoryStream = new MemoryStream();
  295. StreamWriter streamWriter = new StreamWriter(memoryStream);
  296. byte[] arrayimg = Convert.FromBase64String(control["Image"].InnerText);
  297. pictureBoxControl.Image = ImageHelper.Load(arrayimg);
  298. streamWriter.Dispose();
  299. memoryStream.Dispose();
  300. }
  301. break;
  302. case "ListViewControl":
  303. ListViewControl listViewControl = ComponentsFactory.CreateListViewControl(control["Name"].InnerText, parent);
  304. LoadSizeAndLocation(listViewControl, control);
  305. break;
  306. case "RichTextBoxControl":
  307. RichTextBoxControl richTextBoxControl = ComponentsFactory.CreateRichTextBoxControl(control["Name"].InnerText, parent);
  308. LoadSizeAndLocation(richTextBoxControl, control);
  309. richTextBoxControl.RichTextBox.Rtf = UnitsConverter.ConvertRTF(control["Text"].InnerText);
  310. break;
  311. case "TreeViewControl":
  312. TreeViewControl treeViewControl = ComponentsFactory.CreateTreeViewControl(control["Name"].InnerText, parent);
  313. LoadSizeAndLocation(treeViewControl, control);
  314. break;
  315. }
  316. }
  317. }
  318. private void LoadSizeAndLocation(DialogControl control, XmlNode node)
  319. {
  320. control.Size = UnitsConverter.ConvertSize(node["Size"].InnerText);
  321. control.Location = UnitsConverter.ConvertPoint(node["Location"].InnerText);
  322. }
  323. #endif
  324. partial void LoadMap(ReportComponentBase band, XmlNode xmlObject, bool useAbsTop)
  325. {
  326. Map.MapObject map = ComponentsFactory.CreateMapObject(xmlObject["Name"].InnerText, band);
  327. LoadReportComponentBase(map, xmlObject);
  328. if (useAbsTop)
  329. SetAbsTop(map, band);
  330. }
  331. }
  332. }