void UpdateCourseViews()
{
List<KeyValuePair<Id<Course>,string>> courseViewPairs = new List<KeyValuePair<Id<Course>,string>>(); // Holds the list of course views and names, for sorting. Does NOT include all controls.
// Get all the pairs of course ids in sorted order.
Id<Course>[] courseIds = QueryEvent.SortedCourseIds(eventDB);
// Copy to the names and ids arrays, adding in All Controls as the first element.
courseViewNames = new string[courseIds.Length + 1];
courseViewIds = new Id<Course>[courseIds.Length + 1];
courseViewNames[0] = MiscText.AllControls;
courseViewIds[0] = Id<Course>.None;
for (int i = 1; i < courseViewIds.Length; ++i) {
courseViewNames[i] = eventDB.GetCourse(courseIds[i - 1]).name;
courseViewIds[i] = courseIds[i-1];
}
// Figure out which course view is the active one. We have already validate that the active course id
// is present.
if (activeCourseDesignator.IsAllControls) {
activeCourseViewIndex = 0;
activeCourseView = CourseView.CreateViewingCourseView(eventDB, CourseDesignator.AllControls);
}
else {
for (int i = 1; i < courseViewIds.Length; ++i) {
if (courseViewIds[i] == activeCourseDesignator.CourseId) {
activeCourseViewIndex = i;
activeCourseView = CourseView.CreateViewingCourseView(eventDB, activeCourseDesignator);
}
}
}
// Get/create the topology course view. Not supported (null) for score and all controls. Always shows
// all variations for a course with variations.
if (activeCourseView.Kind == CourseView.CourseViewKind.Normal) {
if (QueryEvent.HasVariations(activeCourseView.EventDB, activeCourseView.BaseCourseId) || !activeCourseView.CourseDesignator.AllParts) {
topologyCourseView = CourseView.CreateViewingCourseView(eventDB, new CourseDesignator(activeCourseView.BaseCourseId));
}
else {
topologyCourseView = activeCourseView;
}
}
else if (activeCourseView.Kind == CourseView.CourseViewKind.AllVariations) {
topologyCourseView = activeCourseView;
}
else {
topologyCourseView = null;
}
}