using System; using System.Windows.Forms; using System.Drawing; using System.Reflection; using System.ComponentModel; using FastReport.Data; using FastReport.Utils; #if !MONO using FastReport.DevComponents.DotNetBar; #endif using FastReport.Editor.Syntax.Parsers; namespace FastReport.Controls { #if !DEBUG [DesignTimeVisible(false)] #endif internal class DescriptionControl : Panel { #if !MONO private LabelX lblDescription; #else private Panel pnDescription; private Report txReport; private TextObject txDescription; #endif private void RecalcDescriptionSize() { #if !MONO // 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; } #else txDescription.Width = Width - 20; pnDescription.Size = new Size(Width - 20, (int)txDescription.CalcHeight()); pnDescription.Refresh(); #endif } 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", "
"); #if !MONO lblDescription.Text = descr; RecalcDescriptionSize(); #else txDescription.Text = descr; RecalcDescriptionSize(); pnDescription.Refresh(); #endif } #if MONO private void pnDescription_Paint(object sender, PaintEventArgs e) { e.Graphics.FillRectangle(SystemBrushes.Window, new Rectangle(0, 0, pnDescription.Width, pnDescription.Height)); txDescription.Width = pnDescription.Width; txDescription.Height = pnDescription.Height; txDescription.DrawText(new FRPaintEventArgs(e.Graphics, 1, 1, txDescription.Report.GraphicCache)); } protected override void Dispose(bool disposing) { base.Dispose(disposing); txDescription.Dispose(); txReport.Dispose(); } #endif public DescriptionControl() { #if !MONO 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; #else 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; Controls.Add(pnDescription); #endif AutoScroll = true; BackColor = SystemColors.Window; } } }