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; } } }