using System;
using System.Windows.Forms;
using System.Drawing;
using System.Reflection;
using FastReport.Data;
using FastReport.Utils;
using FastReport.Editor.Syntax.Parsers;
namespace FastReport.Controls
{
internal class DescriptionControl : Panel
{
private Panel pnDescription;
private Report txReport;
private TextObject txDescription;
private void RecalcDescriptionSize()
{
txDescription.Width = (Width - this.LogicalToDevice(20)) * 96f / this.Dpi();
var height = txDescription.CalcHeight();
pnDescription.Size = new Size(Width - this.LogicalToDevice(20), (int)this.LogicalToDevice(height));
pnDescription.Refresh();
}
protected override void OnSizeChanged(EventArgs e)
{
base.OnSizeChanged(e);
RecalcDescriptionSize();
}
public void ShowDescription(Report report, object info)
{
string descr = "";
if (info is SystemVariable)
{
descr = "" + (info as SystemVariable).Name + "";
descr += "
" + ReflectionRepository.DescriptionHelper.GetDescription(info.GetType());
}
else if (info is MethodInfo)
{
descr = report.CodeHelper.GetMethodSignature(info as MethodInfo, true);
descr += "
" + ReflectionRepository.DescriptionHelper.GetDescription(info as MethodInfo);
foreach (ParameterInfo parInfo in (info as MethodInfo).GetParameters())
{
// special case - skip "thisReport" parameter
if (parInfo.Name == "thisReport")
continue;
string s = ReflectionRepository.DescriptionHelper.GetDescription(parInfo);
s = s.Replace("", "{i}").Replace(":", "{/i}").Replace("&", "&").Replace("<", "<").Replace(">", ">").Replace("{i}", "").Replace("{/i}", "");
descr += "
" + s;
}
}
descr = descr.Replace("\t", "
");
txDescription.Text = descr;
RecalcDescriptionSize();
pnDescription.Refresh();
}
private void pnDescription_Paint(object sender, PaintEventArgs e)
{
#if AVALONIA
e.Graphics.FontScale = 1;
#endif
e.Graphics.FillRectangle(SystemBrushes.Window, new Rectangle(0, 0, pnDescription.Width, pnDescription.Height));
txDescription.Width = pnDescription.Width * 96f / this.Dpi();
txDescription.Height = pnDescription.Height * 96f / this.Dpi();
txDescription.DrawText(new FRPaintEventArgs(e.Graphics, this.DpiMultiplier(), this.DpiMultiplier(), txDescription.Report.GraphicCache));
}
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
txDescription.Dispose();
txReport.Dispose();
}
public DescriptionControl()
{
pnDescription = new Panel();
pnDescription.Padding = new Padding(2, 2, 2, 0);
pnDescription.Paint += pnDescription_Paint;
txReport = new Report();
txDescription = new TextObject();
txDescription.SetReport(txReport);
txDescription.TextRenderType = TextRenderType.HtmlTags;
txDescription.Font = DrawUtils.DefaultFont;
Controls.Add(pnDescription);
AutoScroll = true;
BackColor = SystemColors.Window;
}
}
}