internal bool Initialize(InitializationContext context) { Global.Tracer.Assert(m_unpopulated, "(m_unpopulated)"); if ((context.Location & Microsoft.ReportingServices.ReportPublishing.LocationFlags.InPageSection) == 0) { context.RegisterPeerScopes(this); } Global.Tracer.Assert(m_entries != null, "(null != m_entries)"); int count = m_entries.Count; bool flag = true; bool flag2 = false; SortedReportItemIndexList sortedReportItemIndexList = new SortedReportItemIndexList(count); bool result = true; for (int i = 0; i < count; i++) { ReportItem reportItem = m_entries[i]; Global.Tracer.Assert(reportItem != null, "(null != item)"); if (!reportItem.Initialize(context)) { result = false; } if (i == 0 && reportItem.Parent != null) { if ((context.Location & Microsoft.ReportingServices.ReportPublishing.LocationFlags.InTablix) != 0) { flag2 = true; } if (reportItem.Parent.HeightValue < reportItem.Parent.WidthValue) { flag = false; } } sortedReportItemIndexList.Add(m_entries, i, flag); } if (count > 1 && !flag2 && !context.PublishingContext.IsRdlx) { RegisterOverlappingItems(context, count, sortedReportItemIndexList, flag); } return(result); }
private void RegisterOverlappingItems(InitializationContext context, int count, SortedReportItemIndexList sortedTop, bool isSortedVertically) { Hashtable hashtable = new Hashtable(count); for (int i = 0; i < count - 1; i++) { int num = sortedTop[i]; double num2 = isSortedVertically ? m_entries[num].AbsoluteBottomValue : m_entries[num].AbsoluteRightValue; bool flag = true; for (int j = i + 1; j < count && flag; j++) { int num3 = sortedTop[j]; Global.Tracer.Assert(num != num3, "(currentIndex != peerIndex)"); double num4 = isSortedVertically ? m_entries[num3].AbsoluteTopValue : m_entries[num3].AbsoluteLeftValue; if (num2 > num4) { int num5 = Math.Min(num, num3); int item = Math.Max(num, num3); List <int> list = hashtable[num5] as List <int>; if (list == null) { list = new List <int>(); hashtable[num5] = list; } list.Add(item); } else { flag = false; } } } foreach (int key in hashtable.Keys) { List <int> list2 = hashtable[key] as List <int>; double num7 = isSortedVertically ? m_entries[key].AbsoluteLeftValue : m_entries[key].AbsoluteTopValue; double num8 = isSortedVertically ? m_entries[key].AbsoluteRightValue : m_entries[key].AbsoluteBottomValue; for (int k = 0; k < list2.Count; k++) { int index = list2[k]; double num9 = isSortedVertically ? m_entries[index].AbsoluteLeftValue : m_entries[index].AbsoluteTopValue; double num10 = isSortedVertically ? m_entries[index].AbsoluteRightValue : m_entries[index].AbsoluteBottomValue; if (((num9 > num7 && num9 < num8) || (num10 > num7 && num10 < num8) || (num9 <= num7 && num8 <= num10) || (num7 <= num9 && num10 <= num8)) && (m_entries[key].ObjectType != Microsoft.ReportingServices.ReportProcessing.ObjectType.CustomReportItem || ((CustomReportItem)m_entries[key]).AltReportItem != m_entries[index]) && (m_entries[index].ObjectType != Microsoft.ReportingServices.ReportProcessing.ObjectType.CustomReportItem || ((CustomReportItem)m_entries[index]).AltReportItem != m_entries[key])) { context.ErrorContext.Register(ProcessingErrorCode.rsOverlappingReportItems, Severity.Warning, m_entries[key].ObjectType, m_entries[key].Name, null, ErrorContext.GetLocalizedObjectTypeString(m_entries[index].ObjectType), m_entries[index].Name); } } } }