private void OnHoverdVisualChanged(object sender, HistoryVisual visual)
        {
            toolTip1.Hide(Visualizer);

            if(visual != null) {
                toolTip1.Show(visual.History.StartTime.ToString(), Visualizer);
            }
        }
 private void Visualizer_OnSelectionChanged(object sender, HistoryVisual visual)
 {
     if(visual.Tag != null) {
         ListViewItem item = (ListViewItem)visual.Tag;
         item.Selected = true;
         item.EnsureVisible();
     }
 }
        private void FilterHistory()
        {
            bool showFailed = FailedButton.Checked;
            bool showWithErrors = ErrorButton.Checked;
            bool showOk = OkButton.Checked;

            // reset
            Visualizer.SuspendUpdate = true;
            Visualizer.Visuals.Clear();
            List.BeginUpdate();
            List.Items.Clear();

            if(historyList != null) {
                foreach(HistoryItem item in historyList) {
                    // filter
                    if((showOk && HistoryItem.IsOk(item)) ||
                       (showWithErrors && HistoryItem.IsWithErrors(item)) ||
                       (showFailed && HistoryItem.IsFailed(item))) {
                        HistoryVisual visual = new HistoryVisual(item);
                        Visualizer.Visuals.Add(visual);

                        // create a list view item
                        ListViewItem listItem = new ListViewItem();
                        listItem.Text = item.StartTime.ToString();
                        listItem.UseItemStyleForSubItems = false;

                        if(HistoryItem.IsOk(item)) {
                            listItem.SubItems.Add("Completed");
                        }
                        else if(HistoryItem.IsWithErrors(item)) {
                            listItem.SubItems.Add("Completed with Errors");
                            listItem.ImageIndex = 0;
                        }
                        else {
                            listItem.SubItems.Add("Failed");
                            listItem.ImageIndex = 1;
                        }

                        TimeSpan? duration = item.DeltaTime;

                        if(duration.HasValue) {
                            listItem.SubItems.Add(duration.Value.ToString());
                        }
                        else {
                            listItem.SubItems.Add("");
                        }

                        if(item.Statistics != null) {
                            listItem.SubItems.Add(item.Statistics.FailedObjects.ToString());
                            listItem.SubItems.Add(item.Statistics.Errors.ToString());
                        }
                        else {
                            listItem.SubItems.Add("");
                            listItem.SubItems.Add("");
                        }

                        if(item.ReportInfo != null) {
                            listItem.SubItems.Add("Yes");
                            listItem.SubItems[5].ForeColor = Color.Blue;
                        }
                        else {
                            listItem.SubItems.Add("No");
                        }

                        List.Items.Add(listItem);
                        listItem.Tag = visual;
                        visual.Tag = listItem;
                    }
                }

                Visualizer.SuspendUpdate = false;
                List.EndUpdate();
                ItemLabel.Text = "Items: " + List.Items.Count;
            }
        }