示例#1
0
 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();
 }
示例#2
0
 IBookmark CreateBookmark(StateInspectorEvent change)
 {
     return(bookmarks.Factory.CreateBookmark(
                change.Trigger.Timestamp.Adjust(change.Output.LogSource.TimeOffsets),
                change.Output.LogSource.GetSafeConnectionId(),
                change.Trigger.StreamPosition,
                0
                ));
 }
示例#3
0
 void ShowPropertyChange(StateInspectorEvent change, bool retainFocus)
 {
     presentersFacade.ShowMessage(
         CreateBookmark(change),
         BookmarkNavigationOptions.EnablePopups | BookmarkNavigationOptions.GenericStringsSet
         );
     if (!retainFocus)
     {
         loadedMessagesPresenter.LogViewerPresenter.ReceiveInputFocus();
     }
 }
示例#4
0
        async Task ToggleBookmark(StateInspectorEvent change)
        {
            var togglableBmk = await change.Output.LogSource.CreateTogglableBookmark(
                bookmarks.Factory,
                CreateBookmark(change),
                CancellationToken.None
                );

            if (togglableBmk != null)
            {
                bookmarks.ToggleBookmark(togglableBmk);
            }
        }
示例#5
0
        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));
        }
示例#8
0
        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);
            }
        }
示例#9
0
        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);
        }
示例#10
0
 static string FormatTimestampt(StateInspectorEvent evt)
 {
     return(evt.Trigger.Timestamp.ToUserFrendlyString(showMilliseconds: true, showDate: false));
 }
示例#11
0
 public PropertyChangeView(IInspectedObject obj, StateInspectorEvent change, DisplayMode mode, IUserNamesProvider shortNames) : base(obj)
 {
     this.Change     = change;
     this.Mode       = mode;
     this.shortNames = shortNames;
 }