/// <summary> /// Ensure that the last added entry is visible. /// </summary> private void OnTrackVisibleTimerTick(object sender, EventArgs e) { var node = lastNode; lastNode = null; if ((node != null) && miAutoScroll.Checked) { node.EnsureVisible(); } }
/// <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> /// 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> /// 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); } } }