using FastReport.Table; using System; using System.Collections.Generic; using System.Linq.Expressions; namespace FastReport.Engine { partial class ReportEngine { private void InitializePages() { for (int i = 0; i < Report.Pages.Count; i++) { ReportPage page = Report.Pages[i] as ReportPage; if (page != null) { PreparedPages.AddSourcePage(page); } } } /// /// Translate RichObject to series of ReportComponentBase objects /// /// internal float Translate_Rich(RichObject rich) { BandBase parentBand = rich.Parent as BandBase; float height = 0; bool isRich = rich.Text.StartsWith(@"{\rtf"); if (rich.localVisibleStorage && rich.ConvertRichText) { height = rich.Convert2ReportObjects(); } return height; } private void TranslateTableObject(TableBase table) { foreach (Base obj in table.AllObjects) { if (obj is RichObject) { RichObject rich = obj as RichObject; if (rich.Visible && rich.ConvertRichText) { float height = rich.Convert2ReportObjects(); TableCell cell = rich.Parent as TableCell; foreach (ComponentBase trnslated_ojbect in rich.TransltedObjects) { trnslated_ojbect.Parent = cell; } rich.Visible = false; } } } } /// /// This code splits RichObject to report objects /// /// public void TranslateObjects(BandBase parentBand) { int originalObjectsCount = parentBand.Objects.Count; float shift = 0; for (int i = 0; i < originalObjectsCount; i++) { ComponentBase obj = parentBand.Objects[i]; obj.Top += shift; if (obj is RichObject) { bool useVisibleExpression = !String.IsNullOrEmpty(obj.VisibleExpression); RichObject rich = obj as RichObject; if (rich.ConvertRichText) { if(useVisibleExpression) { obj.Visible = (bool) Report.Calc(Code.CodeUtils.FixExpressionWithBrackets(obj.VisibleExpression)); if (!obj.Visible) continue; } Translate_Rich(rich); rich.SecondStageTranslation(); if (useVisibleExpression) rich.FlagPreviewVisible = false; } } if (obj is TableObject) { TranslateTableObject(obj as TableBase); } } } internal void RestoreRich(RichObject rich) { BandBase parentBand = rich.Parent as BandBase; foreach (ComponentBase obj in rich.TransltedObjects) { if (parentBand != null) { parentBand.RemoveChild(obj); parentBand.Objects.Remove(obj); } else if (rich.Parent is TableCell) { TableCell cell = rich.Parent as TableCell; cell.RemoveChild(obj); cell.Objects.Remove(obj); } obj.SetParent(null); } rich.TransltedObjects.Clear(); } } }