/// /// <summary> /// Display all visible events and remove all invisible for current visible time window /// In quick mode we only reposition events which are already displayed.</summary> /// public long DisplayEventsImpl( bool refreshVisibleOnly = false, bool animate = false ) { DateTime begin; DateTime end; double distance; double left; TimelineDisplayEvent pos; double viewSize = 0; bool isNew = false; IEnumerable <TimelineEvent> events; Dictionary <TimelineEvent, object> newVisibleEvents; object visual; long start; double oldViewSize; int i = 0; CompleteEventAnimation(); if (animate) { m_eventStoryboard = new Storyboard(); } start = DateTime.Now.Millisecond; oldViewSize = m_viewSize; if (m_timeline.IsValidIndex(m_startIndex)) { begin = m_timeline.GetFloorTime(m_timeline[m_startIndex]); } else { begin = DateTime.MinValue; } if (m_timeline.IsValidIndex(m_startIndex + m_columnCount + EXTRA_COLUMNS)) { end = m_timeline.GetCeilingTime(m_timeline[m_startIndex + m_columnCount + EXTRA_COLUMNS]); } else { end = DateTime.MaxValue; } begin = DateTime.MinValue + m_maxDescriptionWidth > begin ? DateTime.MinValue : begin - m_maxDescriptionWidth; if (AllEvents != null) { // // remove events which are not visible any more // m_visibleEvents.Keys.NotInRange(begin, end).ForEach ( (te) => RemoveEvent(m_visibleEvents[te]) ); if (!refreshVisibleOnly) { events = m_events.QuickSearch(begin, end, true); } else { events = m_visibleEvents.Keys.InRange(begin, end); } newVisibleEvents = new Dictionary <TimelineEvent, object>(); foreach (TimelineEvent e in events) { if (++i > MAX_EVENTS) { break; } pos = m_dispEvents[e]; distance = TimeSpanToPixels(CurrentDateTime - e.StartDate); left = PixelWidth / 2 - distance; Debug.Assert(e.InRange(begin, end)); if (pos.EventPixelWidth != pos.ActualEventPixelWidth) { if (left + pos.ActualEventPixelWidth < PixelWidth) { left = left + pos.ActualEventPixelWidth - PixelWidth * 2; } else if (left < -PixelWidth && left + pos.ActualEventPixelWidth > PixelWidth) { left = Math.Max(-PixelWidth, left); } } if (!m_visibleEvents.ContainsKey(e)) { visual = CreateEvent(e, m_dispEvents[e]); isNew = true; } else { visual = m_visibleEvents[e]; isNew = false; } newVisibleEvents.Add(e, visual); viewSize = Math.Max(viewSize, MoveEvent(visual, m_dispEvents[e].TopWithoutOffset, left, pos.EventPixelWidth, isNew, animate)); } m_visibleEvents = newVisibleEvents; } m_viewSize = viewSize; if (m_parent.IsMainBand) { if (oldViewSize != viewSize) { m_parent.OnScrollPositionChanged(); } m_parent.TimelineTray.FireScrollViewChanged(viewSize); } if (m_eventStoryboard != null) { m_eventStoryboard.Begin(); } return(DateTime.Now.Millisecond - start); }
/// /// <summary> /// Display all visible events and remove all invisible for current visible time window</summary> /// public void DisplayEvents( bool dateChanged = false ) { DateTime begin; DateTime end; double distance; double x; TimelineDisplayEvent pos; double viewSize = 0; if (m_timeline.IsValidIndex(m_minIndex)) { begin = m_timeline.GetFloorTime(m_timeline[m_minIndex]); } else { begin = DateTime.MinValue; } if (m_timeline.IsValidIndex(m_maxIndex)) { end = m_timeline.GetCeilingTime(m_timeline[m_maxIndex]); } else { end = DateTime.MaxValue; } if (m_events != null) { foreach (TimelineEvent e in m_events) { pos = m_dispEvents[e]; distance = TimeSpanToPixels(CurrentDateTime - e.StartDate); x = PixelWidth / 2 - distance; if (!((e.StartDate < begin && e.EndDate < begin) || (e.StartDate > end && e.EndDate > end)) || (x + pos.DescriptionWidth >= 0 && x <= m_canvas.ActualWidth)) { if (pos.EventPixelWidth != pos.ActualEventPixelWidth) { if (x + pos.ActualEventPixelWidth < PixelWidth) { x = x + pos.ActualEventPixelWidth - PixelWidth * 2; } else if (x < -PixelWidth && x + pos.ActualEventPixelWidth > PixelWidth) { x = Math.Max(-PixelWidth, x); } } if (!m_visibleEvents.ContainsKey(e)) { m_visibleEvents.Add(e, CreateEvent(e, m_dispEvents[e])); } viewSize = Math.Max(viewSize, MoveEvent(m_visibleEvents[e], m_dispEvents[e].TopWithoutOffset, x, pos.EventPixelWidth)); } else { if (m_visibleEvents.ContainsKey(e)) { RemoveEvent(m_visibleEvents[e]); m_visibleEvents.Remove(e); } } } } if (m_parent.IsMainBand) { m_parent.TimelineTray.FireScrollViewChanged(viewSize); } }