/// <summary> /// fügt dem TimelineEntry ein fertiges TimelineEvent an der richtigen Stelle hinzu /// </summary> /// <param name="eventToAdd">TimelineEvent welches eingefügt werden soll</param> /// <param name="addBlockingEntries">Flag whether to add TimelineBlockingEvents to all other signals in this signal group which have interim times with each other.</param> /// <param name="adjustSurroundingEvents">Flag whether to adjust the times of the surrounding events to not overlap the created event. Will delete completely overlapped events.</param> public void AddEvent(TimelineEvent eventToAdd, bool addBlockingEntries, bool adjustSurroundingEvents) { if (events.Count != 0) { LinkedListNode <TimelineEvent> ln = events.First; while (ln != null && ln.Value.eventTime + ln.Value.eventLength < eventToAdd.eventTime) { ln = ln.Next; } if (ln == null) { events.AddLast(eventToAdd); } else { if (eventToAdd.eventTime + eventToAdd.eventLength > ln.Value.eventTime) { if (adjustSurroundingEvents) { events.AddBefore(ln, eventToAdd); AdjustSurroundingEvents(eventToAdd); } else { Exception e = new Exception("TimelineEvents überlappen sich"); throw e; } } else { events.AddBefore(ln, eventToAdd); } } } else { events.AddFirst(eventToAdd); } // add blocking entries if (addBlockingEntries) { List <Pair <TimelineEntry, double> > interimTimes = parentGroup.GetInterimTimes(this); if (interimTimes != null) { foreach (Pair <TimelineEntry, double> p in interimTimes) { double startTime = eventToAdd.eventTime + (Math.Floor(p.Right * 2) / 2); TimelineEvent blockingEvent = new TimelineBlockingEvent(eventToAdd, p.Right, 1, 2); p.Left.AddEvent(blockingEvent, false, true); } } } eventToAdd.EventTimesChanged += new TimelineEvent.EventTimesChangedEventHandler(events_EventTimesChanged); OnEntryChanged(new EntryChangedEventArgs(this)); }
/// <summary> /// fügt dem TimelineEntry ein fertiges TimelineEvent an der richtigen Stelle hinzu /// </summary> /// <param name="eventToAdd">TimelineEvent welches eingefügt werden soll</param> /// <param name="addBlockingEntries">Flag whether to add TimelineBlockingEvents to all other signals in this signal group which have interim times with each other.</param> /// <param name="adjustSurroundingEvents">Flag whether to adjust the times of the surrounding events to not overlap the created event. Will delete completely overlapped events.</param> public void AddEvent(TimelineEvent eventToAdd, bool addBlockingEntries, bool adjustSurroundingEvents) { if (events.Count != 0) { LinkedListNode<TimelineEvent> ln = events.First; while (ln != null && ln.Value.eventTime + ln.Value.eventLength < eventToAdd.eventTime) { ln = ln.Next; } if (ln == null) { events.AddLast(eventToAdd); } else { if (eventToAdd.eventTime + eventToAdd.eventLength > ln.Value.eventTime) { if (adjustSurroundingEvents) { events.AddBefore(ln, eventToAdd); AdjustSurroundingEvents(eventToAdd); } else { Exception e = new Exception("TimelineEvents überlappen sich"); throw e; } } else { events.AddBefore(ln, eventToAdd); } } } else { events.AddFirst(eventToAdd); } // add blocking entries if (addBlockingEntries) { List<Pair<TimelineEntry, double>> interimTimes = parentGroup.GetInterimTimes(this); if (interimTimes != null) { foreach (Pair<TimelineEntry, double> p in interimTimes) { double startTime = eventToAdd.eventTime + (Math.Floor(p.Right * 2) / 2); TimelineEvent blockingEvent = new TimelineBlockingEvent(eventToAdd, p.Right, 1, 2); p.Left.AddEvent(blockingEvent, false, true); } } } eventToAdd.EventTimesChanged += new TimelineEvent.EventTimesChangedEventHandler(events_EventTimesChanged); OnEntryChanged(new EntryChangedEventArgs(this)); }