using System;
using System.Windows.Forms;
using System.Drawing;
using System.Reflection;
using FastReport.Data;
using FastReport.DevComponents.DotNetBar;
using FastReport.Editor.Syntax.Parsers;
namespace FastReport.Controls
{
internal class DescriptionControl : Panel
{
private LabelX lblDescription;
private void RecalcDescriptionSize()
{
// hack to force GetPreferredSize do the work
lblDescription.UseMnemonic = false;
int maxWidth = Width - SystemInformation.VerticalScrollBarWidth - 8;
Size preferredSize = lblDescription.GetPreferredSize(new Size(maxWidth, 0));
lblDescription.Size = preferredSize;
if (RightToLeft == RightToLeft.Yes)
{
lblDescription.Left = preferredSize.Height > Height ? maxWidth - preferredSize.Width + 8 : Width - preferredSize.Width;
}
}
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", "
");
lblDescription.Text = descr;
RecalcDescriptionSize();
}
public DescriptionControl()
{
lblDescription = new LabelX();
lblDescription.AntiAlias = false;
lblDescription.PaddingLeft = 2;
lblDescription.PaddingRight = 2;
lblDescription.PaddingTop = 2;
lblDescription.TextLineAlignment = StringAlignment.Near;
lblDescription.UseMnemonic = false;
lblDescription.WordWrap = true;
Controls.Add(lblDescription);
lblDescription.BackColor = SystemColors.Window;
AutoScroll = true;
BackColor = SystemColors.Window;
}
}
}