public bool IsVisible(LogEntry entry) { switch (entry.Level) { case LogLevel.Verbose: return control.miVerbose.Checked; case LogLevel.Debug: return control.miDebug.Checked; case LogLevel.Info: return control.miInfo.Checked; case LogLevel.Warning: return control.miWarning.Checked; case LogLevel.Error: return control.miError.Checked; case LogLevel.Assert: return control.miAssert.Checked; default: return true; } }
/// <summary> /// Add received output data. /// </summary> public void AddEntry(LogEntry entry) { if (InvokeRequired) { Invoke(new Action<LogEntry>(AddEntry), entry); } else { try { entries.Add(entry); if (Show(entry)) { var node = new LogEntryNode(entry); lastNode = node; tvLog.Items.Add(node); } } catch (Exception ex) { ErrorLog.DumpError(ex); } } }
/// <summary> /// Try to parse an entry from the given data. /// </summary> internal static bool TryParse(byte[] data, int offset, int length, out LogEntry entry, out int entryLength) { entry = null; entryLength = 0; // Enough data for the header? if (offset + EntryHeaderSize > length) return false; // Get payload length // Enough data for the header and payload? var len = ArrayHelper.SwapU16BitFromArray(data, offset + entryLength); if (offset + EntryHeaderSize + len > length) return false; // we've read only 16 bits, but since there's also a 16 bit padding, // we can skip right over both. entryLength += 4; entry = new LogEntry(); entry.Pid = ArrayHelper.Swap32BitFromArray(data, offset + entryLength); entryLength += 4; entry.Tid = ArrayHelper.Swap32BitFromArray(data, offset + entryLength); entryLength += 4; entry.Seconds = ArrayHelper.Swap32BitFromArray(data, offset + entryLength); entryLength += 4; entry.NanoSeconds= ArrayHelper.Swap32BitFromArray(data, offset + entryLength); entryLength += 4; entry.Message = new byte[len]; Array.Copy(data, offset + entryLength, entry.Message, 0, len); entryLength += len; return true; }
/// <summary> /// Should the given entry be made visible? /// </summary> protected override bool Show(LogEntry entry) { if (entry.Pid != pid) return false; return base.Show(entry); }
public bool IsVisible(LogEntry entry) { return entry.Tid == tid; }
public bool IsVisible(LogEntry entry) { return entry.Tag == source; }
public bool IsVisible(LogEntry entry) { return entry.Pid == pid; }
/// <summary> /// Add received output data. /// </summary> public void AddEntry(LogEntry entry) { if (IsCancelled) return; control.AddEntry(entry); }
/// <summary> /// Default ctor /// </summary> public LogEntryNode(LogEntry entry) { this.entry = entry; ToolTipText = entry.MessageAsString; Text = entry.Pid.ToString(); SubItems.Add(entry.Tid.ToString()); SubItems.Add(entry.Time.ToShortTimeString()); SubItems.Add(entry.MessageAsString); SubItems.Add(LogLevelToString(entry.Level)); SubItems.Add(entry.Tag); }
/// <summary> /// Rebuild the list with the new filter. /// </summary> private void ApplyFilter(LogEntry active) { tvLog.BeginUpdate(); var newNodes = entries.Where(Show).Select(x => new LogEntryNode(x)).ToArray(); tvLog.Items.Clear(); tvLog.Items.AddRange(newNodes); var activeNode = newNodes.FirstOrDefault(x => x.Entry == active); lastNode = activeNode ?? newNodes.LastOrDefault(); tvLog.EndUpdate(); if (activeNode != null) { activeNode.Selected = true; } }
/// <summary> /// Should the given entry be made visible? /// </summary> protected virtual bool Show(LogEntry entry) { if (filter != null) { if (!filter.IsVisible(entry)) return false; } switch (entry.Level) { case LogLevel.Verbose: return miVerbose.Checked; case LogLevel.Debug: return miDebug.Checked; case LogLevel.Info: return miInfo.Checked; case LogLevel.Warning: return miWarning.Checked; case LogLevel.Error: return miError.Checked; case LogLevel.Assert: return miAssert.Checked; default: return true; } }