DescriptionControl.Mono.cs 3.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. using System;
  2. using System.Windows.Forms;
  3. using System.Drawing;
  4. using System.Reflection;
  5. using FastReport.Data;
  6. using FastReport.Utils;
  7. using FastReport.Editor.Syntax.Parsers;
  8. namespace FastReport.Controls
  9. {
  10. internal class DescriptionControl : Panel
  11. {
  12. private Panel pnDescription;
  13. private Report txReport;
  14. private TextObject txDescription;
  15. private void RecalcDescriptionSize()
  16. {
  17. txDescription.Width = (Width - this.LogicalToDevice(20)) * 96f / this.Dpi();
  18. var height = txDescription.CalcHeight();
  19. pnDescription.Size = new Size(Width - this.LogicalToDevice(20), (int)this.LogicalToDevice(height));
  20. pnDescription.Refresh();
  21. }
  22. protected override void OnSizeChanged(EventArgs e)
  23. {
  24. base.OnSizeChanged(e);
  25. RecalcDescriptionSize();
  26. }
  27. public void ShowDescription(Report report, object info)
  28. {
  29. string descr = "";
  30. if (info is SystemVariable)
  31. {
  32. descr = "<b>" + (info as SystemVariable).Name + "</b>";
  33. descr += "<br/><br/>" + ReflectionRepository.DescriptionHelper.GetDescription(info.GetType());
  34. }
  35. else if (info is MethodInfo)
  36. {
  37. descr = report.CodeHelper.GetMethodSignature(info as MethodInfo, true);
  38. descr += "<br/><br/>" + ReflectionRepository.DescriptionHelper.GetDescription(info as MethodInfo);
  39. foreach (ParameterInfo parInfo in (info as MethodInfo).GetParameters())
  40. {
  41. // special case - skip "thisReport" parameter
  42. if (parInfo.Name == "thisReport")
  43. continue;
  44. string s = ReflectionRepository.DescriptionHelper.GetDescription(parInfo);
  45. s = s.Replace("<b>", "{i}").Replace("</b>:", "{/i}").Replace("&", "&amp;").Replace("<", "&lt;").Replace(">", "&gt;").Replace("{i}", "<i>").Replace("{/i}", "</i>");
  46. descr += "<br/><br/>" + s;
  47. }
  48. }
  49. descr = descr.Replace("\t", "<br/>");
  50. txDescription.Text = descr;
  51. RecalcDescriptionSize();
  52. pnDescription.Refresh();
  53. }
  54. private void pnDescription_Paint(object sender, PaintEventArgs e)
  55. {
  56. #if AVALONIA
  57. e.Graphics.FontScale = 1;
  58. #endif
  59. e.Graphics.FillRectangle(SystemBrushes.Window, new Rectangle(0, 0, pnDescription.Width, pnDescription.Height));
  60. txDescription.Width = pnDescription.Width * 96f / this.Dpi();
  61. txDescription.Height = pnDescription.Height * 96f / this.Dpi();
  62. txDescription.DrawText(new FRPaintEventArgs(e.Graphics, this.DpiMultiplier(), this.DpiMultiplier(), txDescription.Report.GraphicCache));
  63. }
  64. protected override void Dispose(bool disposing)
  65. {
  66. base.Dispose(disposing);
  67. txDescription.Dispose();
  68. txReport.Dispose();
  69. }
  70. public DescriptionControl()
  71. {
  72. pnDescription = new Panel();
  73. pnDescription.Padding = new Padding(2, 2, 2, 0);
  74. pnDescription.Paint += pnDescription_Paint;
  75. txReport = new Report();
  76. txDescription = new TextObject();
  77. txDescription.SetReport(txReport);
  78. txDescription.TextRenderType = TextRenderType.HtmlTags;
  79. txDescription.Font = DrawUtils.DefaultFont;
  80. Controls.Add(pnDescription);
  81. AutoScroll = true;
  82. BackColor = SystemColors.Window;
  83. }
  84. }
  85. }