ImmutableArray <StateHistoryItem> MakeSelectedObjectHistory( ImmutableArray <IInspectedObject> selectedObjects, ImmutableArray <StateInspectorEvent> selectedEvents ) { var result = ImmutableArray.CreateBuilder <StateHistoryItem>(); var changes = selectedObjects .ZipWithIndex() .Where(obj => !obj.Value.IsTimeless) .Select(obj => obj.Value.StateChangeHistory.Select(e => new StateInspectorEventInfo() { Object = obj.Value, InspectedObjectNr = selectedObjects.Length >= 2 ? obj.Key + 1 : 0, Event = e })) .ToArray() .MergeSortedSequences(new EventsComparer()) .ToList(); var selectedEventsSet = selectedEvents.Select(e => (e.Output, e.Index)).ToHashSet(); bool isEventSelected(StateInspectorEvent e) => selectedEventsSet.Contains((e.Output, e.Index)); var messageFormatter = new StateHistoryMessageFormatter { shortNames = this.shortNames }; bool showTimeDeltas = changes.Where(c => isEventSelected(c.Event)).Take(2).Count() > 1; StateInspectorEvent prevSelectedEvent = null; foreach (var change in changes.ZipWithIndex()) { messageFormatter.currentObject = change.Value.Object; bool isSelected = isEventSelected(change.Value.Event); result.Add(MakeStateHistoryItem(change.Value, isSelected, showTimeDeltas, prevSelectedEvent, messageFormatter, change.Key)); if (isSelected) { prevSelectedEvent = change.Value.Event; } } return(result.ToImmutable()); }
StateHistoryItem MakeStateHistoryItem(StateInspectorEventInfo evtInfo, bool isSelected, bool showTimeDeltas, StateInspectorEvent prevSelectedEvent) { var evt = evtInfo.Event; StateHistoryItem ret = new StateHistoryItem() { Data = evt }; if (showTimeDeltas) { if (isSelected && prevSelectedEvent != null) { ret.Time = TimeUtils.TimeDeltaToString( evt.Trigger.Timestamp.ToUnspecifiedTime() - prevSelectedEvent.Trigger.Timestamp.ToUnspecifiedTime(), addPlusSign: true); } else { ret.Time = ""; } } else { ret.Time = FormatTimestampt(evt); } var messageFormatter = new StateHistoryMessageFormatter() { shortNames = this.shortNames }; evt.OriginalEvent.Visit(messageFormatter); if (evtInfo.InspectedObjectNr != 0) { ret.Message = string.Format("#{0}: {1}", evtInfo.InspectedObjectNr, messageFormatter.message); } else { ret.Message = messageFormatter.message; } return(ret); }
StateHistoryItem MakeStateHistoryItem(StateInspectorEventInfo evtInfo, bool isSelected, bool showTimeDeltas, StateInspectorEvent prevSelectedEvent, StateHistoryMessageFormatter messageFormatter, int index) { var evt = evtInfo.Event; string time; if (showTimeDeltas) { if (isSelected && prevSelectedEvent != null) { time = TimeUtils.TimeDeltaToString( evt.Trigger.Timestamp.ToUnspecifiedTime() - prevSelectedEvent.Trigger.Timestamp.ToUnspecifiedTime(), addPlusSign: true); } else { time = ""; } } else { time = FormatTimestampt(evt); } string message; messageFormatter.Reset(); evt.OriginalEvent.Visit(messageFormatter); if (evtInfo.InspectedObjectNr != 0) { message = string.Format("#{0}: {1}", evtInfo.InspectedObjectNr, messageFormatter.message); } else { message = messageFormatter.message; } return(new StateHistoryItem(evt, time, message, isSelected, index)); }