void WriteControlLoadSection(EventDB eventDB)
{
List<ControlLoadInfo> loadInfos = new List<ControlLoadInfo>();
// Get load information about each control.
foreach (Id<ControlPoint> controlId in eventDB.AllControlPointIds) {
ControlPoint control = eventDB.GetControl(controlId);
if (control.kind != ControlPointKind.Normal)
continue; // only list normal controls.
ControlLoadInfo loadInfo = new ControlLoadInfo();
loadInfo.controlId = controlId;
loadInfo.controlName = Util.ControlPointName(eventDB, controlId, NameStyle.Medium);
loadInfo.numCourses = QueryEvent.CoursesUsingControl(eventDB, controlId).Length;
loadInfo.load = QueryEvent.GetControlLoad(eventDB, controlId);
loadInfos.Add(loadInfo);
}
// Sort the load information, first by load, then by number of courses, then by name.
loadInfos.Sort(delegate(ControlLoadInfo loadInfo1, ControlLoadInfo loadInfo2) {
if (loadInfo1.load < loadInfo2.load) return 1;
else if (loadInfo1.load > loadInfo2.load) return -1;
if (loadInfo1.numCourses < loadInfo2.numCourses) return 1;
else if (loadInfo1.numCourses > loadInfo2.numCourses) return -1;
int result = Util.CompareCodes(loadInfo1.controlName, loadInfo2.controlName);
if (result != 0)
return result;
return loadInfo1.controlId.id.CompareTo(loadInfo2.controlId.id);
});
// Write the table.
BeginTable("", 3, "leftalign", "rightalign", "rightalign");
WriteTableHeaderRow(ReportText.ColumnHeader_Control, ReportText.ColumnHeader_NumberOfCourses, ReportText.ColumnHeader_Load);
foreach (ControlLoadInfo loadInfo in loadInfos) {
WriteTableRow(loadInfo.controlName,
Convert.ToString(loadInfo.numCourses),
loadInfo.load >= 0 ? Convert.ToString(loadInfo.load) : "");
}
EndTable();
}