本文整理汇总了C#中PurplePen.EventDB.AddCourseControl方法的典型用法代码示例。如果您正苦于以下问题:C# EventDB.AddCourseControl方法的具体用法?C# EventDB.AddCourseControl怎么用?C# EventDB.AddCourseControl使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类PurplePen.EventDB
的用法示例。
在下文中一共展示了EventDB.AddCourseControl方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: AddCourseControl
// Add a new course control to a course. Adds a new CourseControl referencing controlId into courseId. The place to insert is
// given by courseControl1 and courseControl2. These control should have been gotten by calling FindControlInsertionPoint.
public static Id<CourseControl> AddCourseControl(EventDB eventDB, Id<ControlPoint> controlId, Id<Course> courseId, Id<CourseControl> courseControl1, Id<CourseControl> courseControl2)
{
CourseControl newCourseControl;
Id<CourseControl> newCourseControlId;
// When adding a new course controls, they fit into variations fine because we are never adding or changing an split, just
// fitting into existing splits.
if (courseControl1.IsNone) {
// Adding at start.
Course course = (Course) eventDB.GetCourse(courseId).Clone();
Debug.Assert(courseControl2 == course.firstCourseControl);
newCourseControl = new CourseControl(controlId, course.firstCourseControl);
newCourseControlId = eventDB.AddCourseControl(newCourseControl);
course.firstCourseControl = newCourseControlId;
eventDB.ReplaceCourse(courseId, course);
}
else {
// Adding after courseControl1.
CourseControl before = (CourseControl) eventDB.GetCourseControl(courseControl1).Clone();
Debug.Assert(courseControl2 == before.nextCourseControl);
newCourseControl = new CourseControl(controlId, before.nextCourseControl);
newCourseControlId = eventDB.AddCourseControl(newCourseControl);
before.nextCourseControl = newCourseControlId;
eventDB.ReplaceCourseControl(courseControl1, before);
}
return newCourseControlId;
}
示例2: AddVariation
public static bool AddVariation(EventDB eventDB, CourseDesignator courseDesignator, Id<CourseControl> variationCourseControlId, bool loop, int numberOfForks)
{
if (!QueryEvent.CanAddVariation(eventDB, courseDesignator, variationCourseControlId))
return false;
CourseControl variationCourseControl = eventDB.GetCourseControl(variationCourseControlId);
CourseControl newVariationCourseControl = (CourseControl)variationCourseControl.Clone();
newVariationCourseControl.split = true;
newVariationCourseControl.loop = loop;
newVariationCourseControl.splitEnd = loop ? variationCourseControlId : variationCourseControl.nextCourseControl;
// If its a loop, we add a new course control for each loop. For a fork, we already have one leg of the fork.
int newCourseControls = loop ? numberOfForks : numberOfForks - 1;
CourseControl[] splitCourseControls = new CourseControl[newCourseControls + 1];
Id<CourseControl>[] splitCourseControlIds = new Id<CourseControl>[newCourseControls + 1];
splitCourseControls[0] = newVariationCourseControl;
splitCourseControlIds[0] = variationCourseControlId;
for (int i = 1; i <= newCourseControls; ++i) {
splitCourseControls[i] = (CourseControl) newVariationCourseControl.Clone();
if (loop)
splitCourseControls[i].nextCourseControl = variationCourseControlId;
splitCourseControlIds[i] = eventDB.AddCourseControl(splitCourseControls[i]);
}
for (int i = 0; i <= newCourseControls; ++i) {
splitCourseControls[i].splitCourseControls = splitCourseControlIds;
eventDB.ReplaceCourseControl(splitCourseControlIds[i], splitCourseControls[i]);
}
return true;
}
示例3: AddFinishToCourse
// Add a finish control to a given course. If the course already has a finish control as the last control, replace it.
// Otherwise add it as the new finish control. The returned CourseControl may be new, or may be the last control with
// a different control point.
// If addToOtherCourses is true, the new finish control is also added to all courses without an existing finish control.
public static Id<CourseControl> AddFinishToCourse(EventDB eventDB, Id<ControlPoint> controlId, Id<Course> courseId, bool addToOtherCourses)
{
Course course = eventDB.GetCourse(courseId);
Id<CourseControl> lastId = QueryEvent.LastCourseControl(eventDB, courseId, false);
Id<CourseControl> newCourseControlId;
if (lastId.IsNone) {
// No controls in the course. add this as the only control in the course.
newCourseControlId = eventDB.AddCourseControl(new CourseControl(controlId, Id<CourseControl>.None));
course = (Course) course.Clone();
course.firstCourseControl = newCourseControlId;
eventDB.ReplaceCourse(courseId, course);
}
else if (eventDB.GetControl(eventDB.GetCourseControl(lastId).control).kind == ControlPointKind.Finish) {
// Last control exists and is a finish control. Replace it.
CourseControl last = (CourseControl) eventDB.GetCourseControl(lastId).Clone();
last.control = controlId;
eventDB.ReplaceCourseControl(lastId, last);
newCourseControlId = lastId;
}
else {
// Last control exist but is not a finish. Add the finish onto it.
newCourseControlId = eventDB.AddCourseControl(new CourseControl(controlId, Id<CourseControl>.None));
CourseControl last = (CourseControl) eventDB.GetCourseControl(lastId).Clone();
last.nextCourseControl = newCourseControlId;
eventDB.ReplaceCourseControl(lastId, last);
}
if (addToOtherCourses) {
List<Id<Course>> courseModificationList = new List<Id<Course>>();
// Check all courses to see if we should add the finish to that course too.
foreach (Id<Course> courseSearchId in eventDB.AllCourseIds) {
if (!QueryEvent.HasFinishControl(eventDB, courseSearchId)) {
// This course does not have a finish control.
courseModificationList.Add(courseSearchId);
}
}
// Add the finish control to each of those courses.
foreach (Id<Course> modifyCourseId in courseModificationList)
AddFinishToCourse(eventDB, controlId, modifyCourseId, false);
}
return newCourseControlId;
}
示例4: AddStartToCourse
// Add a start control to a given course. If the course already has a start control as the first control, replace it.
// Otherwise add it as the new start control. The returned CourseControl may be new, or may be the first control with
// a different control point.
// If addToOtherCourses is true, the new start control is also added to all courses without an existing start control.
public static Id<CourseControl> AddStartToCourse(EventDB eventDB, Id<ControlPoint> controlId, Id<Course> courseId, bool addToOtherCourses)
{
Course course = eventDB.GetCourse(courseId);
Id<CourseControl> firstId = course.firstCourseControl;
Id<CourseControl> newCourseControlId;
if (firstId.IsNotNone && eventDB.GetControl(eventDB.GetCourseControl(firstId).control).kind == ControlPointKind.Start) {
// First control exists and is a start control. Replace it.
CourseControl first = (CourseControl) eventDB.GetCourseControl(firstId).Clone();
first.control = controlId;
eventDB.ReplaceCourseControl(firstId, first);
newCourseControlId = firstId;
}
else {
// Add the control as a new start control.
newCourseControlId = eventDB.AddCourseControl(new CourseControl(controlId, firstId));
course = (Course) course.Clone();
course.firstCourseControl = newCourseControlId;
eventDB.ReplaceCourse(courseId, course);
}
if (addToOtherCourses) {
List<Id<Course>> courseModificationList = new List<Id<Course>>();
// Check all courses to see if we should add the start to that course too.
foreach (Id<Course> courseSearchId in eventDB.AllCourseIds) {
if (!QueryEvent.HasStartControl(eventDB, courseSearchId)) {
// This course does not have a start control.
courseModificationList.Add(courseSearchId);
}
}
// Add the start control to each of those courses.
foreach (Id<Course> modifyCourseId in courseModificationList)
AddStartToCourse(eventDB, controlId, modifyCourseId, false);
}
return newCourseControlId;
}
示例5: DuplicateCourse
// Duplicate a course with a new name, new course controls (since course controls can't be shared),
// but all other attributes the same.
public static Id<Course> DuplicateCourse(EventDB eventDB, Id<Course> oldCourseId, string newName)
{
Course oldCourse = eventDB.GetCourse(oldCourseId);
int newSortOrder = oldCourse.sortOrder + 1;
// Update existing sort orders after by adding one to existing course orders after the new one.
foreach (Id<Course> courseToChangeId in eventDB.AllCourseIds.ToList()) {
int sortOrder = eventDB.GetCourse(courseToChangeId).sortOrder;
if (sortOrder >= newSortOrder)
ChangeCourseSortOrder(eventDB, courseToChangeId, sortOrder + 1);
}
// Duplicate the course controls with blank course controls, and record the mapping.
Dictionary<Id<CourseControl>, Id<CourseControl>> mapCourseControl = new Dictionary<Id<CourseControl>, Id<CourseControl>>();
foreach (Id<CourseControl> oldCourseControlId in QueryEvent.EnumCourseControlIds(eventDB, new CourseDesignator(oldCourseId))) {
CourseControl newCourseControl = new CourseControl();
Id<CourseControl> newCourseControlId = eventDB.AddCourseControl(newCourseControl);
mapCourseControl[oldCourseControlId] = newCourseControlId;
}
// Create a new course with no course controls in it and the new name, sort order.
Course newCourse = (Course)oldCourse.Clone();
if (oldCourse.firstCourseControl.IsNotNone)
newCourse.firstCourseControl = mapCourseControl[oldCourse.firstCourseControl];
newCourse.name = newName;
newCourse.sortOrder = newSortOrder;
Id<Course> newCourseId = eventDB.AddCourse(newCourse);
// Now copy all the old course control, updating all the linking fields.
foreach (Id<CourseControl> oldCourseControlId in QueryEvent.EnumCourseControlIds(eventDB, new CourseDesignator(oldCourseId))) {
// Add a new course control to the new course.
CourseControl oldCourseControl = eventDB.GetCourseControl(oldCourseControlId);
CourseControl newCourseControl = (CourseControl) oldCourseControl.Clone();
if (newCourseControl.nextCourseControl.IsNotNone)
newCourseControl.nextCourseControl = mapCourseControl[newCourseControl.nextCourseControl];
if (newCourseControl.splitEnd.IsNotNone)
newCourseControl.splitEnd = mapCourseControl[newCourseControl.splitEnd];
if (newCourseControl.splitCourseControls != null) {
for (int i = 0; i < newCourseControl.splitCourseControls.Length; ++i) {
newCourseControl.splitCourseControls[i] = mapCourseControl[newCourseControl.splitCourseControls[i]];
}
}
eventDB.ReplaceCourseControl(mapCourseControl[oldCourseControlId], newCourseControl);
}
// Duplicate any specials from the old course.
foreach (Id<Special> specialId in eventDB.AllSpecialIds.ToList()) {
Special special = eventDB.GetSpecial(specialId);
if (!special.allCourses) {
List<CourseDesignator> addedCourseDesignators = new List<CourseDesignator>();
foreach (CourseDesignator designatorWithSpecial in special.courses) {
if (designatorWithSpecial.CourseId == oldCourseId) {
if (designatorWithSpecial.AllParts)
addedCourseDesignators.Add(new CourseDesignator(newCourseId));
else
addedCourseDesignators.Add(new CourseDesignator(newCourseId, designatorWithSpecial.Part));
}
}
if (addedCourseDesignators.Count > 0) {
ChangeDisplayedCourses(eventDB, specialId, special.courses.Concat(addedCourseDesignators).ToArray());
}
}
}
return newCourseId;
}