DescriptionControl.cs 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. using System;
  2. using System.Windows.Forms;
  3. using System.Drawing;
  4. using System.Reflection;
  5. using System.ComponentModel;
  6. using FastReport.Data;
  7. using FastReport.Utils;
  8. #if !MONO
  9. using FastReport.DevComponents.DotNetBar;
  10. #endif
  11. using FastReport.Editor.Syntax.Parsers;
  12. namespace FastReport.Controls
  13. {
  14. #if !DEBUG
  15. [DesignTimeVisible(false)]
  16. #endif
  17. internal class DescriptionControl : Panel
  18. {
  19. #if !MONO
  20. private LabelX lblDescription;
  21. #else
  22. private Panel pnDescription;
  23. private Report txReport;
  24. private TextObject txDescription;
  25. #endif
  26. private void RecalcDescriptionSize()
  27. {
  28. #if !MONO
  29. // hack to force GetPreferredSize do the work
  30. lblDescription.UseMnemonic = false;
  31. int maxWidth = Width - SystemInformation.VerticalScrollBarWidth - 8;
  32. Size preferredSize = lblDescription.GetPreferredSize(new Size(maxWidth, 0));
  33. lblDescription.Size = preferredSize;
  34. if (RightToLeft == RightToLeft.Yes)
  35. {
  36. lblDescription.Left = preferredSize.Height > Height ? maxWidth - preferredSize.Width + 8 : Width - preferredSize.Width;
  37. }
  38. #else
  39. txDescription.Width = Width - 20;
  40. pnDescription.Size = new Size(Width - 20, (int)txDescription.CalcHeight());
  41. pnDescription.Refresh();
  42. #endif
  43. }
  44. protected override void OnSizeChanged(EventArgs e)
  45. {
  46. base.OnSizeChanged(e);
  47. RecalcDescriptionSize();
  48. }
  49. public void ShowDescription(Report report, object info)
  50. {
  51. string descr = "";
  52. if (info is SystemVariable)
  53. {
  54. descr = "<b>" + (info as SystemVariable).Name + "</b>";
  55. descr += "<br/><br/>" + ReflectionRepository.DescriptionHelper.GetDescription(info.GetType());
  56. }
  57. else if (info is MethodInfo)
  58. {
  59. descr = report.CodeHelper.GetMethodSignature(info as MethodInfo, true);
  60. descr += "<br/><br/>" + ReflectionRepository.DescriptionHelper.GetDescription(info as MethodInfo);
  61. foreach (ParameterInfo parInfo in (info as MethodInfo).GetParameters())
  62. {
  63. // special case - skip "thisReport" parameter
  64. if (parInfo.Name == "thisReport")
  65. continue;
  66. string s = ReflectionRepository.DescriptionHelper.GetDescription(parInfo);
  67. s = s.Replace("<b>", "{i}").Replace("</b>:", "{/i}").Replace("&", "&amp;").Replace("<", "&lt;").Replace(">", "&gt;").Replace("{i}", "<i>").Replace("{/i}", "</i>");
  68. descr += "<br/><br/>" + s;
  69. }
  70. }
  71. descr = descr.Replace("\t", "<br/>");
  72. #if !MONO
  73. lblDescription.Text = descr;
  74. RecalcDescriptionSize();
  75. #else
  76. txDescription.Text = descr;
  77. RecalcDescriptionSize();
  78. pnDescription.Refresh();
  79. #endif
  80. }
  81. #if MONO
  82. private void pnDescription_Paint(object sender, PaintEventArgs e)
  83. {
  84. e.Graphics.FillRectangle(SystemBrushes.Window, new Rectangle(0, 0, pnDescription.Width, pnDescription.Height));
  85. txDescription.Width = pnDescription.Width;
  86. txDescription.Height = pnDescription.Height;
  87. txDescription.DrawText(new FRPaintEventArgs(e.Graphics, 1, 1, txDescription.Report.GraphicCache));
  88. }
  89. protected override void Dispose(bool disposing)
  90. {
  91. base.Dispose(disposing);
  92. txDescription.Dispose();
  93. txReport.Dispose();
  94. }
  95. #endif
  96. public DescriptionControl()
  97. {
  98. #if !MONO
  99. lblDescription = new LabelX();
  100. lblDescription.AntiAlias = false;
  101. lblDescription.PaddingLeft = 2;
  102. lblDescription.PaddingRight = 2;
  103. lblDescription.PaddingTop = 2;
  104. lblDescription.TextLineAlignment = StringAlignment.Near;
  105. lblDescription.UseMnemonic = false;
  106. lblDescription.WordWrap = true;
  107. Controls.Add(lblDescription);
  108. lblDescription.BackColor = SystemColors.Window;
  109. #else
  110. pnDescription = new Panel();
  111. pnDescription.Padding = new Padding(2, 2, 2, 0);
  112. pnDescription.Paint += pnDescription_Paint;
  113. txReport = new Report();
  114. txDescription = new TextObject();
  115. txDescription.SetReport(txReport);
  116. txDescription.TextRenderType = TextRenderType.HtmlTags;
  117. Controls.Add(pnDescription);
  118. #endif
  119. AutoScroll = true;
  120. BackColor = SystemColors.Window;
  121. }
  122. }
  123. }