public StateHistoryItem(StateInspectorEvent @event, string time, string message, bool isSelected) { this.time = time; this.message = message; this.isSelected = isSelected; this.@event = @event; this.key = @event.GetHashCode().ToString(); }
IBookmark CreateBookmark(StateInspectorEvent change) { return(bookmarks.Factory.CreateBookmark( change.Trigger.Timestamp.Adjust(change.Output.LogSource.TimeOffsets), change.Output.LogSource.GetSafeConnectionId(), change.Trigger.StreamPosition, 0 )); }
void ShowPropertyChange(StateInspectorEvent change, bool retainFocus) { presentersFacade.ShowMessage( CreateBookmark(change), BookmarkNavigationOptions.EnablePopups | BookmarkNavigationOptions.GenericStringsSet ); if (!retainFocus) { loadedMessagesPresenter.LogViewerPresenter.ReceiveInputFocus(); } }
async Task ToggleBookmark(StateInspectorEvent change) { var togglableBmk = await change.Output.LogSource.CreateTogglableBookmark( bookmarks.Factory, CreateBookmark(change), CancellationToken.None ); if (togglableBmk != null) { bookmarks.ToggleBookmark(togglableBmk); } }
MessageTimestamp GetNodeTimestamp(NodeInfo node) { var obj = GetInspectedObject(node); StateInspectorEvent referenceEvt = null; if (obj != null) { referenceEvt = obj.StateChangeHistory.FirstOrDefault(); } if (referenceEvt != null) { return(referenceEvt.Trigger.Timestamp.Adjust(referenceEvt.Output.LogSource.TimeOffsets)); } return(MessageTimestamp.MaxValue); }
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, 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)); }
void UpdateSelectedObjectHistory(IInspectedObject[] objs) { var olsSelection = GetSelectedStateHistoryEvents(); bool updateItemsFlag = // if false - skip some steps to reduce flickering !currentObjects.SetEquals(objs) || olsSelection.Length != stateHistorySelectedRowsCount; currentObjects.Clear(); foreach (var obj in objs) { currentObjects.Add(obj); } var newSelectedIndexes = new HashSet <int>(); view.BeginUpdateStateHistoryList(updateItemsFlag, updateItemsFlag); try { stateHistoryFocusedMessage = null; var changes = objs .ZipWithIndex() .Where(obj => !obj.Value.IsTimeless) .Select(obj => obj.Value.StateChangeHistory.Select(e => new StateInspectorEventInfo() { Object = obj.Value, InspectedObjectNr = objs.Length >= 2 ? obj.Key + 1 : 0, Event = e })) .ToArray() .MergeSortedSequences(new EventsComparer()) .ToList(); if (updateItemsFlag) { foreach (var change in changes.ZipWithIndex()) { if (olsSelection.Length > 0 && olsSelection.Any(i => i.Output == change.Value.Event.Output && i.Index == change.Value.Event.Index)) { newSelectedIndexes.Add(change.Key); } } stateHistorySelectedRowsCount = newSelectedIndexes.Count; StateInspectorEvent prevSelectedEvent = null; foreach (var change in changes.ZipWithIndex()) { bool isSelected = newSelectedIndexes.Contains(change.Key); view.AddStateHistoryItem(MakeStateHistoryItem(change.Value, isSelected, stateHistorySelectedRowsCount > 1, prevSelectedEvent)); if (isSelected) { prevSelectedEvent = change.Value.Event; } } } var focusedMessageInfo = GetFocusedMessageEqualRange(objs.FirstOrDefault()); if (focusedMessageInfo != null) { stateHistoryFocusedMessage = new ListUtils.VirtualList <StateInspectorEvent>(changes.Count, i => changes[i].Event).CalcFocusedMessageEqualRange(focusedMessageInfo.FocusedMessage); } } finally { view.EndUpdateStateHistoryList( updateItemsFlag ? newSelectedIndexes.ToArray() : null, updateItemsFlag, !updateItemsFlag); } }
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); }
static string FormatTimestampt(StateInspectorEvent evt) { return(evt.Trigger.Timestamp.ToUserFrendlyString(showMilliseconds: true, showDate: false)); }
public PropertyChangeView(IInspectedObject obj, StateInspectorEvent change, DisplayMode mode, IUserNamesProvider shortNames) : base(obj) { this.Change = change; this.Mode = mode; this.shortNames = shortNames; }